@1mcp/agent 0.14.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/README.md +118 -30
  2. package/build/constants.d.ts +2 -1
  3. package/build/constants.d.ts.map +1 -1
  4. package/build/constants.js +2 -1
  5. package/build/constants.js.map +1 -1
  6. package/build/core/server/agentConfig.d.ts +16 -0
  7. package/build/core/server/agentConfig.d.ts.map +1 -1
  8. package/build/core/server/agentConfig.js +32 -7
  9. package/build/core/server/agentConfig.js.map +1 -1
  10. package/build/index.js +20 -0
  11. package/build/index.js.map +1 -1
  12. package/build/services/healthService.d.ts +107 -0
  13. package/build/services/healthService.d.ts.map +1 -0
  14. package/build/services/healthService.js +294 -0
  15. package/build/services/healthService.js.map +1 -0
  16. package/build/transport/http/routes/healthRoutes.d.ts +7 -0
  17. package/build/transport/http/routes/healthRoutes.d.ts.map +1 -0
  18. package/build/transport/http/routes/healthRoutes.js +113 -0
  19. package/build/transport/http/routes/healthRoutes.js.map +1 -0
  20. package/build/transport/http/routes/sseRoutes.d.ts +1 -1
  21. package/build/transport/http/routes/sseRoutes.d.ts.map +1 -1
  22. package/build/transport/http/routes/sseRoutes.js +4 -3
  23. package/build/transport/http/routes/sseRoutes.js.map +1 -1
  24. package/build/transport/http/routes/streamableHttpRoutes.d.ts +1 -1
  25. package/build/transport/http/routes/streamableHttpRoutes.d.ts.map +1 -1
  26. package/build/transport/http/routes/streamableHttpRoutes.js +5 -4
  27. package/build/transport/http/routes/streamableHttpRoutes.js.map +1 -1
  28. package/build/transport/http/server.d.ts.map +1 -1
  29. package/build/transport/http/server.js +16 -3
  30. package/build/transport/http/server.js.map +1 -1
  31. package/build/utils/logo.d.ts +8 -0
  32. package/build/utils/logo.d.ts.map +1 -0
  33. package/build/utils/logo.js +26 -0
  34. package/build/utils/logo.js.map +1 -0
  35. package/package.json +18 -3
