@1mcp/agent 0.11.0 → 0.13.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/README.md +45 -50
- package/build/auth/clientSessionManager.d.ts +94 -0
- package/build/auth/clientSessionManager.d.ts.map +1 -0
- package/build/auth/clientSessionManager.js +220 -0
- package/build/auth/clientSessionManager.js.map +1 -0
- package/build/auth/sdkOAuthClientProvider.d.ts +93 -0
- package/build/auth/sdkOAuthClientProvider.d.ts.map +1 -0
- package/build/auth/sdkOAuthClientProvider.js +199 -0
- package/build/auth/sdkOAuthClientProvider.js.map +1 -0
- package/build/auth/sdkOAuthServerProvider.d.ts +63 -0
- package/build/auth/sdkOAuthServerProvider.d.ts.map +1 -0
- package/build/auth/sdkOAuthServerProvider.js +428 -0
- package/build/auth/sdkOAuthServerProvider.js.map +1 -0
- package/build/{server/auth/sessionManager.d.ts → auth/serverSessionManager.d.ts} +26 -37
- package/build/auth/serverSessionManager.d.ts.map +1 -0
- package/build/{server/auth/sessionManager.js → auth/serverSessionManager.js} +104 -19
- package/build/auth/serverSessionManager.js.map +1 -0
- package/build/auth/sessionTypes.d.ts +24 -0
- package/build/auth/sessionTypes.d.ts.map +1 -0
- package/build/auth/sessionTypes.js +3 -0
- package/build/auth/sessionTypes.js.map +1 -0
- package/build/capabilities/capabilityManager.d.ts +2 -2
- package/build/capabilities/capabilityManager.d.ts.map +1 -1
- package/build/capabilities/capabilityManager.js +40 -7
- package/build/capabilities/capabilityManager.js.map +1 -1
- package/build/config/{configManager.d.ts → mcpConfigManager.d.ts} +18 -7
- package/build/config/mcpConfigManager.d.ts.map +1 -0
- package/build/config/{configManager.js → mcpConfigManager.js} +50 -10
- package/build/config/mcpConfigManager.js.map +1 -0
- package/build/constants.d.ts +36 -14
- package/build/constants.d.ts.map +1 -1
- package/build/constants.js +40 -17
- package/build/constants.js.map +1 -1
- package/build/{client.d.ts → core/client/clientFactory.d.ts} +1 -1
- package/build/core/client/clientFactory.d.ts.map +1 -0
- package/build/{client.js → core/client/clientFactory.js} +2 -2
- package/build/core/client/clientFactory.js.map +1 -0
- package/build/{clients → core/client}/clientManager.d.ts +14 -6
- package/build/core/client/clientManager.d.ts.map +1 -0
- package/build/core/client/clientManager.js +209 -0
- package/build/core/client/clientManager.js.map +1 -0
- package/build/{server/config/serverConfig.d.ts → core/server/agentConfig.d.ts} +50 -15
- package/build/core/server/agentConfig.d.ts.map +1 -0
- package/build/core/server/agentConfig.js +166 -0
- package/build/core/server/agentConfig.js.map +1 -0
- package/build/core/server/serverManager.d.ts +39 -0
- package/build/core/server/serverManager.d.ts.map +1 -0
- package/build/core/server/serverManager.js +169 -0
- package/build/core/server/serverManager.js.map +1 -0
- package/build/core/types/client.d.ts +51 -0
- package/build/core/types/client.d.ts.map +1 -0
- package/build/core/types/client.js +15 -0
- package/build/core/types/client.js.map +1 -0
- package/build/core/types/index.d.ts +4 -0
- package/build/core/types/index.d.ts.map +1 -0
- package/build/core/types/index.js +5 -0
- package/build/core/types/index.js.map +1 -0
- package/build/core/types/server.d.ts +14 -0
- package/build/core/types/server.d.ts.map +1 -0
- package/build/core/types/server.js +2 -0
- package/build/core/types/server.js.map +1 -0
- package/build/{types.d.ts → core/types/transport.d.ts} +59 -49
- package/build/core/types/transport.d.ts.map +1 -0
- package/build/{types.js → core/types/transport.js} +11 -13
- package/build/core/types/transport.js.map +1 -0
- package/build/handlers/notificationHandlers.d.ts +3 -3
- package/build/handlers/notificationHandlers.d.ts.map +1 -1
- package/build/handlers/notificationHandlers.js +13 -9
- package/build/handlers/notificationHandlers.js.map +1 -1
- package/build/handlers/requestHandlers.d.ts +2 -2
- package/build/handlers/requestHandlers.d.ts.map +1 -1
- package/build/handlers/requestHandlers.js +25 -3
- package/build/handlers/requestHandlers.js.map +1 -1
- package/build/index.js +48 -8
- package/build/index.js.map +1 -1
- package/build/logger/logger.js +1 -1
- package/build/logger/logger.js.map +1 -1
- package/build/{middleware/loggingMiddleware.d.ts → logger/mcpLoggingEnhancer.d.ts} +1 -1
- package/build/logger/mcpLoggingEnhancer.d.ts.map +1 -0
- package/build/{middleware/loggingMiddleware.js → logger/mcpLoggingEnhancer.js} +2 -2
- package/build/logger/mcpLoggingEnhancer.js.map +1 -0
- package/build/server.d.ts +1 -1
- package/build/server.d.ts.map +1 -1
- package/build/server.js +9 -6
- package/build/server.js.map +1 -1
- package/build/services/configReloadService.d.ts +15 -5
- package/build/services/configReloadService.d.ts.map +1 -1
- package/build/services/configReloadService.js +31 -14
- package/build/services/configReloadService.js.map +1 -1
- package/build/transport/http/middlewares/errorHandler.d.ts.map +1 -0
- package/build/{server → transport/http/middlewares}/errorHandler.js +1 -1
- package/build/transport/http/middlewares/errorHandler.js.map +1 -0
- package/build/transport/http/middlewares/scopeAuthMiddleware.d.ts +42 -0
- package/build/transport/http/middlewares/scopeAuthMiddleware.d.ts.map +1 -0
- package/build/transport/http/middlewares/scopeAuthMiddleware.js +136 -0
- package/build/transport/http/middlewares/scopeAuthMiddleware.js.map +1 -0
- package/build/transport/http/middlewares/securityMiddleware.d.ts +30 -0
- package/build/transport/http/middlewares/securityMiddleware.d.ts.map +1 -0
- package/build/transport/http/middlewares/securityMiddleware.js +201 -0
- package/build/transport/http/middlewares/securityMiddleware.js.map +1 -0
- package/build/transport/http/middlewares/tagsExtractor.d.ts.map +1 -0
- package/build/transport/http/middlewares/tagsExtractor.js.map +1 -0
- package/build/transport/http/routes/oauthRoutes.d.ts +4 -0
- package/build/transport/http/routes/oauthRoutes.d.ts.map +1 -0
- package/build/transport/http/routes/oauthRoutes.js +474 -0
- package/build/transport/http/routes/oauthRoutes.js.map +1 -0
- package/build/transport/http/routes/sseRoutes.d.ts +4 -0
- package/build/transport/http/routes/sseRoutes.d.ts.map +1 -0
- package/build/{server → transport/http}/routes/sseRoutes.js +12 -10
- package/build/transport/http/routes/sseRoutes.js.map +1 -0
- package/build/transport/http/routes/streamableHttpRoutes.d.ts +4 -0
- package/build/transport/http/routes/streamableHttpRoutes.d.ts.map +1 -0
- package/build/{server → transport/http}/routes/streamableHttpRoutes.js +46 -13
- package/build/transport/http/routes/streamableHttpRoutes.js.map +1 -0
- package/build/{server/expressServer.d.ts → transport/http/server.d.ts} +5 -4
- package/build/transport/http/server.d.ts.map +1 -0
- package/build/{server/expressServer.js → transport/http/server.js} +60 -23
- package/build/transport/http/server.js.map +1 -0
- package/build/transport/transportFactory.d.ts +9 -0
- package/build/transport/transportFactory.d.ts.map +1 -0
- package/build/transport/transportFactory.js +148 -0
- package/build/transport/transportFactory.js.map +1 -0
- package/build/utils/clientFiltering.d.ts +4 -4
- package/build/utils/clientFiltering.d.ts.map +1 -1
- package/build/utils/clientFiltering.js +14 -14
- package/build/utils/clientFiltering.js.map +1 -1
- package/build/utils/errorHandling.d.ts +0 -11
- package/build/utils/errorHandling.d.ts.map +1 -1
- package/build/utils/errorHandling.js +1 -18
- package/build/utils/errorHandling.js.map +1 -1
- package/build/utils/errorTypes.js +4 -4
- package/build/utils/errorTypes.js.map +1 -1
- package/build/utils/pagination.d.ts +2 -2
- package/build/utils/pagination.d.ts.map +1 -1
- package/build/utils/pagination.js +87 -8
- package/build/utils/pagination.js.map +1 -1
- package/build/utils/parsing.d.ts +13 -0
- package/build/utils/parsing.d.ts.map +1 -0
- package/build/utils/parsing.js +32 -0
- package/build/utils/parsing.js.map +1 -0
- package/build/utils/sanitization.d.ts +60 -0
- package/build/utils/sanitization.d.ts.map +1 -0
- package/build/utils/sanitization.js +149 -0
- package/build/utils/sanitization.js.map +1 -0
- package/build/utils/scopeValidation.d.ts +102 -0
- package/build/utils/scopeValidation.d.ts.map +1 -0
- package/build/utils/scopeValidation.js +244 -0
- package/build/utils/scopeValidation.js.map +1 -0
- package/package.json +23 -9
- package/build/client.d.ts.map +0 -1
- package/build/client.js.map +0 -1
- package/build/clients/clientManager.d.ts.map +0 -1
- package/build/clients/clientManager.js +0 -147
- package/build/clients/clientManager.js.map +0 -1
- package/build/config/configManager.d.ts.map +0 -1
- package/build/config/configManager.js.map +0 -1
- package/build/config/transportConfig.d.ts +0 -7
- package/build/config/transportConfig.d.ts.map +0 -1
- package/build/config/transportConfig.js +0 -90
- package/build/config/transportConfig.js.map +0 -1
- package/build/middleware/loggingMiddleware.d.ts.map +0 -1
- package/build/middleware/loggingMiddleware.js.map +0 -1
- package/build/server/auth/authManager.d.ts +0 -109
- package/build/server/auth/authManager.d.ts.map +0 -1
- package/build/server/auth/authManager.js +0 -173
- package/build/server/auth/authManager.js.map +0 -1
- package/build/server/auth/authMiddleware.d.ts +0 -16
- package/build/server/auth/authMiddleware.d.ts.map +0 -1
- package/build/server/auth/authMiddleware.js +0 -45
- package/build/server/auth/authMiddleware.js.map +0 -1
- package/build/server/auth/sessionManager.d.ts.map +0 -1
- package/build/server/auth/sessionManager.js.map +0 -1
- package/build/server/config/serverConfig.d.ts.map +0 -1
- package/build/server/config/serverConfig.js +0 -117
- package/build/server/config/serverConfig.js.map +0 -1
- package/build/server/errorHandler.d.ts.map +0 -1
- package/build/server/errorHandler.js.map +0 -1
- package/build/server/expressServer.d.ts.map +0 -1
- package/build/server/expressServer.js.map +0 -1
- package/build/server/routes/oauthRoutes.d.ts +0 -14
- package/build/server/routes/oauthRoutes.d.ts.map +0 -1
- package/build/server/routes/oauthRoutes.js +0 -132
- package/build/server/routes/oauthRoutes.js.map +0 -1
- package/build/server/routes/sseRoutes.d.ts +0 -4
- package/build/server/routes/sseRoutes.d.ts.map +0 -1
- package/build/server/routes/sseRoutes.js.map +0 -1
- package/build/server/routes/streamableHttpRoutes.d.ts +0 -4
- package/build/server/routes/streamableHttpRoutes.d.ts.map +0 -1
- package/build/server/routes/streamableHttpRoutes.js.map +0 -1
- package/build/server/tagsExtractor.d.ts.map +0 -1
- package/build/server/tagsExtractor.js.map +0 -1
- package/build/serverManager.d.ts +0 -27
- package/build/serverManager.d.ts.map +0 -1
- package/build/serverManager.js +0 -87
- package/build/serverManager.js.map +0 -1
- package/build/types.d.ts.map +0 -1
- package/build/types.js.map +0 -1
- /package/build/{server → transport/http/middlewares}/errorHandler.d.ts +0 -0
- /package/build/{server → transport/http/middlewares}/tagsExtractor.d.ts +0 -0
- /package/build/{server → transport/http/middlewares}/tagsExtractor.js +0 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { AUTH_CONFIG, HOST, PORT, RATE_LIMIT_CONFIG } from '../../constants.js';
|
|
2
|
+
/**
|
|
3
|
+
* AgentConfigManager manages agent-specific configuration settings.
|
|
4
|
+
*
|
|
5
|
+
* This singleton class handles authentication and session configuration
|
|
6
|
+
* that differs from the main MCP server configuration. It provides
|
|
7
|
+
* centralized access to agent settings with default values and
|
|
8
|
+
* runtime configuration updates.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* const configManager = AgentConfigManager.getInstance();
|
|
13
|
+
* configManager.updateConfig({
|
|
14
|
+
* auth: { enabled: true, sessionTtlMinutes: 60 }
|
|
15
|
+
* });
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export class AgentConfigManager {
|
|
19
|
+
static instance;
|
|
20
|
+
config;
|
|
21
|
+
/**
|
|
22
|
+
* Private constructor to enforce singleton pattern.
|
|
23
|
+
*
|
|
24
|
+
* Initializes the configuration with default values from constants.
|
|
25
|
+
* Should not be called directly - use getInstance() instead.
|
|
26
|
+
*/
|
|
27
|
+
constructor() {
|
|
28
|
+
this.config = {
|
|
29
|
+
host: HOST,
|
|
30
|
+
port: PORT,
|
|
31
|
+
auth: {
|
|
32
|
+
enabled: AUTH_CONFIG.SERVER.DEFAULT_ENABLED,
|
|
33
|
+
sessionTtlMinutes: AUTH_CONFIG.SERVER.SESSION.TTL_MINUTES,
|
|
34
|
+
oauthCodeTtlMs: AUTH_CONFIG.SERVER.OAUTH.CODE_TTL_MS,
|
|
35
|
+
oauthTokenTtlMs: AUTH_CONFIG.SERVER.OAUTH.TOKEN_TTL_MS,
|
|
36
|
+
},
|
|
37
|
+
rateLimit: {
|
|
38
|
+
windowMs: RATE_LIMIT_CONFIG.OAUTH.WINDOW_MS,
|
|
39
|
+
max: RATE_LIMIT_CONFIG.OAUTH.MAX,
|
|
40
|
+
},
|
|
41
|
+
features: {
|
|
42
|
+
auth: AUTH_CONFIG.SERVER.DEFAULT_ENABLED,
|
|
43
|
+
scopeValidation: AUTH_CONFIG.SERVER.DEFAULT_ENABLED,
|
|
44
|
+
enhancedSecurity: false,
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Gets the singleton instance of AgentConfigManager.
|
|
50
|
+
*
|
|
51
|
+
* Creates a new instance if one doesn't exist, otherwise returns
|
|
52
|
+
* the existing instance to ensure configuration consistency.
|
|
53
|
+
*
|
|
54
|
+
* @returns The singleton AgentConfigManager instance
|
|
55
|
+
*/
|
|
56
|
+
static getInstance() {
|
|
57
|
+
if (!AgentConfigManager.instance) {
|
|
58
|
+
AgentConfigManager.instance = new AgentConfigManager();
|
|
59
|
+
}
|
|
60
|
+
return AgentConfigManager.instance;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Updates the agent configuration with new values.
|
|
64
|
+
*
|
|
65
|
+
* Merges the provided updates with existing configuration, allowing
|
|
66
|
+
* partial updates while preserving other settings.
|
|
67
|
+
*
|
|
68
|
+
* @param updates - Partial configuration object with new values
|
|
69
|
+
*/
|
|
70
|
+
updateConfig(updates) {
|
|
71
|
+
this.config = { ...this.config, ...updates };
|
|
72
|
+
if (updates.auth) {
|
|
73
|
+
this.config.auth = { ...this.config.auth, ...updates.auth };
|
|
74
|
+
}
|
|
75
|
+
if (updates.rateLimit) {
|
|
76
|
+
this.config.rateLimit = { ...this.config.rateLimit, ...updates.rateLimit };
|
|
77
|
+
}
|
|
78
|
+
if (updates.features) {
|
|
79
|
+
this.config.features = { ...this.config.features, ...updates.features };
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Gets a copy of the current agent configuration.
|
|
84
|
+
*
|
|
85
|
+
* Returns a deep copy to prevent external modification of the
|
|
86
|
+
* internal configuration state.
|
|
87
|
+
*
|
|
88
|
+
* @returns Current agent configuration
|
|
89
|
+
*/
|
|
90
|
+
getConfig() {
|
|
91
|
+
return { ...this.config };
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Checks if authentication is currently enabled.
|
|
95
|
+
*
|
|
96
|
+
* @returns True if OAuth 2.1 authentication is enabled, false otherwise
|
|
97
|
+
*/
|
|
98
|
+
isAuthEnabled() {
|
|
99
|
+
return this.config.features.auth;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Gets the session time-to-live in minutes.
|
|
103
|
+
*
|
|
104
|
+
* @returns Session TTL in minutes
|
|
105
|
+
*/
|
|
106
|
+
getSessionTtlMinutes() {
|
|
107
|
+
return this.config.auth.sessionTtlMinutes;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Gets the custom session storage path if configured.
|
|
111
|
+
*
|
|
112
|
+
* @returns Custom session storage path or undefined if using default
|
|
113
|
+
*/
|
|
114
|
+
getSessionStoragePath() {
|
|
115
|
+
return this.config.auth.sessionStoragePath;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Gets the OAuth authorization code time-to-live in milliseconds.
|
|
119
|
+
*
|
|
120
|
+
* @returns OAuth code TTL in milliseconds
|
|
121
|
+
*/
|
|
122
|
+
getOAuthCodeTtlMs() {
|
|
123
|
+
return this.config.auth.oauthCodeTtlMs;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Gets the OAuth access token time-to-live in milliseconds.
|
|
127
|
+
*
|
|
128
|
+
* @returns OAuth token TTL in milliseconds
|
|
129
|
+
*/
|
|
130
|
+
getOAuthTokenTtlMs() {
|
|
131
|
+
return this.config.auth.oauthTokenTtlMs;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Gets the rate limit window in milliseconds.
|
|
135
|
+
*
|
|
136
|
+
* @returns Rate limit window in milliseconds
|
|
137
|
+
*/
|
|
138
|
+
getRateLimitWindowMs() {
|
|
139
|
+
return this.config.rateLimit.windowMs;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Gets the maximum number of requests per rate limit window.
|
|
143
|
+
*
|
|
144
|
+
* @returns Maximum requests per window
|
|
145
|
+
*/
|
|
146
|
+
getRateLimitMax() {
|
|
147
|
+
return this.config.rateLimit.max;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Checks if scope validation is enabled.
|
|
151
|
+
*
|
|
152
|
+
* @returns True if tag-based scope validation is enabled, false otherwise
|
|
153
|
+
*/
|
|
154
|
+
isScopeValidationEnabled() {
|
|
155
|
+
return this.config.features.scopeValidation;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Checks if enhanced security middleware is enabled.
|
|
159
|
+
*
|
|
160
|
+
* @returns True if enhanced security middleware is enabled, false otherwise
|
|
161
|
+
*/
|
|
162
|
+
isEnhancedSecurityEnabled() {
|
|
163
|
+
return this.config.features.enhancedSecurity;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=agentConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentConfig.js","sourceRoot":"","sources":["../../../src/core/server/agentConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';
|
|
2
|
+
import { OutboundConnections, InboundConnection, InboundConnectionConfig } from '../types/index.js';
|
|
3
|
+
import type { OutboundConnection } from '../types/client.js';
|
|
4
|
+
export declare class ServerManager {
|
|
5
|
+
private static instance;
|
|
6
|
+
private servers;
|
|
7
|
+
private serverConfig;
|
|
8
|
+
private serverCapabilities;
|
|
9
|
+
private clients;
|
|
10
|
+
private transports;
|
|
11
|
+
private connectionSemaphore;
|
|
12
|
+
private disconnectingIds;
|
|
13
|
+
private constructor();
|
|
14
|
+
static getOrCreateInstance(config: {
|
|
15
|
+
name: string;
|
|
16
|
+
version: string;
|
|
17
|
+
}, capabilities: {
|
|
18
|
+
capabilities: Record<string, unknown>;
|
|
19
|
+
}, clients: OutboundConnections, transports: Record<string, Transport>): ServerManager;
|
|
20
|
+
static get current(): ServerManager;
|
|
21
|
+
static resetInstance(): void;
|
|
22
|
+
connectTransport(transport: Transport, sessionId: string, opts: InboundConnectionConfig): Promise<void>;
|
|
23
|
+
private performConnection;
|
|
24
|
+
private doConnect;
|
|
25
|
+
disconnectTransport(sessionId: string, forceClose?: boolean): void;
|
|
26
|
+
getTransport(sessionId: string): Transport | undefined;
|
|
27
|
+
getTransports(): Map<string, Transport>;
|
|
28
|
+
getClientTransports(): Record<string, Transport>;
|
|
29
|
+
getClients(): OutboundConnections;
|
|
30
|
+
/**
|
|
31
|
+
* Safely get a client by name. Returns undefined if not found or not an own property.
|
|
32
|
+
* Encapsulates access to prevent prototype pollution and accidental key collisions.
|
|
33
|
+
*/
|
|
34
|
+
getClient(serverName: string): OutboundConnection | undefined;
|
|
35
|
+
getActiveTransportsCount(): number;
|
|
36
|
+
getServer(sessionId: string): InboundConnection | undefined;
|
|
37
|
+
updateClientsAndTransports(newClients: OutboundConnections, newTransports: Record<string, Transport>): void;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=serverManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serverManager.d.ts","sourceRoot":"","sources":["../../../src/core/server/serverManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAK1E,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACpG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgB;IACvC,OAAO,CAAC,OAAO,CAA6C;IAC5D,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,kBAAkB,CAA4C;IAEtE,OAAO,CAAC,OAAO,CAA8D;IAC7E,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,mBAAmB,CAAyC;IACpE,OAAO,CAAC,gBAAgB,CAA0B;IAElD,OAAO;WAYO,mBAAmB,CAC/B,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EACzC,YAAY,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EACvD,OAAO,EAAE,mBAAmB,EAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GACpC,aAAa;IAOhB,WAAkB,OAAO,IAAI,aAAa,CAEzC;WAGa,aAAa,IAAI,IAAI;IAatB,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;YA2BtG,iBAAiB;YAwBjB,SAAS;IA4BhB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,GAAE,OAAe,GAAG,IAAI;IA8BzE,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAItD,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC;IAUvC,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC;IAIhD,UAAU,IAAI,mBAAmB;IAIxC;;;OAGG;IACI,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAI7D,wBAAwB,IAAI,MAAM;IAIlC,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAI3D,0BAA0B,CAAC,UAAU,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAI;CAInH"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
2
|
+
import logger from '../../logger/logger.js';
|
|
3
|
+
import configReloadService from '../../services/configReloadService.js';
|
|
4
|
+
import { setupCapabilities } from '../../capabilities/capabilityManager.js';
|
|
5
|
+
import { enhanceServerWithLogging } from '../../logger/mcpLoggingEnhancer.js';
|
|
6
|
+
export class ServerManager {
|
|
7
|
+
static instance;
|
|
8
|
+
servers = new Map();
|
|
9
|
+
serverConfig;
|
|
10
|
+
serverCapabilities;
|
|
11
|
+
clients = new Map();
|
|
12
|
+
transports = {};
|
|
13
|
+
connectionSemaphore = new Map();
|
|
14
|
+
disconnectingIds = new Set();
|
|
15
|
+
constructor(config, capabilities, clients, transports) {
|
|
16
|
+
this.serverConfig = config;
|
|
17
|
+
this.serverCapabilities = capabilities;
|
|
18
|
+
this.clients = clients;
|
|
19
|
+
this.transports = transports;
|
|
20
|
+
}
|
|
21
|
+
static getOrCreateInstance(config, capabilities, clients, transports) {
|
|
22
|
+
if (!ServerManager.instance) {
|
|
23
|
+
ServerManager.instance = new ServerManager(config, capabilities, clients, transports);
|
|
24
|
+
}
|
|
25
|
+
return ServerManager.instance;
|
|
26
|
+
}
|
|
27
|
+
static get current() {
|
|
28
|
+
return ServerManager.instance;
|
|
29
|
+
}
|
|
30
|
+
// Test utility method to reset singleton state
|
|
31
|
+
static resetInstance() {
|
|
32
|
+
if (ServerManager.instance) {
|
|
33
|
+
// Clean up existing connections with forced close
|
|
34
|
+
for (const [sessionId] of ServerManager.instance.servers) {
|
|
35
|
+
ServerManager.instance.disconnectTransport(sessionId, true);
|
|
36
|
+
}
|
|
37
|
+
ServerManager.instance.servers.clear();
|
|
38
|
+
ServerManager.instance.connectionSemaphore.clear();
|
|
39
|
+
ServerManager.instance.disconnectingIds.clear();
|
|
40
|
+
}
|
|
41
|
+
ServerManager.instance = undefined;
|
|
42
|
+
}
|
|
43
|
+
async connectTransport(transport, sessionId, opts) {
|
|
44
|
+
// Check if a connection is already in progress for this session
|
|
45
|
+
const existingConnection = this.connectionSemaphore.get(sessionId);
|
|
46
|
+
if (existingConnection) {
|
|
47
|
+
logger.warn(`Connection already in progress for session ${sessionId}, waiting...`);
|
|
48
|
+
await existingConnection;
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
// Check if transport is already connected
|
|
52
|
+
if (this.servers.has(sessionId)) {
|
|
53
|
+
logger.warn(`Transport already connected for session ${sessionId}`);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
// Create connection promise to prevent race conditions
|
|
57
|
+
const connectionPromise = this.performConnection(transport, sessionId, opts);
|
|
58
|
+
this.connectionSemaphore.set(sessionId, connectionPromise);
|
|
59
|
+
try {
|
|
60
|
+
await connectionPromise;
|
|
61
|
+
}
|
|
62
|
+
finally {
|
|
63
|
+
// Clean up the semaphore entry
|
|
64
|
+
this.connectionSemaphore.delete(sessionId);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async performConnection(transport, sessionId, opts) {
|
|
68
|
+
// Set connection timeout
|
|
69
|
+
const connectionTimeoutMs = 30000; // 30 seconds
|
|
70
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
71
|
+
setTimeout(() => reject(new Error(`Connection timeout for session ${sessionId}`)), connectionTimeoutMs);
|
|
72
|
+
});
|
|
73
|
+
try {
|
|
74
|
+
await Promise.race([this.doConnect(transport, sessionId, opts), timeoutPromise]);
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
// Clean up partial connection on failure
|
|
78
|
+
if (this.servers.has(sessionId)) {
|
|
79
|
+
this.servers.delete(sessionId);
|
|
80
|
+
}
|
|
81
|
+
logger.error(`Failed to connect transport for session ${sessionId}:`, error);
|
|
82
|
+
throw error;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
async doConnect(transport, sessionId, opts) {
|
|
86
|
+
// Create a new server instance for this transport
|
|
87
|
+
const server = new Server(this.serverConfig, this.serverCapabilities);
|
|
88
|
+
// Create server info object first
|
|
89
|
+
const serverInfo = {
|
|
90
|
+
server,
|
|
91
|
+
...opts,
|
|
92
|
+
};
|
|
93
|
+
// Enhance server with logging middleware
|
|
94
|
+
enhanceServerWithLogging(server);
|
|
95
|
+
// Set up capabilities for this server instance
|
|
96
|
+
await setupCapabilities(this.clients, serverInfo);
|
|
97
|
+
// Update the configuration reload service with server info
|
|
98
|
+
configReloadService.updateServerInfo(sessionId, serverInfo);
|
|
99
|
+
// Store the server instance
|
|
100
|
+
this.servers.set(sessionId, serverInfo);
|
|
101
|
+
// Connect the transport to the new server instance
|
|
102
|
+
await server.connect(transport);
|
|
103
|
+
logger.info(`Connected transport for session ${sessionId}`);
|
|
104
|
+
}
|
|
105
|
+
disconnectTransport(sessionId, forceClose = false) {
|
|
106
|
+
// Prevent recursive disconnection calls
|
|
107
|
+
if (this.disconnectingIds.has(sessionId)) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
const server = this.servers.get(sessionId);
|
|
111
|
+
if (server) {
|
|
112
|
+
this.disconnectingIds.add(sessionId);
|
|
113
|
+
try {
|
|
114
|
+
// Only close the transport if explicitly requested (e.g., during shutdown)
|
|
115
|
+
// Don't close if this is called from an onclose handler to avoid recursion
|
|
116
|
+
if (forceClose && server.server.transport) {
|
|
117
|
+
try {
|
|
118
|
+
server.server.transport.close();
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
logger.error(`Error closing transport for session ${sessionId}:`, error);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
this.servers.delete(sessionId);
|
|
125
|
+
configReloadService.removeServerInfo(sessionId);
|
|
126
|
+
logger.info(`Disconnected transport for session ${sessionId}`);
|
|
127
|
+
}
|
|
128
|
+
finally {
|
|
129
|
+
this.disconnectingIds.delete(sessionId);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
getTransport(sessionId) {
|
|
134
|
+
return this.servers.get(sessionId)?.server.transport;
|
|
135
|
+
}
|
|
136
|
+
getTransports() {
|
|
137
|
+
const transports = new Map();
|
|
138
|
+
for (const [id, server] of this.servers.entries()) {
|
|
139
|
+
if (server.server.transport) {
|
|
140
|
+
transports.set(id, server.server.transport);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return transports;
|
|
144
|
+
}
|
|
145
|
+
getClientTransports() {
|
|
146
|
+
return this.transports;
|
|
147
|
+
}
|
|
148
|
+
getClients() {
|
|
149
|
+
return this.clients;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Safely get a client by name. Returns undefined if not found or not an own property.
|
|
153
|
+
* Encapsulates access to prevent prototype pollution and accidental key collisions.
|
|
154
|
+
*/
|
|
155
|
+
getClient(serverName) {
|
|
156
|
+
return this.clients.get(serverName);
|
|
157
|
+
}
|
|
158
|
+
getActiveTransportsCount() {
|
|
159
|
+
return this.servers.size;
|
|
160
|
+
}
|
|
161
|
+
getServer(sessionId) {
|
|
162
|
+
return this.servers.get(sessionId);
|
|
163
|
+
}
|
|
164
|
+
updateClientsAndTransports(newClients, newTransports) {
|
|
165
|
+
this.clients = newClients;
|
|
166
|
+
this.transports = newTransports;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=serverManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serverManager.js","sourceRoot":"","sources":["../../../src/core/server/serverManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
2
|
+
import { ServerCapabilities } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
import { EnhancedTransport } from './transport.js';
|
|
4
|
+
import { SDKOAuthClientProvider } from '../../auth/sdkOAuthClientProvider.js';
|
|
5
|
+
/**
|
|
6
|
+
* Enum representing possible client connection states
|
|
7
|
+
*/
|
|
8
|
+
export declare enum ClientStatus {
|
|
9
|
+
/** Client is successfully connected */
|
|
10
|
+
Connected = "connected",
|
|
11
|
+
/** Client is disconnected */
|
|
12
|
+
Disconnected = "disconnected",
|
|
13
|
+
/** Client encountered an error */
|
|
14
|
+
Error = "error",
|
|
15
|
+
/** Client is waiting for OAuth authorization */
|
|
16
|
+
AwaitingOAuth = "awaiting_oauth"
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Transport that includes an OAuth provider
|
|
20
|
+
*/
|
|
21
|
+
export interface AuthProviderTransport extends EnhancedTransport {
|
|
22
|
+
oauthProvider?: SDKOAuthClientProvider;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Complete outbound connection information including transport, status and history
|
|
26
|
+
*/
|
|
27
|
+
export interface OutboundConnection {
|
|
28
|
+
readonly name: string;
|
|
29
|
+
readonly transport: AuthProviderTransport;
|
|
30
|
+
client: Client;
|
|
31
|
+
lastError?: Error;
|
|
32
|
+
lastConnected?: Date;
|
|
33
|
+
status: ClientStatus;
|
|
34
|
+
capabilities?: ServerCapabilities;
|
|
35
|
+
/** OAuth authorization URL for user to complete authentication */
|
|
36
|
+
authorizationUrl?: string;
|
|
37
|
+
/** When OAuth authorization was initiated */
|
|
38
|
+
oauthStartTime?: Date;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Map of outbound connections indexed by connection name
|
|
42
|
+
*/
|
|
43
|
+
export type OutboundConnections = Map<string, OutboundConnection>;
|
|
44
|
+
/**
|
|
45
|
+
* Options for client operations
|
|
46
|
+
*/
|
|
47
|
+
export interface OperationOptions {
|
|
48
|
+
readonly retryCount?: number;
|
|
49
|
+
readonly retryDelay?: number;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/core/types/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAE9E;;GAEG;AACH,oBAAY,YAAY;IACtB,uCAAuC;IACvC,SAAS,cAAc;IACvB,6BAA6B;IAC7B,YAAY,iBAAiB;IAC7B,kCAAkC;IAClC,KAAK,UAAU;IACf,gDAAgD;IAChD,aAAa,mBAAmB;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,iBAAiB;IAC9D,aAAa,CAAC,EAAE,sBAAsB,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,aAAa,CAAC,EAAE,IAAI,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6CAA6C;IAC7C,cAAc,CAAC,EAAE,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;AAElE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enum representing possible client connection states
|
|
3
|
+
*/
|
|
4
|
+
export var ClientStatus;
|
|
5
|
+
(function (ClientStatus) {
|
|
6
|
+
/** Client is successfully connected */
|
|
7
|
+
ClientStatus["Connected"] = "connected";
|
|
8
|
+
/** Client is disconnected */
|
|
9
|
+
ClientStatus["Disconnected"] = "disconnected";
|
|
10
|
+
/** Client encountered an error */
|
|
11
|
+
ClientStatus["Error"] = "error";
|
|
12
|
+
/** Client is waiting for OAuth authorization */
|
|
13
|
+
ClientStatus["AwaitingOAuth"] = "awaiting_oauth";
|
|
14
|
+
})(ClientStatus || (ClientStatus = {}));
|
|
15
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/core/types/client.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,CAAN,IAAY,YASX;AATD,WAAY,YAAY;IACtB,uCAAuC;IACvC,uCAAuB,CAAA;IACvB,6BAA6B;IAC7B,6CAA6B,CAAA;IAC7B,kCAAkC;IAClC,+BAAe,CAAA;IACf,gDAAgD;IAChD,gDAAgC,CAAA;AAClC,CAAC,EATW,YAAY,KAAZ,YAAY,QASvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/types/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/types/index.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
2
|
+
import { ServerCapabilities } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
export interface InboundConnectionConfig {
|
|
4
|
+
readonly tags?: string[];
|
|
5
|
+
readonly enablePagination?: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Inbound connection information including server instance and configuration
|
|
9
|
+
*/
|
|
10
|
+
export interface InboundConnection extends InboundConnectionConfig {
|
|
11
|
+
readonly server: Server;
|
|
12
|
+
}
|
|
13
|
+
export type ServerCapability = keyof ServerCapabilities;
|
|
14
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/core/types/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAExE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,uBAAuB;IAChE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/core/types/server.ts"],"names":[],"mappings":""}
|