@elliotding/ai-agent-mcp 0.1.24 → 0.1.26
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 +27 -0
- package/package.json +4 -1
- package/.prompt-cache/cmd-cmd-client-sdk-ai-hub-generate-testcase.md +0 -101
- package/.prompt-cache/cmd-cmd-client-sdk-ai-hub-submit_zct_job.md +0 -158
- package/.prompt-cache/skill-skill-client-sdk-ai-hub-analyze-conf-status.md +0 -311
- package/.prompt-cache/skill-skill-client-sdk-ai-hub-analyze-sdk-log.md +0 -64
- package/.prompt-cache/skill-skill-client-sdk-ai-hub-analyze-zmb-log-errors.md +0 -84
- package/ai-resource-telemetry.json +0 -40
- package/dist/api/cached-client.d.ts +0 -48
- package/dist/api/cached-client.d.ts.map +0 -1
- package/dist/api/cached-client.js +0 -126
- package/dist/api/cached-client.js.map +0 -1
- package/dist/api/client.d.ts +0 -281
- package/dist/api/client.d.ts.map +0 -1
- package/dist/api/client.js +0 -371
- package/dist/api/client.js.map +0 -1
- package/dist/auth/index.d.ts +0 -8
- package/dist/auth/index.d.ts.map +0 -1
- package/dist/auth/index.js +0 -26
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/middleware.d.ts +0 -36
- package/dist/auth/middleware.d.ts.map +0 -1
- package/dist/auth/middleware.js +0 -194
- package/dist/auth/middleware.js.map +0 -1
- package/dist/auth/permissions.d.ts +0 -60
- package/dist/auth/permissions.d.ts.map +0 -1
- package/dist/auth/permissions.js +0 -262
- package/dist/auth/permissions.js.map +0 -1
- package/dist/auth/token-validator.d.ts +0 -52
- package/dist/auth/token-validator.d.ts.map +0 -1
- package/dist/auth/token-validator.js +0 -215
- package/dist/auth/token-validator.js.map +0 -1
- package/dist/cache/cache-manager.d.ts +0 -49
- package/dist/cache/cache-manager.d.ts.map +0 -1
- package/dist/cache/cache-manager.js +0 -191
- package/dist/cache/cache-manager.js.map +0 -1
- package/dist/cache/index.d.ts +0 -6
- package/dist/cache/index.d.ts.map +0 -1
- package/dist/cache/index.js +0 -12
- package/dist/cache/index.js.map +0 -1
- package/dist/cache/redis-client.d.ts +0 -45
- package/dist/cache/redis-client.d.ts.map +0 -1
- package/dist/cache/redis-client.js +0 -210
- package/dist/cache/redis-client.js.map +0 -1
- package/dist/config/constants.d.ts +0 -28
- package/dist/config/constants.d.ts.map +0 -1
- package/dist/config/constants.js +0 -31
- package/dist/config/constants.js.map +0 -1
- package/dist/config/index.d.ts +0 -71
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/index.js +0 -190
- package/dist/config/index.js.map +0 -1
- package/dist/filesystem/manager.d.ts +0 -45
- package/dist/filesystem/manager.d.ts.map +0 -1
- package/dist/filesystem/manager.js +0 -246
- package/dist/filesystem/manager.js.map +0 -1
- package/dist/git/multi-source-manager.d.ts +0 -78
- package/dist/git/multi-source-manager.d.ts.map +0 -1
- package/dist/git/multi-source-manager.js +0 -577
- package/dist/git/multi-source-manager.js.map +0 -1
- package/dist/git/operations.d.ts +0 -27
- package/dist/git/operations.d.ts.map +0 -1
- package/dist/git/operations.js +0 -83
- package/dist/git/operations.js.map +0 -1
- package/dist/index.d.ts +0 -6
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -122
- package/dist/index.js.map +0 -1
- package/dist/monitoring/health.d.ts +0 -35
- package/dist/monitoring/health.d.ts.map +0 -1
- package/dist/monitoring/health.js +0 -105
- package/dist/monitoring/health.js.map +0 -1
- package/dist/prompts/cache.d.ts +0 -69
- package/dist/prompts/cache.d.ts.map +0 -1
- package/dist/prompts/cache.js +0 -163
- package/dist/prompts/cache.js.map +0 -1
- package/dist/prompts/generator.d.ts +0 -49
- package/dist/prompts/generator.d.ts.map +0 -1
- package/dist/prompts/generator.js +0 -160
- package/dist/prompts/generator.js.map +0 -1
- package/dist/prompts/index.d.ts +0 -13
- package/dist/prompts/index.d.ts.map +0 -1
- package/dist/prompts/index.js +0 -24
- package/dist/prompts/index.js.map +0 -1
- package/dist/prompts/manager.d.ts +0 -169
- package/dist/prompts/manager.d.ts.map +0 -1
- package/dist/prompts/manager.js +0 -488
- package/dist/prompts/manager.js.map +0 -1
- package/dist/resources/index.d.ts +0 -6
- package/dist/resources/index.d.ts.map +0 -1
- package/dist/resources/index.js +0 -10
- package/dist/resources/index.js.map +0 -1
- package/dist/resources/loader.d.ts +0 -88
- package/dist/resources/loader.d.ts.map +0 -1
- package/dist/resources/loader.js +0 -492
- package/dist/resources/loader.js.map +0 -1
- package/dist/server/http.d.ts +0 -57
- package/dist/server/http.d.ts.map +0 -1
- package/dist/server/http.js +0 -435
- package/dist/server/http.js.map +0 -1
- package/dist/server.d.ts +0 -13
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -200
- package/dist/server.js.map +0 -1
- package/dist/session/manager.d.ts +0 -91
- package/dist/session/manager.d.ts.map +0 -1
- package/dist/session/manager.js +0 -251
- package/dist/session/manager.js.map +0 -1
- package/dist/telemetry/index.d.ts +0 -3
- package/dist/telemetry/index.d.ts.map +0 -1
- package/dist/telemetry/index.js +0 -7
- package/dist/telemetry/index.js.map +0 -1
- package/dist/telemetry/manager.d.ts +0 -151
- package/dist/telemetry/manager.d.ts.map +0 -1
- package/dist/telemetry/manager.js +0 -367
- package/dist/telemetry/manager.js.map +0 -1
- package/dist/tools/index.d.ts +0 -12
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/index.js +0 -28
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/manage-subscription.d.ts +0 -47
- package/dist/tools/manage-subscription.d.ts.map +0 -1
- package/dist/tools/manage-subscription.js +0 -314
- package/dist/tools/manage-subscription.js.map +0 -1
- package/dist/tools/registry.d.ts +0 -40
- package/dist/tools/registry.d.ts.map +0 -1
- package/dist/tools/registry.js +0 -85
- package/dist/tools/registry.js.map +0 -1
- package/dist/tools/search-resources.d.ts +0 -35
- package/dist/tools/search-resources.d.ts.map +0 -1
- package/dist/tools/search-resources.js +0 -159
- package/dist/tools/search-resources.js.map +0 -1
- package/dist/tools/sync-resources.d.ts +0 -54
- package/dist/tools/sync-resources.d.ts.map +0 -1
- package/dist/tools/sync-resources.js +0 -733
- package/dist/tools/sync-resources.js.map +0 -1
- package/dist/tools/track-usage.d.ts +0 -63
- package/dist/tools/track-usage.d.ts.map +0 -1
- package/dist/tools/track-usage.js +0 -90
- package/dist/tools/track-usage.js.map +0 -1
- package/dist/tools/uninstall-resource.d.ts +0 -30
- package/dist/tools/uninstall-resource.d.ts.map +0 -1
- package/dist/tools/uninstall-resource.js +0 -174
- package/dist/tools/uninstall-resource.js.map +0 -1
- package/dist/tools/upload-resource.d.ts +0 -81
- package/dist/tools/upload-resource.d.ts.map +0 -1
- package/dist/tools/upload-resource.js +0 -393
- package/dist/tools/upload-resource.js.map +0 -1
- package/dist/transport/sse.d.ts +0 -29
- package/dist/transport/sse.d.ts.map +0 -1
- package/dist/transport/sse.js +0 -271
- package/dist/transport/sse.js.map +0 -1
- package/dist/types/errors.d.ts +0 -60
- package/dist/types/errors.d.ts.map +0 -1
- package/dist/types/errors.js +0 -112
- package/dist/types/errors.js.map +0 -1
- package/dist/types/index.d.ts +0 -7
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -23
- package/dist/types/index.js.map +0 -1
- package/dist/types/mcp.d.ts +0 -50
- package/dist/types/mcp.d.ts.map +0 -1
- package/dist/types/mcp.js +0 -6
- package/dist/types/mcp.js.map +0 -1
- package/dist/types/resources.d.ts +0 -109
- package/dist/types/resources.d.ts.map +0 -1
- package/dist/types/resources.js +0 -7
- package/dist/types/resources.js.map +0 -1
- package/dist/types/tools.d.ts +0 -235
- package/dist/types/tools.d.ts.map +0 -1
- package/dist/types/tools.js +0 -6
- package/dist/types/tools.js.map +0 -1
- package/dist/utils/cursor-paths.d.ts +0 -84
- package/dist/utils/cursor-paths.d.ts.map +0 -1
- package/dist/utils/cursor-paths.js +0 -166
- package/dist/utils/cursor-paths.js.map +0 -1
- package/dist/utils/log-cleaner.d.ts +0 -18
- package/dist/utils/log-cleaner.d.ts.map +0 -1
- package/dist/utils/log-cleaner.js +0 -112
- package/dist/utils/log-cleaner.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -59
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -292
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/validation.d.ts +0 -58
- package/dist/utils/validation.d.ts.map +0 -1
- package/dist/utils/validation.js +0 -214
- package/dist/utils/validation.js.map +0 -1
- package/src/api/cached-client.ts +0 -144
- package/src/api/client.ts +0 -697
- package/src/auth/index.ts +0 -11
- package/src/auth/middleware.ts +0 -244
- package/src/auth/permissions.ts +0 -323
- package/src/auth/token-validator.ts +0 -292
- package/src/cache/cache-manager.ts +0 -243
- package/src/cache/index.ts +0 -6
- package/src/cache/redis-client.ts +0 -249
- package/src/config/constants.ts +0 -33
- package/src/config/index.ts +0 -269
- package/src/filesystem/manager.ts +0 -235
- package/src/git/multi-source-manager.ts +0 -654
- package/src/git/operations.ts +0 -93
- package/src/index.ts +0 -157
- package/src/monitoring/health.ts +0 -132
- package/src/prompts/cache.ts +0 -140
- package/src/prompts/generator.ts +0 -143
- package/src/prompts/index.ts +0 -20
- package/src/prompts/manager.ts +0 -613
- package/src/resources/index.ts +0 -13
- package/src/resources/loader.ts +0 -563
- package/src/server/http.ts +0 -549
- package/src/server.ts +0 -204
- package/src/session/manager.ts +0 -296
- package/src/telemetry/index.ts +0 -10
- package/src/telemetry/manager.ts +0 -419
- package/src/tools/index.ts +0 -12
- package/src/tools/manage-subscription.ts +0 -385
- package/src/tools/registry.ts +0 -97
- package/src/tools/search-resources.ts +0 -185
- package/src/tools/sync-resources.ts +0 -827
- package/src/tools/track-usage.ts +0 -113
- package/src/tools/uninstall-resource.ts +0 -199
- package/src/tools/upload-resource.ts +0 -431
- package/src/transport/sse.ts +0 -308
- package/src/types/errors.ts +0 -146
- package/src/types/index.ts +0 -7
- package/src/types/mcp.ts +0 -61
- package/src/types/resources.ts +0 -141
- package/src/types/tools.ts +0 -284
- package/src/utils/cursor-paths.ts +0 -135
- package/src/utils/log-cleaner.ts +0 -92
- package/src/utils/logger.ts +0 -333
- package/src/utils/validation.ts +0 -262
package/dist/server/http.js
DELETED
|
@@ -1,435 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* HTTP Server with SSE Support
|
|
4
|
-
* Uses SDK SSEServerTransport for standard MCP-over-SSE protocol,
|
|
5
|
-
* matching the same pattern as the ACM MCP server.
|
|
6
|
-
*/
|
|
7
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
|
-
};
|
|
10
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
-
exports.httpServer = exports.HTTPServer = void 0;
|
|
12
|
-
const fastify_1 = __importDefault(require("fastify"));
|
|
13
|
-
const cors_1 = __importDefault(require("@fastify/cors"));
|
|
14
|
-
const helmet_1 = __importDefault(require("@fastify/helmet"));
|
|
15
|
-
const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
|
|
16
|
-
const sse_js_1 = require("@modelcontextprotocol/sdk/server/sse.js");
|
|
17
|
-
const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
|
|
18
|
-
const sync_resources_js_1 = require("../tools/sync-resources.js");
|
|
19
|
-
const index_js_2 = require("../telemetry/index.js");
|
|
20
|
-
const index_js_3 = require("../prompts/index.js");
|
|
21
|
-
const config_1 = require("../config");
|
|
22
|
-
const logger_1 = require("../utils/logger");
|
|
23
|
-
const manager_1 = require("../session/manager");
|
|
24
|
-
const registry_1 = require("../tools/registry");
|
|
25
|
-
const middleware_1 = require("../auth/middleware");
|
|
26
|
-
const health_js_1 = require("../monitoring/health.js");
|
|
27
|
-
class HTTPServer {
|
|
28
|
-
fastify;
|
|
29
|
-
startTime = Date.now();
|
|
30
|
-
healthChecker = null;
|
|
31
|
-
/** Active SDK SSE transports keyed by sessionId */
|
|
32
|
-
sseTransports = new Map();
|
|
33
|
-
constructor(cacheManager) {
|
|
34
|
-
this.fastify = (0, fastify_1.default)({
|
|
35
|
-
logger: false,
|
|
36
|
-
bodyLimit: 10 * 1024 * 1024, // 10MB
|
|
37
|
-
});
|
|
38
|
-
if (cacheManager) {
|
|
39
|
-
this.healthChecker = new health_js_1.HealthChecker(cacheManager);
|
|
40
|
-
}
|
|
41
|
-
this.setupMiddleware();
|
|
42
|
-
this.setupRoutes();
|
|
43
|
-
}
|
|
44
|
-
// ─────────────────────────────────────────────────────────────────────────
|
|
45
|
-
// Middleware
|
|
46
|
-
// ─────────────────────────────────────────────────────────────────────────
|
|
47
|
-
setupMiddleware() {
|
|
48
|
-
this.fastify.register(cors_1.default, {
|
|
49
|
-
origin: true,
|
|
50
|
-
credentials: true,
|
|
51
|
-
});
|
|
52
|
-
this.fastify.register(helmet_1.default, {
|
|
53
|
-
contentSecurityPolicy: false, // Disable for SSE
|
|
54
|
-
});
|
|
55
|
-
this.fastify.addHook('onRequest', async (request) => {
|
|
56
|
-
logger_1.logger.debug({ method: request.method, url: request.url, ip: request.ip }, 'HTTP request received');
|
|
57
|
-
});
|
|
58
|
-
this.fastify.addHook('onResponse', async (request) => {
|
|
59
|
-
logger_1.logger.debug({
|
|
60
|
-
method: request.method,
|
|
61
|
-
url: request.url,
|
|
62
|
-
statusCode: request.raw.statusCode || 200,
|
|
63
|
-
}, 'HTTP response sent');
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
// ─────────────────────────────────────────────────────────────────────────
|
|
67
|
-
// Routes
|
|
68
|
-
// ─────────────────────────────────────────────────────────────────────────
|
|
69
|
-
setupRoutes() {
|
|
70
|
-
const basePath = config_1.config.http?.basePath ?? '';
|
|
71
|
-
// Health check
|
|
72
|
-
this.fastify.get(`${basePath}/health`, this.handleHealth.bind(this));
|
|
73
|
-
// SSE connection — GET establishes the stream (SDK standard)
|
|
74
|
-
this.fastify.get(`${basePath}/sse`, {
|
|
75
|
-
preHandler: middleware_1.tokenAuthOrLegacyMiddleware,
|
|
76
|
-
handler: this.handleSSEConnection.bind(this),
|
|
77
|
-
});
|
|
78
|
-
// Message endpoint — POST delivers JSON-RPC messages, sessionId in query
|
|
79
|
-
this.fastify.post(`${basePath}/message`, this.handleMessage.bind(this));
|
|
80
|
-
// OAuth discovery — return 404 so Cursor skips OAuth handshake
|
|
81
|
-
this.fastify.get('/.well-known/oauth-authorization-server', async (_req, reply) => {
|
|
82
|
-
reply.code(404).send({ error: 'OAuth not supported' });
|
|
83
|
-
});
|
|
84
|
-
// Root info
|
|
85
|
-
this.fastify.get('/', async () => ({
|
|
86
|
-
server: 'CSP AI Agent MCP Server',
|
|
87
|
-
version: '1.0.0',
|
|
88
|
-
transport: 'sse',
|
|
89
|
-
basePath: basePath || '(none)',
|
|
90
|
-
endpoints: {
|
|
91
|
-
health: `GET ${basePath}/health`,
|
|
92
|
-
sse: `GET ${basePath}/sse`,
|
|
93
|
-
message: `POST ${basePath}/message?sessionId=<id>`,
|
|
94
|
-
},
|
|
95
|
-
}));
|
|
96
|
-
}
|
|
97
|
-
// ─────────────────────────────────────────────────────────────────────────
|
|
98
|
-
// MCP Server factory
|
|
99
|
-
// ─────────────────────────────────────────────────────────────────────────
|
|
100
|
-
/**
|
|
101
|
-
* Creates a new SDK Server instance and registers all tools from toolRegistry.
|
|
102
|
-
* A fresh instance is created per SSE connection so that each session is
|
|
103
|
-
* isolated (matching ACM's createMCPServer-per-connection pattern).
|
|
104
|
-
*/
|
|
105
|
-
createMcpServer(userId, email, groups, userToken) {
|
|
106
|
-
const server = new index_js_1.Server({ name: 'csp-ai-agent-mcp', version: '0.2.0' },
|
|
107
|
-
// Declare prompts, tools, and logging capabilities only.
|
|
108
|
-
// REMOVED resources capability to align with async-pilot's working implementation.
|
|
109
|
-
// Cursor should use standard prompts/get instead of probing prompt:// as resources.
|
|
110
|
-
{ capabilities: { tools: {}, prompts: {}, logging: {} } });
|
|
111
|
-
// Install Prompt list/get handlers synchronously on this Server instance.
|
|
112
|
-
// Pass userToken so GetPrompt can attribute telemetry to the correct user.
|
|
113
|
-
index_js_3.promptManager.installHandlers(server, userToken);
|
|
114
|
-
// tools/list
|
|
115
|
-
server.setRequestHandler(types_js_1.ListToolsRequestSchema, () => ({
|
|
116
|
-
tools: registry_1.toolRegistry.getMCPToolDefinitions(),
|
|
117
|
-
}));
|
|
118
|
-
// Auto-sync subscribed resources once the MCP handshake is fully complete.
|
|
119
|
-
// Runs in the background so it never blocks the connection setup.
|
|
120
|
-
server.oninitialized = () => {
|
|
121
|
-
logger_1.logger.info({ userId }, 'MCP initialized — triggering background sync_resources');
|
|
122
|
-
// Flush any pending telemetry immediately on (re)connect so events from
|
|
123
|
-
// before a disconnect are not held until the next 10-second tick.
|
|
124
|
-
index_js_2.telemetry.flushOnReconnect();
|
|
125
|
-
(0, sync_resources_js_1.syncResources)({ mode: 'incremental', scope: 'global', user_token: userToken }).then(async (result) => {
|
|
126
|
-
if (result.success) {
|
|
127
|
-
logger_1.logger.info({ userId, synced: result.data?.summary?.synced, cached: result.data?.summary?.cached }, 'Auto sync_resources on connect completed');
|
|
128
|
-
// If the sync result includes local_actions_required (Rule files /
|
|
129
|
-
// MCP entries that must be written on the user's local machine),
|
|
130
|
-
// cache them in PromptManager. They will be embedded directly into
|
|
131
|
-
// the csp-ai-agent-setup prompt content the next time the AI calls
|
|
132
|
-
// GetPrompt for that prompt, so the AI receives them without needing
|
|
133
|
-
// to call sync_resources again and without relying on sendLoggingMessage
|
|
134
|
-
// (which is unreliable — the connection may already be closed by then).
|
|
135
|
-
const actions = result.data?.local_actions_required;
|
|
136
|
-
if (actions && actions.length > 0) {
|
|
137
|
-
index_js_3.promptManager.storeSyncActions(userToken ?? '', actions);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
logger_1.logger.warn({ userId, error: result.error }, 'Auto sync_resources on connect failed');
|
|
142
|
-
}
|
|
143
|
-
}).catch((err) => {
|
|
144
|
-
logger_1.logger.error({ userId, err }, 'Auto sync_resources on connect threw an error');
|
|
145
|
-
});
|
|
146
|
-
};
|
|
147
|
-
// tools/call
|
|
148
|
-
server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
149
|
-
const { name, arguments: args = {} } = request.params;
|
|
150
|
-
// Permission check when user context is available
|
|
151
|
-
if (userId && groups && groups.length > 0) {
|
|
152
|
-
const permCheck = (0, middleware_1.checkToolCallPermission)(name, { userId, email: email ?? '', groups });
|
|
153
|
-
if (!permCheck.allowed) {
|
|
154
|
-
return {
|
|
155
|
-
content: [{ type: 'text', text: `Permission denied: ${permCheck.reason}` }],
|
|
156
|
-
isError: true,
|
|
157
|
-
};
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
// Inject the authenticated token so every tool can call the CSP API without
|
|
161
|
-
// requiring the AI to know about or pass user_token explicitly.
|
|
162
|
-
// The AI-supplied user_token (if any) takes precedence; otherwise we fall back
|
|
163
|
-
// to the token from the SSE connection that created this session.
|
|
164
|
-
const enrichedArgs = {
|
|
165
|
-
user_token: userToken,
|
|
166
|
-
...args,
|
|
167
|
-
};
|
|
168
|
-
try {
|
|
169
|
-
const result = await registry_1.toolRegistry.callTool(name, enrichedArgs);
|
|
170
|
-
const text = typeof result === 'string' ? result : JSON.stringify(result, null, 2);
|
|
171
|
-
return { content: [{ type: 'text', text }] };
|
|
172
|
-
}
|
|
173
|
-
catch (err) {
|
|
174
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
175
|
-
logger_1.logger.error({ toolName: name, err }, 'Tool execution failed');
|
|
176
|
-
return {
|
|
177
|
-
content: [{ type: 'text', text: `Error: ${msg}` }],
|
|
178
|
-
isError: true,
|
|
179
|
-
};
|
|
180
|
-
}
|
|
181
|
-
});
|
|
182
|
-
return server;
|
|
183
|
-
}
|
|
184
|
-
// ─────────────────────────────────────────────────────────────────────────
|
|
185
|
-
// Handlers
|
|
186
|
-
// ─────────────────────────────────────────────────────────────────────────
|
|
187
|
-
/**
|
|
188
|
-
* GET /sse — establish SSE stream using SDK SSEServerTransport.
|
|
189
|
-
* Auth is validated via preHandler; user context is forwarded to the MCP server.
|
|
190
|
-
*/
|
|
191
|
-
async handleSSEConnection(request, reply) {
|
|
192
|
-
logger_1.logger.info({ ip: request.ip }, 'SSE connection request received');
|
|
193
|
-
const authHeader = request.headers.authorization;
|
|
194
|
-
const token = authHeader?.replace(/^Bearer\s+/i, '');
|
|
195
|
-
if (!token) {
|
|
196
|
-
reply.code(401).send({ error: 'Unauthorized', message: 'Bearer token required' });
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
|
-
// Register the authenticated token so flush() can report telemetry for this user.
|
|
200
|
-
// The token comes from the SSE Authorization header and is the single source of truth.
|
|
201
|
-
index_js_2.telemetry.setUserToken(token);
|
|
202
|
-
try {
|
|
203
|
-
// Keep our session manager in sync for health/monitoring endpoints
|
|
204
|
-
const sessionOptions = request.user
|
|
205
|
-
? { userId: request.user.userId, email: request.user.email, groups: request.user.groups }
|
|
206
|
-
: undefined;
|
|
207
|
-
const session = await manager_1.sessionManager.createSession(token, request.ip ?? '', sessionOptions);
|
|
208
|
-
logger_1.logger.info({ sessionId: session.id, userId: session.userId, email: session.email }, 'Session created');
|
|
209
|
-
// Heartbeat to keep proxies/load-balancers from dropping idle SSE streams
|
|
210
|
-
const heartbeat = setInterval(() => {
|
|
211
|
-
if (!reply.raw.destroyed) {
|
|
212
|
-
try {
|
|
213
|
-
reply.raw.write('event: heartbeat\ndata: {}\n\n');
|
|
214
|
-
}
|
|
215
|
-
catch {
|
|
216
|
-
clearInterval(heartbeat);
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
else {
|
|
220
|
-
clearInterval(heartbeat);
|
|
221
|
-
}
|
|
222
|
-
}, 30_000);
|
|
223
|
-
// Build the absolute message URL for the SSE endpoint event.
|
|
224
|
-
// Cursor (and other MCP clients) use this URL to POST all subsequent
|
|
225
|
-
// JSON-RPC messages (tools/call, prompts/get, etc.).
|
|
226
|
-
//
|
|
227
|
-
// publicOrigin is resolved at startup from (in priority order):
|
|
228
|
-
// 1. PUBLIC_URL env var
|
|
229
|
-
// 2. Origin extracted from CSP_API_BASE_URL (same host as the API)
|
|
230
|
-
// 3. http://HTTP_HOST:HTTP_PORT (safe for local dev)
|
|
231
|
-
// See config/index.ts for details.
|
|
232
|
-
const basePath = config_1.config.http?.basePath ?? '';
|
|
233
|
-
const publicOrigin = config_1.config.http?.publicOrigin ?? `http://127.0.0.1:${config_1.config.http?.port ?? 3000}`;
|
|
234
|
-
const messagePath = `${basePath}/message`;
|
|
235
|
-
// The MCP SDK SSEServerTransport.start() emits an `endpoint` SSE event
|
|
236
|
-
// whose data is a *relative* path (pathname + ?sessionId=...), stripping
|
|
237
|
-
// the origin. When deployed behind nginx, Cursor resolves this relative
|
|
238
|
-
// path against whatever origin it used to open the SSE connection, which
|
|
239
|
-
// may differ from our public API origin. The result is that GetPrompt /
|
|
240
|
-
// tools/call POST requests go to the wrong address and never arrive.
|
|
241
|
-
//
|
|
242
|
-
// Fix: intercept the raw response stream's write() method. When the SDK
|
|
243
|
-
// emits the relative endpoint event we replace it on-the-fly with the
|
|
244
|
-
// full absolute URL so Cursor always uses the correct public address.
|
|
245
|
-
// Only ONE endpoint event is ever written to the wire this way.
|
|
246
|
-
const rawRes = reply.raw;
|
|
247
|
-
const originalWrite = rawRes.write.bind(rawRes);
|
|
248
|
-
rawRes.write = (chunk, encodingOrCb, cb) => {
|
|
249
|
-
if (typeof chunk === 'string' && chunk.startsWith('event: endpoint\ndata:')) {
|
|
250
|
-
// The SDK wrote a relative endpoint event — replace with absolute URL.
|
|
251
|
-
// We know the sessionId from transport.sessionId (read after construction).
|
|
252
|
-
// Use a placeholder here; replaced below once we have the transport.
|
|
253
|
-
// (This interceptor is set before connect(), so the write happens during
|
|
254
|
-
// connect() → transport.start().)
|
|
255
|
-
chunk = chunk.replace(/^(event: endpoint\ndata:).*/, `$1 ${publicOrigin}${messagePath}?sessionId=__SESSION_ID__`);
|
|
256
|
-
}
|
|
257
|
-
if (typeof encodingOrCb === 'function') {
|
|
258
|
-
return originalWrite(chunk, encodingOrCb);
|
|
259
|
-
}
|
|
260
|
-
if (typeof cb === 'function') {
|
|
261
|
-
return originalWrite(chunk, encodingOrCb, cb);
|
|
262
|
-
}
|
|
263
|
-
return originalWrite(chunk);
|
|
264
|
-
};
|
|
265
|
-
const transport = new sse_js_1.SSEServerTransport(messagePath, rawRes);
|
|
266
|
-
const sdkSessionId = transport.sessionId;
|
|
267
|
-
// Now patch the placeholder with the real sessionId that the SDK assigned.
|
|
268
|
-
// The write interceptor is still active during connect() → start(), so we
|
|
269
|
-
// swap it out for a version that knows the actual sessionId.
|
|
270
|
-
rawRes.write = (chunk, encodingOrCb, cb) => {
|
|
271
|
-
if (typeof chunk === 'string' && chunk.startsWith('event: endpoint\ndata:')) {
|
|
272
|
-
chunk = `event: endpoint\ndata: ${publicOrigin}${messagePath}?sessionId=${sdkSessionId}\n\n`;
|
|
273
|
-
}
|
|
274
|
-
if (typeof encodingOrCb === 'function') {
|
|
275
|
-
return originalWrite(chunk, encodingOrCb);
|
|
276
|
-
}
|
|
277
|
-
if (typeof cb === 'function') {
|
|
278
|
-
return originalWrite(chunk, encodingOrCb, cb);
|
|
279
|
-
}
|
|
280
|
-
return originalWrite(chunk);
|
|
281
|
-
};
|
|
282
|
-
this.sseTransports.set(sdkSessionId, transport);
|
|
283
|
-
transport.onclose = () => {
|
|
284
|
-
logger_1.logger.info({ sdkSessionId, sessionId: session.id }, 'SSE transport closed');
|
|
285
|
-
clearInterval(heartbeat);
|
|
286
|
-
this.sseTransports.delete(sdkSessionId);
|
|
287
|
-
manager_1.sessionManager.closeSession(session.id);
|
|
288
|
-
};
|
|
289
|
-
transport.onerror = (err) => {
|
|
290
|
-
logger_1.logger.warn({ sdkSessionId, error: err.message }, 'SSE transport error');
|
|
291
|
-
};
|
|
292
|
-
const mcpServer = this.createMcpServer(request.user?.userId, request.user?.email, request.user?.groups, token);
|
|
293
|
-
// connect() calls transport.start() which triggers the intercepted write()
|
|
294
|
-
// above — emitting exactly ONE absolute endpoint event to the wire.
|
|
295
|
-
await mcpServer.connect(transport);
|
|
296
|
-
const absoluteMessageUrl = `${publicOrigin}${messagePath}?sessionId=${sdkSessionId}`;
|
|
297
|
-
logger_1.logger.info({ sdkSessionId, absoluteMessageUrl, publicOrigin }, 'SSE stream established — absolute endpoint URL intercepted and sent');
|
|
298
|
-
// Handle client disconnect
|
|
299
|
-
request.raw.on('close', () => {
|
|
300
|
-
clearInterval(heartbeat);
|
|
301
|
-
transport.close().catch(() => { });
|
|
302
|
-
});
|
|
303
|
-
}
|
|
304
|
-
catch (error) {
|
|
305
|
-
logger_1.logger.error({ error }, 'Failed to establish SSE connection');
|
|
306
|
-
if (!reply.raw.headersSent) {
|
|
307
|
-
reply.code(500).send({ error: 'Internal Server Error', message: 'Failed to establish connection' });
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
/**
|
|
312
|
-
* POST /message?sessionId=<id> — deliver JSON-RPC message to the correct transport.
|
|
313
|
-
* The SDK transport's handlePostMessage handles parsing and routing internally.
|
|
314
|
-
*/
|
|
315
|
-
async handleMessage(request, reply) {
|
|
316
|
-
const sessionId = request.query['sessionId'];
|
|
317
|
-
if (!sessionId) {
|
|
318
|
-
reply.code(400).send({ error: 'Bad Request', message: 'Missing sessionId query parameter' });
|
|
319
|
-
return;
|
|
320
|
-
}
|
|
321
|
-
const transport = this.sseTransports.get(sessionId);
|
|
322
|
-
if (!transport) {
|
|
323
|
-
logger_1.logger.warn({ sessionId }, 'No active transport found for sessionId');
|
|
324
|
-
reply.code(404).send({
|
|
325
|
-
error: 'Not Found',
|
|
326
|
-
message: 'Session not found or expired',
|
|
327
|
-
details: { sessionId, suggestion: 'Reconnect via GET /sse' },
|
|
328
|
-
});
|
|
329
|
-
return;
|
|
330
|
-
}
|
|
331
|
-
logger_1.logger.debug({ sessionId }, 'Forwarding message to SDK transport');
|
|
332
|
-
try {
|
|
333
|
-
await transport.handlePostMessage(request.raw, reply.raw, request.body);
|
|
334
|
-
}
|
|
335
|
-
catch (error) {
|
|
336
|
-
logger_1.logger.error({ error, sessionId }, 'Failed to handle message');
|
|
337
|
-
if (!reply.raw.headersSent) {
|
|
338
|
-
reply.code(500).send({ error: 'Internal Server Error', message: 'Failed to process message' });
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
// ─────────────────────────────────────────────────────────────────────────
|
|
343
|
-
// Health check
|
|
344
|
-
// ─────────────────────────────────────────────────────────────────────────
|
|
345
|
-
async handleHealth() {
|
|
346
|
-
const uptime = Math.floor((Date.now() - this.startTime) / 1000);
|
|
347
|
-
const memUsage = process.memoryUsage();
|
|
348
|
-
let servicesHealth = null;
|
|
349
|
-
if (this.healthChecker) {
|
|
350
|
-
try {
|
|
351
|
-
servicesHealth = await this.healthChecker.check();
|
|
352
|
-
}
|
|
353
|
-
catch (error) {
|
|
354
|
-
logger_1.logger.error({ error }, 'Health check failed');
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
const health = {
|
|
358
|
-
status: servicesHealth?.status || 'healthy',
|
|
359
|
-
uptime,
|
|
360
|
-
memory: {
|
|
361
|
-
used: Math.round(memUsage.heapUsed / 1024 / 1024),
|
|
362
|
-
total: Math.round(memUsage.heapTotal / 1024 / 1024),
|
|
363
|
-
percentage: Math.round((memUsage.heapUsed / memUsage.heapTotal) * 100),
|
|
364
|
-
},
|
|
365
|
-
sessions: {
|
|
366
|
-
active: manager_1.sessionManager.getActiveSessionCount(),
|
|
367
|
-
total: manager_1.sessionManager.getTotalSessionCount(),
|
|
368
|
-
},
|
|
369
|
-
services: servicesHealth?.services || {
|
|
370
|
-
http: 'up',
|
|
371
|
-
redis: 'not_configured',
|
|
372
|
-
cache: 'down',
|
|
373
|
-
},
|
|
374
|
-
timestamp: new Date().toISOString(),
|
|
375
|
-
};
|
|
376
|
-
if (servicesHealth?.details) {
|
|
377
|
-
health.details = servicesHealth.details;
|
|
378
|
-
}
|
|
379
|
-
logger_1.logger.info({ health }, 'Health check requested');
|
|
380
|
-
return health;
|
|
381
|
-
}
|
|
382
|
-
// ─────────────────────────────────────────────────────────────────────────
|
|
383
|
-
// Lifecycle
|
|
384
|
-
// ─────────────────────────────────────────────────────────────────────────
|
|
385
|
-
async start() {
|
|
386
|
-
try {
|
|
387
|
-
const host = config_1.config.http?.host || '0.0.0.0';
|
|
388
|
-
const port = config_1.config.http?.port || 3000;
|
|
389
|
-
const basePath = config_1.config.http?.basePath ?? '';
|
|
390
|
-
await this.fastify.listen({ host, port });
|
|
391
|
-
const publicOrigin = config_1.config.http?.publicOrigin ?? `http://${host}:${port}`;
|
|
392
|
-
logger_1.logger.info({ host, port, basePath, publicOrigin }, 'HTTP server started');
|
|
393
|
-
// Internal listen address (for ops/infra):
|
|
394
|
-
logger_1.logger.info(`Listening on: http://${host}:${port}${basePath}`);
|
|
395
|
-
// Public-facing addresses (what Cursor clients will use):
|
|
396
|
-
logger_1.logger.info(`[Public] Health check: ${publicOrigin}${basePath}/health`);
|
|
397
|
-
logger_1.logger.info(`[Public] SSE endpoint: ${publicOrigin}${basePath}/sse`);
|
|
398
|
-
logger_1.logger.info(`[Public] Message endpoint: ${publicOrigin}${basePath}/message?sessionId=<id>`);
|
|
399
|
-
}
|
|
400
|
-
catch (error) {
|
|
401
|
-
logger_1.logger.error({ error }, 'Failed to start HTTP server');
|
|
402
|
-
throw error;
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
async stop() {
|
|
406
|
-
try {
|
|
407
|
-
logger_1.logger.info('Stopping HTTP server gracefully...');
|
|
408
|
-
// Close all SDK SSE transports
|
|
409
|
-
for (const [id, transport] of this.sseTransports.entries()) {
|
|
410
|
-
logger_1.logger.info({ id }, 'Closing SDK SSE transport');
|
|
411
|
-
await transport.close().catch(() => { });
|
|
412
|
-
}
|
|
413
|
-
this.sseTransports.clear();
|
|
414
|
-
manager_1.sessionManager.closeAllSessions();
|
|
415
|
-
await new Promise(resolve => setTimeout(resolve, 500));
|
|
416
|
-
await this.fastify.close();
|
|
417
|
-
logger_1.logger.info('HTTP server stopped gracefully');
|
|
418
|
-
}
|
|
419
|
-
catch (error) {
|
|
420
|
-
logger_1.logger.error({ error }, 'Error stopping HTTP server');
|
|
421
|
-
throw error;
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
getFastify() {
|
|
425
|
-
return this.fastify;
|
|
426
|
-
}
|
|
427
|
-
setCacheManager(cacheManager) {
|
|
428
|
-
this.healthChecker = new health_js_1.HealthChecker(cacheManager);
|
|
429
|
-
logger_1.logger.info('Health checker initialized with cache manager');
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
exports.HTTPServer = HTTPServer;
|
|
433
|
-
// Singleton instance (initialized without cache manager initially)
|
|
434
|
-
exports.httpServer = new HTTPServer();
|
|
435
|
-
//# sourceMappingURL=http.js.map
|
package/dist/server/http.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP Server Main Logic
|
|
3
|
-
* Implements Model Context Protocol server with dual transport support
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Start MCP Server (auto-detect transport mode)
|
|
7
|
-
*/
|
|
8
|
-
export declare function startServer(): Promise<void>;
|
|
9
|
-
/**
|
|
10
|
-
* Stop MCP Server
|
|
11
|
-
*/
|
|
12
|
-
export declare function stopServer(): Promise<void>;
|
|
13
|
-
//# sourceMappingURL=server.d.ts.map
|
package/dist/server.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiKH;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAcjD;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAiBhD"}
|