@@ -0,0 +1,294 @@
1
+ import { ClientStatus } from '../core/types/index.js';
2
+ import { ServerManager } from '../core/server/serverManager.js';
3
+ import { McpConfigManager } from '../config/mcpConfigManager.js';
4
+ import { AgentConfigManager } from '../core/server/agentConfig.js';
5
+ import { MCP_SERVER_VERSION } from '../constants.js';
6
+ import logger from '../logger/logger.js';
7
+ /**
8
+ * Health status levels
9
+ */
10
+ export var HealthStatus;
11
+ (function (HealthStatus) {
12
+ HealthStatus["HEALTHY"] = "healthy";
13
+ HealthStatus["DEGRADED"] = "degraded";
14
+ HealthStatus["UNHEALTHY"] = "unhealthy";
15
+ })(HealthStatus || (HealthStatus = {}));
16
+ /**
17
+ * Health service for monitoring system and MCP server status
18
+ */
19
+ export class HealthService {
20
+ static instance;
21
+ startTime;
22
+ agentConfig;
23
+ constructor() {
24
+ this.startTime = Date.now();
25
+ this.agentConfig = AgentConfigManager.getInstance();
26
+ }
27
+ /**
28
+ * Get singleton instance
29
+ */
30
+ static getInstance() {
31
+ if (!HealthService.instance) {
32
+ HealthService.instance = new HealthService();
33
+ }
34
+ return HealthService.instance;
35
+ }
36
+ /**
37
+ * Perform complete health check
38
+ */
39
+ async performHealthCheck() {
40
+ try {
41
+ const systemHealth = this.getSystemHealth();
42
+ const serverHealth = await this.getServerHealth();
43
+ const configHealth = this.getConfigurationHealth();
44
+ const overallStatus = this.determineOverallHealth(serverHealth, configHealth);
45
+ const fullResponse = {
46
+ status: overallStatus,
47
+ timestamp: new Date().toISOString(),
48
+ version: MCP_SERVER_VERSION,
49
+ system: systemHealth,
50
+ servers: serverHealth,
51
+ configuration: configHealth,
52
+ };
53
+ // Apply security configuration to sanitize response
54
+ return this.sanitizeHealthResponse(fullResponse);
55
+ }
56
+ catch (error) {
57
+ logger.error('Health check failed:', error);
58
+ throw error;
59
+ }
60
+ }
61
+ /**
62
+ * Sanitize health response based on security configuration
63
+ */
64
+ sanitizeHealthResponse(response) {
65
+ const detailLevel = this.agentConfig.getHealthDetailLevel();
66
+ // Apply detail level restrictions
67
+ switch (detailLevel) {
68
+ case 'minimal':
69
+ // Minimal: Only basic status, no sensitive details
70
+ return {
71
+ status: response.status,
72
+ timestamp: response.timestamp,
73
+ version: response.version,
74
+ system: {
75
+ uptime: response.system.uptime,
76
+ memory: { used: 0, total: 0, percentage: 0 },
77
+ process: { pid: 0, nodeVersion: '', platform: '', arch: '' },
78
+ },
79
+ servers: {
80
+ total: response.servers.total,
81
+ healthy: response.servers.healthy,
82
+ unhealthy: response.servers.unhealthy,
83
+ details: [],
84
+ },
85
+ configuration: {
86
+ loaded: response.configuration.loaded,
87
+ serverCount: 0,
88
+ enabledCount: 0,
89
+ disabledCount: 0,
90
+ authEnabled: false,
91
+ transport: 'http',
92
+ },
93
+ };
94
+ case 'basic':
95
+ // Basic: Some server info but sanitized errors and no sensitive system details
96
+ return {
97
+ ...response,
98
+ system: {
99
+ uptime: response.system.uptime,
100
+ memory: {
101
+ used: Math.round(response.system.memory.used),
102
+ total: Math.round(response.system.memory.total),
103
+ percentage: response.system.memory.percentage,
104
+ },
105
+ process: { pid: 0, nodeVersion: '', platform: '', arch: '' },
106
+ },
107
+ servers: {
108
+ ...response.servers,
109
+ details: response.servers.details.map((server) => ({
110
+ name: server.name,
111
+ status: server.status,
112
+ healthy: server.healthy,
113
+ lastConnected: server.lastConnected,
114
+ lastError: this.sanitizeErrorMessage(server.lastError),
115
+ tags: server.tags,
116
+ })),
117
+ },
118
+ };
119
+ case 'full':
120
+ default:
121
+ // Full: All details but with basic error sanitization
122
+ return {
123
+ ...response,
124
+ servers: {
125
+ ...response.servers,
126
+ details: response.servers.details.map((server) => ({
127
+ ...server,
128
+ lastError: this.sanitizeErrorMessage(server.lastError),
129
+ })),
130
+ },
131
+ };
132
+ }
133
+ }
134
+ /**
135
+ * Sanitize error messages to prevent information leakage
136
+ */
137
+ sanitizeErrorMessage(errorMessage) {
138
+ if (!errorMessage)
139
+ return undefined;
140
+ // Remove potentially sensitive information from error messages
141
+ return errorMessage
142
+ .replace(/\b(?:password|token|key|secret|auth)\s*[:=]\s*[^\s]+/gi, '[REDACTED_CREDENTIAL]') // Key-value credentials
143
+ .replace(/\b[\w.-]+:[\w.-]+@/gi, '[REDACTED_CREDENTIAL]') // User:password@ patterns
144
+ .replace(/\bhttps?:\/\/[\w.-]+(?::\d+)?(?:\/[^\s]*)?/gi, '[REDACTED_URL]') // Complete URLs
145
+ .replace(/(?:[A-Za-z]:)?[/\\][\w.-]+(?:[/\\][\w.-]+)*\.(?:json|js|ts|py|yml|yaml|conf|ini)\b/g, '[REDACTED_PATH]') // File paths
146
+ .replace(/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/g, '[REDACTED_IP]') // IP addresses
147
+ .replace(/\blocalhost(?::\d+)?\b/gi, '[REDACTED_HOST]') // Localhost references
148
+ .substring(0, 100); // Limit error message length
149
+ }
150
+ /**
151
+ * Get system health metrics
152
+ */
153
+ getSystemHealth() {
154
+ const memUsage = process.memoryUsage();
155
+ return {
156
+ uptime: Math.floor((Date.now() - this.startTime) / 1000),
157
+ memory: {
158
+ used: Math.round((memUsage.heapUsed / 1024 / 1024) * 100) / 100, // MB
159
+ total: Math.round((memUsage.heapTotal / 1024 / 1024) * 100) / 100, // MB
160
+ percentage: Math.round((memUsage.heapUsed / memUsage.heapTotal) * 100 * 100) / 100,
161
+ },
162
+ process: {
163
+ pid: process.pid,
164
+ nodeVersion: process.version,
165
+ platform: process.platform,
166
+ arch: process.arch,
167
+ },
168
+ };
169
+ }
170
+ /**
171
+ * Get MCP server health status
172
+ */
173
+ async getServerHealth() {
174
+ try {
175
+ const serverManager = ServerManager.current;
176
+ if (!serverManager) {
177
+ return {
178
+ total: 0,
179
+ healthy: 0,
180
+ unhealthy: 0,
181
+ details: [],
182
+ };
183
+ }
184
+ const clients = serverManager.getClients();
185
+ const serverDetails = [];
186
+ let healthyCount = 0;
187
+ let unhealthyCount = 0;
188
+ for (const [name, clientInfo] of clients.entries()) {
189
+ const isHealthy = clientInfo.status === ClientStatus.Connected;
190
+ if (isHealthy) {
191
+ healthyCount++;
192
+ }
193
+ else {
194
+ unhealthyCount++;
195
+ }
196
+ serverDetails.push({
197
+ name,
198
+ status: clientInfo.status,
199
+ healthy: isHealthy,
200
+ lastConnected: clientInfo.lastConnected,
201
+ lastError: clientInfo.lastError?.message,
202
+ tags: clientInfo.transport.tags,
203
+ });
204
+ }
205
+ return {
206
+ total: clients.size,
207
+ healthy: healthyCount,
208
+ unhealthy: unhealthyCount,
209
+ details: serverDetails,
210
+ };
211
+ }
212
+ catch (error) {
213
+ logger.error('Error getting server health:', error);
214
+ return {
215
+ total: 0,
216
+ healthy: 0,
217
+ unhealthy: 0,
218
+ details: [],
219
+ };
220
+ }
221
+ }
222
+ /**
223
+ * Get configuration health status
224
+ */
225
+ getConfigurationHealth() {
226
+ try {
227
+ const mcpConfig = McpConfigManager.getInstance();
228
+ const agentConfig = AgentConfigManager.getInstance();
229
+ const config = mcpConfig.getTransportConfig();
230
+ const serverCount = Object.keys(config).length;
231
+ const enabledCount = Object.values(config).filter((server) => !server.disabled).length;
232
+ const disabledCount = serverCount - enabledCount;
233
+ return {
234
+ loaded: true,
235
+ serverCount,
236
+ enabledCount,
237
+ disabledCount,
238
+ authEnabled: agentConfig.isAuthEnabled(),
239
+ transport: 'http', // Since this is the HTTP transport layer
240
+ };
241
+ }
242
+ catch (error) {
243
+ logger.error('Error getting configuration health:', error);
244
+ return {
245
+ loaded: false,
246
+ serverCount: 0,
247
+ enabledCount: 0,
248
+ disabledCount: 0,
249
+ authEnabled: false,
250
+ transport: 'unknown',
251
+ };
252
+ }
253
+ }
254
+ /**
255
+ * Determine overall health status based on component status
256
+ */
257
+ determineOverallHealth(serverHealth, configHealth) {
258
+ // Configuration must be loaded
259
+ if (!configHealth.loaded) {
260
+ return HealthStatus.UNHEALTHY;
261
+ }
262
+ // If no servers are configured, system is healthy but degraded
263
+ if (serverHealth.total === 0) {
264
+ return HealthStatus.DEGRADED;
265
+ }
266
+ // If all servers are healthy, system is healthy
267
+ if (serverHealth.healthy === serverHealth.total) {
268
+ return HealthStatus.HEALTHY;
269
+ }
270
+ // If more than half servers are healthy, system is degraded
271
+ if (serverHealth.healthy > serverHealth.total / 2) {
272
+ return HealthStatus.DEGRADED;
273
+ }
274
+ // If less than half servers are healthy, system is unhealthy
275
+ return HealthStatus.UNHEALTHY;
276
+ }
277
+ /**
278
+ * Get HTTP status code based on health status
279
+ */
280
+ getHttpStatusCode(healthStatus) {
281
+ switch (healthStatus) {
282
+ case HealthStatus.HEALTHY:
283
+ return 200;
284
+ case HealthStatus.DEGRADED:
285
+ return 200; // Still operational, but with warnings
286
+ case HealthStatus.UNHEALTHY:
287
+ return 503; // Service unavailable
288
+ default:
289
+ return 500; // Internal server error
290
+ }
291
+ }
292
+ }
293
+ export default HealthService;
294
+ //# sourceMappingURL=healthService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"healthService.js","sourceRoot":"","sources":["../../src/services/healthService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Router } from 'express';
2
+ /**
3
+ * Creates health check routes
4
+ */
5
+ export declare function createHealthRoutes(): Router;
6
+ export default createHealthRoutes;
7
+ //# sourceMappingURL=healthRoutes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"healthRoutes.d.ts","sourceRoot":"","sources":["../../../../src/transport/http/routes/healthRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqC,MAAM,SAAS,CAAC;AAKpE;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAwH3C;AAGD,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,113 @@
1
+ import { Router } from 'express';
2
+ import rateLimit from 'express-rate-limit';
3
+ import logger from '../../../logger/logger.js';
4
+ import { HealthService, HealthStatus } from '../../../services/healthService.js';
5
+ /**
6
+ * Creates health check routes
7
+ */
8
+ export function createHealthRoutes() {
9
+ const router = Router();
10
+ const healthService = HealthService.getInstance();
11
+ // Rate limiter for health endpoints - more permissive than OAuth endpoints
12
+ const createHealthLimiter = () => {
13
+ return rateLimit({
14
+ windowMs: 5 * 60 * 1000, // 5 minutes
15
+ max: 200, // max requests per window per IP (higher limit for monitoring)
16
+ standardHeaders: true,
17
+ legacyHeaders: false,
18
+ message: {
19
+ error: 'Too many health check requests, please try again later.',
20
+ status: 'rate_limited',
21
+ },
22
+ });
23
+ };
24
+ router.use(createHealthLimiter());
25
+ /**
26
+ * Health check endpoint
27
+ * GET /health
28
+ *
29
+ * Returns comprehensive health status including:
30
+ * - Overall system status
31
+ * - MCP server connectivity status
32
+ * - System metrics (uptime, memory)
33
+ * - Configuration status
34
+ */
35
+ const healthHandler = async (req, res) => {
36
+ try {
37
+ logger.debug('Health check requested');
38
+ const healthData = await healthService.performHealthCheck();
39
+ const httpStatusCode = healthService.getHttpStatusCode(healthData.status);
40
+ // Set appropriate headers
41
+ res.setHeader('Content-Type', 'application/json');
42
+ res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate');
43
+ // Add custom headers for monitoring tools
44
+ res.setHeader('X-Health-Status', healthData.status);
45
+ res.setHeader('X-Service-Version', healthData.version);
46
+ res.setHeader('X-Uptime-Seconds', healthData.system.uptime.toString());
47
+ logger.debug(`Health check completed with status: ${healthData.status}`);
48
+ res.status(httpStatusCode).json(healthData);
49
+ }
50
+ catch (error) {
51
+ logger.error('Health check failed:', error);
52
+ // Return error response with 500 status
53
+ res.status(500).json({
54
+ status: HealthStatus.UNHEALTHY,
55
+ timestamp: new Date().toISOString(),
56
+ error: 'Health check failed',
57
+ message: error instanceof Error ? error.message : 'Unknown error occurred',
58
+ });
59
+ }
60
+ };
61
+ router.get('/', healthHandler);
62
+ /**
63
+ * Simple liveness probe endpoint
64
+ * GET /health/live
65
+ *
66
+ * Returns minimal response for basic liveness checking
67
+ * Always returns 200 if the server is running
68
+ */
69
+ const livenessHandler = (req, res) => {
70
+ res.setHeader('Content-Type', 'application/json');
71
+ res.setHeader('Cache-Control', 'no-cache');
72
+ res.status(200).json({
73
+ status: 'alive',
74
+ timestamp: new Date().toISOString(),
75
+ });
76
+ };
77
+ router.get('/live', livenessHandler);
78
+ /**
79
+ * Readiness probe endpoint
80
+ * GET /health/ready
81
+ *
82
+ * Returns 200 if service is ready to accept requests
83
+ * Returns 503 if service is not ready (e.g., configuration not loaded)
84
+ */
85
+ const readinessHandler = async (req, res) => {
86
+ try {
87
+ const healthData = await healthService.performHealthCheck();
88
+ // Service is ready if configuration is loaded
89
+ const isReady = healthData.configuration.loaded;
90
+ const statusCode = isReady ? 200 : 503;
91
+ res.setHeader('Content-Type', 'application/json');
92
+ res.setHeader('Cache-Control', 'no-cache');
93
+ res.status(statusCode).json({
94
+ status: isReady ? 'ready' : 'not_ready',
95
+ timestamp: new Date().toISOString(),
96
+ configuration: healthData.configuration,
97
+ });
98
+ }
99
+ catch (error) {
100
+ logger.error('Readiness check failed:', error);
101
+ res.status(503).json({
102
+ status: 'not_ready',
103
+ timestamp: new Date().toISOString(),
104
+ error: 'Readiness check failed',
105
+ });
106
+ }
107
+ };
108
+ router.get('/ready', readinessHandler);
109
+ return router;
110
+ }
111
+ // Export the factory function as default
112
+ export default createHealthRoutes;
113
+ //# sourceMappingURL=healthRoutes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"healthRoutes.js","sourceRoot":"","sources":["../../../../src/transport/http/routes/healthRoutes.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import { Router } from 'express';
2
2
  import { ServerManager } from '../../../core/server/serverManager.js';
3
- export declare function setupSseRoutes(router: Router, serverManager: ServerManager): void;
3
+ export declare function setupSseRoutes(router: Router, serverManager: ServerManager, authMiddleware: any): void;
4
4
  //# sourceMappingURL=sseRoutes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sseRoutes.d.ts","sourceRoot":"","sources":["../../../../src/transport/http/routes/sseRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AAKpD,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAKtE,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,IAAI,CAqEjF"}
1
+ {"version":3,"file":"sseRoutes.d.ts","sourceRoot":"","sources":["../../../../src/transport/http/routes/sseRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AAKpD,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAKtE,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,GAAG,GAAG,IAAI,CAuEtG"}
@@ -5,8 +5,9 @@ import { SSE_ENDPOINT, MESSAGES_ENDPOINT } from '../../../constants.js';
5
5
  import { ServerStatus } from '../../../core/types/index.js';
6
6
  import tagsExtractor from '../middlewares/tagsExtractor.js';
7
7
  import { getValidatedTags } from '../middlewares/scopeAuthMiddleware.js';
8
- export function setupSseRoutes(router, serverManager) {
9
- router.get(SSE_ENDPOINT, tagsExtractor, async (req, res) => {
8
+ export function setupSseRoutes(router, serverManager, authMiddleware) {
9
+ const middlewares = [tagsExtractor, authMiddleware];
10
+ router.get(SSE_ENDPOINT, ...middlewares, async (req, res) => {
10
11
  try {
11
12
  const transport = new SSEServerTransport(MESSAGES_ENDPOINT, res);
12
13
  // Use validated tags from scope auth middleware
@@ -34,7 +35,7 @@ export function setupSseRoutes(router, serverManager) {
34
35
  res.status(500).end();
35
36
  }
36
37
  });
37
- router.post(MESSAGES_ENDPOINT, async (req, res) => {
38
+ router.post(MESSAGES_ENDPOINT, ...middlewares, async (req, res) => {
38
39
  try {
39
40
  const sessionId = req.query.sessionId;
40
41
  if (!sessionId) {
@@ -1 +1 @@
1
- {"version":3,"file":"sseRoutes.js","sourceRoot":"","sources":["../../../../src/transport/http/routes/sseRoutes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sseRoutes.js","sourceRoot":"","sources":["../../../../src/transport/http/routes/sseRoutes.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import { Router } from 'express';
2
2
  import { ServerManager } from '../../../core/server/serverManager.js';
3
- export declare function setupStreamableHttpRoutes(router: Router, serverManager: ServerManager): void;
3
+ export declare function setupStreamableHttpRoutes(router: Router, serverManager: ServerManager, authMiddleware: any): void;
4
4
  //# sourceMappingURL=streamableHttpRoutes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"streamableHttpRoutes.d.ts","sourceRoot":"","sources":["../../../../src/transport/http/routes/streamableHttpRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AAMpD,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAKtE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,IAAI,CA2H5F"}
1
+ {"version":3,"file":"streamableHttpRoutes.d.ts","sourceRoot":"","sources":["../../../../src/transport/http/routes/streamableHttpRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AAMpD,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAKtE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,GAAG,GAAG,IAAI,CA6HjH"}
@@ -6,8 +6,9 @@ import { STREAMABLE_HTTP_ENDPOINT } from '../../../constants.js';
6
6
  import { ServerStatus } from '../../../core/types/index.js';
7
7
  import tagsExtractor from '../middlewares/tagsExtractor.js';
8
8
  import { getValidatedTags } from '../middlewares/scopeAuthMiddleware.js';
9
- export function setupStreamableHttpRoutes(router, serverManager) {
10
- router.post(STREAMABLE_HTTP_ENDPOINT, tagsExtractor, async (req, res) => {
9
+ export function setupStreamableHttpRoutes(router, serverManager, authMiddleware) {
10
+ const middlewares = [tagsExtractor, authMiddleware];
11
+ router.post(STREAMABLE_HTTP_ENDPOINT, ...middlewares, async (req, res) => {
11
12
  try {
12
13
  let transport;
13
14
  const sessionId = req.headers['mcp-session-id'];
@@ -66,7 +67,7 @@ export function setupStreamableHttpRoutes(router, serverManager) {
66
67
  res.status(500).end();
67
68
  }
68
69
  });
69
- router.get(STREAMABLE_HTTP_ENDPOINT, async (req, res) => {
70
+ router.get(STREAMABLE_HTTP_ENDPOINT, ...middlewares, async (req, res) => {
70
71
  try {
71
72
  const sessionId = req.headers['mcp-session-id'];
72
73
  if (!sessionId) {
@@ -95,7 +96,7 @@ export function setupStreamableHttpRoutes(router, serverManager) {
95
96
  res.status(500).end();
96
97
  }
97
98
  });
98
- router.delete(STREAMABLE_HTTP_ENDPOINT, async (req, res) => {
99
+ router.delete(STREAMABLE_HTTP_ENDPOINT, ...middlewares, async (req, res) => {
99
100
  try {
100
101
  const sessionId = req.headers['mcp-session-id'];
101
102
  if (!sessionId) {
@@ -1 +1 @@
1
- {"version":3,"file":"streamableHttpRoutes.js","sourceRoot":"","sources":["../../../../src/transport/http/routes/streamableHttpRoutes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"streamableHttpRoutes.js","sourceRoot":"","sources":["../../../../src/transport/http/routes/streamableHttpRoutes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/transport/http/server.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AASnE;;;;;;;;;;;;GAYG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,aAAa,CAAqB;IAE1C;;;;;;;OAOG;gBACS,aAAa,EAAE,aAAa;IAaxC;;;;;;;;;OASG;IACH,OAAO,CAAC,eAAe;IAiBvB;;;;;;;;;OASG;IACH,OAAO,CAAC,WAAW;IAmDnB;;;;;;;;OAQG;IACI,KAAK,IAAI,IAAI;IASpB;;;;;;;OAOG;IACI,QAAQ,IAAI,IAAI;CAGxB"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/transport/http/server.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAWnE;;;;;;;;;;;;GAYG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,aAAa,CAAqB;IAE1C;;;;;;;OAOG;gBACS,aAAa,EAAE,aAAa;IAiBxC;;;;;;;;;OASG;IACH,OAAO,CAAC,eAAe;IAiBvB;;;;;;;;;OASG;IACH,OAAO,CAAC,WAAW;IA+DnB;;;;;;;;OAQG;IACI,KAAK,IAAI,IAAI;IASpB;;;;;;;OAOG;IACI,QAAQ,IAAI,IAAI;CAGxB"}
@@ -10,9 +10,11 @@ import { SDKOAuthServerProvider } from '../../auth/sdkOAuthServerProvider.js';
10
10
  import { setupStreamableHttpRoutes } from './routes/streamableHttpRoutes.js';
11
11
  import { setupSseRoutes } from './routes/sseRoutes.js';
12
12
  import createOAuthRoutes from './routes/oauthRoutes.js';
13
+ import createHealthRoutes from './routes/healthRoutes.js';
13
14
  import { AgentConfigManager } from '../../core/server/agentConfig.js';
14
15
  import { RATE_LIMIT_CONFIG } from '../../constants.js';
15
16
  import { createScopeAuthMiddleware } from './middlewares/scopeAuthMiddleware.js';
17
+ import { McpConfigManager } from '../../config/mcpConfigManager.js';
16
18
  /**
17
19
  * ExpressServer orchestrates the HTTP/SSE transport layer for the MCP server.
18
20
  *
@@ -43,6 +45,8 @@ export class ExpressServer {
43
45
  this.app = express();
44
46
  this.serverManager = serverManager;
45
47
  this.configManager = AgentConfigManager.getInstance();
48
+ // Configure trust proxy setting before any middleware
49
+ this.app.set('trust proxy', this.configManager.getTrustProxy());
46
50
  // Initialize OAuth provider with custom session storage path if configured
47
51
  const sessionStoragePath = this.configManager.getSessionStoragePath();
48
52
  this.oauthProvider = new SDKOAuthServerProvider(sessionStoragePath);
@@ -92,9 +96,17 @@ export class ExpressServer {
92
96
  standardHeaders: true,
93
97
  legacyHeaders: false,
94
98
  };
99
+ // Get available scopes from MCP config
100
+ const mcpConfigManager = McpConfigManager.getInstance();
101
+ const availableTags = mcpConfigManager.getAvailableTags();
102
+ // Convert tags to supported scopes
103
+ const scopesSupported = availableTags.map((tag) => `tag:${tag}`);
95
104
  const authRouter = mcpAuthRouter({
96
105
  provider: this.oauthProvider,
97
106
  issuerUrl,
107
+ baseUrl: issuerUrl,
108
+ scopesSupported,
109
+ resourceName: '1MCP Agent - Universal MCP Server Proxy',
98
110
  authorizationOptions: {
99
111
  rateLimit: rateLimitConfig,
100
112
  },
@@ -111,12 +123,13 @@ export class ExpressServer {
111
123
  this.app.use(authRouter);
112
124
  // Setup OAuth management routes (no auth required)
113
125
  this.app.use('/oauth', createOAuthRoutes(this.oauthProvider));
126
+ // Setup health check routes (no auth required for monitoring)
127
+ this.app.use('/health', createHealthRoutes());
114
128
  // Setup MCP transport routes (auth is handled per-route via scopeAuthMiddleware)
115
129
  const router = express.Router();
116
130
  const scopeAuthMiddleware = createScopeAuthMiddleware(this.oauthProvider);
117
- router.use(scopeAuthMiddleware);
118
- setupStreamableHttpRoutes(router, this.serverManager);
119
- setupSseRoutes(router, this.serverManager);
131
+ setupStreamableHttpRoutes(router, this.serverManager, scopeAuthMiddleware);
132
+ setupSseRoutes(router, this.serverManager, scopeAuthMiddleware);
120
133
  this.app.use(router);
121
134
  // Log authentication status
122
135
  if (this.configManager.isAuthEnabled()) {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/transport/http/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/transport/http/server.ts"],"names":[],"mappings":"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"}