@monoes/mcp 1.0.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 (70) hide show
  1. package/README.md +127 -0
  2. package/dist/connection-pool.d.ts +36 -0
  3. package/dist/connection-pool.d.ts.map +1 -0
  4. package/dist/connection-pool.js +273 -0
  5. package/dist/connection-pool.js.map +1 -0
  6. package/dist/index.d.ts +75 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +85 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/oauth.d.ts +146 -0
  11. package/dist/oauth.d.ts.map +1 -0
  12. package/dist/oauth.js +318 -0
  13. package/dist/oauth.js.map +1 -0
  14. package/dist/prompt-registry.d.ts +90 -0
  15. package/dist/prompt-registry.d.ts.map +1 -0
  16. package/dist/prompt-registry.js +209 -0
  17. package/dist/prompt-registry.js.map +1 -0
  18. package/dist/rate-limiter.d.ts +86 -0
  19. package/dist/rate-limiter.d.ts.map +1 -0
  20. package/dist/rate-limiter.js +197 -0
  21. package/dist/rate-limiter.js.map +1 -0
  22. package/dist/resource-registry.d.ts +144 -0
  23. package/dist/resource-registry.d.ts.map +1 -0
  24. package/dist/resource-registry.js +405 -0
  25. package/dist/resource-registry.js.map +1 -0
  26. package/dist/sampling.d.ts +102 -0
  27. package/dist/sampling.d.ts.map +1 -0
  28. package/dist/sampling.js +268 -0
  29. package/dist/sampling.js.map +1 -0
  30. package/dist/schema-validator.d.ts +30 -0
  31. package/dist/schema-validator.d.ts.map +1 -0
  32. package/dist/schema-validator.js +182 -0
  33. package/dist/schema-validator.js.map +1 -0
  34. package/dist/server.d.ts +122 -0
  35. package/dist/server.d.ts.map +1 -0
  36. package/dist/server.js +829 -0
  37. package/dist/server.js.map +1 -0
  38. package/dist/session-manager.d.ts +55 -0
  39. package/dist/session-manager.d.ts.map +1 -0
  40. package/dist/session-manager.js +252 -0
  41. package/dist/session-manager.js.map +1 -0
  42. package/dist/task-manager.d.ts +81 -0
  43. package/dist/task-manager.d.ts.map +1 -0
  44. package/dist/task-manager.js +337 -0
  45. package/dist/task-manager.js.map +1 -0
  46. package/dist/tool-registry.d.ts +88 -0
  47. package/dist/tool-registry.d.ts.map +1 -0
  48. package/dist/tool-registry.js +353 -0
  49. package/dist/tool-registry.js.map +1 -0
  50. package/dist/transport/http.d.ts +71 -0
  51. package/dist/transport/http.d.ts.map +1 -0
  52. package/dist/transport/http.js +567 -0
  53. package/dist/transport/http.js.map +1 -0
  54. package/dist/transport/index.d.ts +50 -0
  55. package/dist/transport/index.d.ts.map +1 -0
  56. package/dist/transport/index.js +181 -0
  57. package/dist/transport/index.js.map +1 -0
  58. package/dist/transport/stdio.d.ts +43 -0
  59. package/dist/transport/stdio.d.ts.map +1 -0
  60. package/dist/transport/stdio.js +194 -0
  61. package/dist/transport/stdio.js.map +1 -0
  62. package/dist/transport/websocket.d.ts +87 -0
  63. package/dist/transport/websocket.d.ts.map +1 -0
  64. package/dist/transport/websocket.js +408 -0
  65. package/dist/transport/websocket.js.map +1 -0
  66. package/dist/types.d.ts +473 -0
  67. package/dist/types.d.ts.map +1 -0
  68. package/dist/types.js +40 -0
  69. package/dist/types.js.map +1 -0
  70. package/package.json +45 -0
@@ -0,0 +1,353 @@
1
+ /**
2
+ * @monoes/mcp - Tool Registry
3
+ *
4
+ * High-performance tool management with O(1) lookup
5
+ */
6
+ import { EventEmitter } from 'events';
7
+ import { validateSchema, formatValidationErrors } from './schema-validator.js';
8
+ export class ToolRegistry extends EventEmitter {
9
+ logger;
10
+ tools = new Map();
11
+ categoryIndex = new Map();
12
+ tagIndex = new Map();
13
+ defaultContext;
14
+ totalRegistrations = 0;
15
+ totalLookups = 0;
16
+ totalExecutions = 0;
17
+ constructor(logger) {
18
+ super();
19
+ this.logger = logger;
20
+ }
21
+ register(tool, options = {}) {
22
+ const startTime = performance.now();
23
+ if (this.tools.has(tool.name) && !options.override) {
24
+ this.logger.warn('Tool already registered', { name: tool.name });
25
+ return false;
26
+ }
27
+ if (options.validate !== false) {
28
+ const validation = this.validateTool(tool);
29
+ if (!validation.valid) {
30
+ this.logger.error('Tool validation failed', {
31
+ name: tool.name,
32
+ errors: validation.errors,
33
+ });
34
+ return false;
35
+ }
36
+ }
37
+ const metadata = {
38
+ tool,
39
+ registeredAt: new Date(),
40
+ callCount: 0,
41
+ avgExecutionTime: 0,
42
+ errorCount: 0,
43
+ };
44
+ this.tools.set(tool.name, metadata);
45
+ this.totalRegistrations++;
46
+ if (tool.category) {
47
+ if (!this.categoryIndex.has(tool.category)) {
48
+ this.categoryIndex.set(tool.category, new Set());
49
+ }
50
+ this.categoryIndex.get(tool.category).add(tool.name);
51
+ }
52
+ if (tool.tags) {
53
+ for (const tag of tool.tags) {
54
+ if (!this.tagIndex.has(tag)) {
55
+ this.tagIndex.set(tag, new Set());
56
+ }
57
+ this.tagIndex.get(tag).add(tool.name);
58
+ }
59
+ }
60
+ const duration = performance.now() - startTime;
61
+ this.logger.debug('Tool registered', {
62
+ name: tool.name,
63
+ category: tool.category,
64
+ duration: `${duration.toFixed(2)}ms`,
65
+ });
66
+ this.emit('tool:registered', tool.name);
67
+ return true;
68
+ }
69
+ registerBatch(tools, options = {}) {
70
+ const startTime = performance.now();
71
+ const failed = [];
72
+ let registered = 0;
73
+ for (const tool of tools) {
74
+ if (this.register(tool, options)) {
75
+ registered++;
76
+ }
77
+ else {
78
+ failed.push(tool.name);
79
+ }
80
+ }
81
+ const duration = performance.now() - startTime;
82
+ this.logger.info('Batch registration complete', {
83
+ total: tools.length,
84
+ registered,
85
+ failed: failed.length,
86
+ duration: `${duration.toFixed(2)}ms`,
87
+ });
88
+ return { registered, failed };
89
+ }
90
+ unregister(name) {
91
+ const metadata = this.tools.get(name);
92
+ if (!metadata) {
93
+ return false;
94
+ }
95
+ if (metadata.tool.category) {
96
+ const categoryTools = this.categoryIndex.get(metadata.tool.category);
97
+ categoryTools?.delete(name);
98
+ if (categoryTools?.size === 0) {
99
+ this.categoryIndex.delete(metadata.tool.category);
100
+ }
101
+ }
102
+ if (metadata.tool.tags) {
103
+ for (const tag of metadata.tool.tags) {
104
+ const tagTools = this.tagIndex.get(tag);
105
+ tagTools?.delete(name);
106
+ if (tagTools?.size === 0) {
107
+ this.tagIndex.delete(tag);
108
+ }
109
+ }
110
+ }
111
+ this.tools.delete(name);
112
+ this.logger.debug('Tool unregistered', { name });
113
+ this.emit('tool:unregistered', name);
114
+ return true;
115
+ }
116
+ getTool(name) {
117
+ this.totalLookups++;
118
+ return this.tools.get(name)?.tool;
119
+ }
120
+ hasTool(name) {
121
+ return this.tools.has(name);
122
+ }
123
+ getToolCount() {
124
+ return this.tools.size;
125
+ }
126
+ getToolNames() {
127
+ return Array.from(this.tools.keys());
128
+ }
129
+ listTools() {
130
+ return Array.from(this.tools.values()).map(({ tool }) => ({
131
+ name: tool.name,
132
+ description: tool.description,
133
+ category: tool.category,
134
+ tags: tool.tags,
135
+ deprecated: tool.deprecated,
136
+ }));
137
+ }
138
+ search(options) {
139
+ let results;
140
+ if (options.category) {
141
+ const categoryTools = this.categoryIndex.get(options.category);
142
+ if (!categoryTools)
143
+ return [];
144
+ results = new Set(categoryTools);
145
+ }
146
+ if (options.tags && options.tags.length > 0) {
147
+ for (const tag of options.tags) {
148
+ const tagTools = this.tagIndex.get(tag);
149
+ if (!tagTools)
150
+ return [];
151
+ if (results) {
152
+ results = new Set([...results].filter((name) => tagTools.has(name)));
153
+ }
154
+ else {
155
+ results = new Set(tagTools);
156
+ }
157
+ }
158
+ }
159
+ if (!results) {
160
+ results = new Set(this.tools.keys());
161
+ }
162
+ const tools = [];
163
+ for (const name of results) {
164
+ const metadata = this.tools.get(name);
165
+ if (!metadata)
166
+ continue;
167
+ const tool = metadata.tool;
168
+ if (options.deprecated !== undefined && tool.deprecated !== options.deprecated) {
169
+ continue;
170
+ }
171
+ if (options.cacheable !== undefined && tool.cacheable !== options.cacheable) {
172
+ continue;
173
+ }
174
+ tools.push(tool);
175
+ }
176
+ return tools;
177
+ }
178
+ getByCategory(category) {
179
+ const toolNames = this.categoryIndex.get(category);
180
+ if (!toolNames)
181
+ return [];
182
+ return Array.from(toolNames)
183
+ .map((name) => this.tools.get(name)?.tool)
184
+ .filter((tool) => tool !== undefined);
185
+ }
186
+ getByTag(tag) {
187
+ const toolNames = this.tagIndex.get(tag);
188
+ if (!toolNames)
189
+ return [];
190
+ return Array.from(toolNames)
191
+ .map((name) => this.tools.get(name)?.tool)
192
+ .filter((tool) => tool !== undefined);
193
+ }
194
+ getCategories() {
195
+ return Array.from(this.categoryIndex.keys());
196
+ }
197
+ getTags() {
198
+ return Array.from(this.tagIndex.keys());
199
+ }
200
+ async execute(name, input, context) {
201
+ const startTime = performance.now();
202
+ const metadata = this.tools.get(name);
203
+ if (!metadata) {
204
+ return {
205
+ content: [{ type: 'text', text: `Tool not found: ${name}` }],
206
+ isError: true,
207
+ };
208
+ }
209
+ // Validate input against schema (security feature)
210
+ if (metadata.tool.inputSchema) {
211
+ const validation = validateSchema(input, metadata.tool.inputSchema);
212
+ if (!validation.valid) {
213
+ const errorMsg = formatValidationErrors(validation.errors);
214
+ this.logger.warn('Tool input validation failed', {
215
+ name,
216
+ errors: validation.errors,
217
+ });
218
+ return {
219
+ content: [{ type: 'text', text: `Invalid input: ${errorMsg}` }],
220
+ isError: true,
221
+ };
222
+ }
223
+ }
224
+ const execContext = {
225
+ sessionId: context?.sessionId || this.defaultContext?.sessionId || 'default-session',
226
+ ...this.defaultContext,
227
+ ...context,
228
+ };
229
+ this.totalExecutions++;
230
+ metadata.callCount++;
231
+ metadata.lastCalled = new Date();
232
+ try {
233
+ this.emit('tool:called', { name, input });
234
+ const result = await metadata.tool.handler(input, execContext);
235
+ const duration = performance.now() - startTime;
236
+ this.updateAverageExecutionTime(metadata, duration);
237
+ this.logger.debug('Tool executed', {
238
+ name,
239
+ duration: `${duration.toFixed(2)}ms`,
240
+ success: true,
241
+ });
242
+ this.emit('tool:completed', { name, duration, success: true });
243
+ return {
244
+ content: [{
245
+ type: 'text',
246
+ text: typeof result === 'string' ? result : JSON.stringify(result, null, 2),
247
+ }],
248
+ isError: false,
249
+ };
250
+ }
251
+ catch (error) {
252
+ const duration = performance.now() - startTime;
253
+ metadata.errorCount++;
254
+ this.logger.error('Tool execution failed', { name, error });
255
+ this.emit('tool:error', { name, error, duration });
256
+ return {
257
+ content: [{
258
+ type: 'text',
259
+ text: `Error: ${error instanceof Error ? error.message : String(error)}`,
260
+ }],
261
+ isError: true,
262
+ };
263
+ }
264
+ }
265
+ setDefaultContext(context) {
266
+ this.defaultContext = context;
267
+ }
268
+ getMetadata(name) {
269
+ return this.tools.get(name);
270
+ }
271
+ getStats() {
272
+ const topTools = Array.from(this.tools.entries())
273
+ .map(([name, metadata]) => ({ name, calls: metadata.callCount }))
274
+ .sort((a, b) => b.calls - a.calls)
275
+ .slice(0, 10);
276
+ return {
277
+ totalTools: this.tools.size,
278
+ totalCategories: this.categoryIndex.size,
279
+ totalTags: this.tagIndex.size,
280
+ totalRegistrations: this.totalRegistrations,
281
+ totalLookups: this.totalLookups,
282
+ totalExecutions: this.totalExecutions,
283
+ topTools,
284
+ };
285
+ }
286
+ validateTool(tool) {
287
+ const errors = [];
288
+ if (!tool.name || typeof tool.name !== 'string') {
289
+ errors.push('Tool name is required and must be a string');
290
+ }
291
+ else if (!/^[a-zA-Z][a-zA-Z0-9_/:-]*$/.test(tool.name)) {
292
+ errors.push('Tool name must start with a letter and contain only alphanumeric characters, underscores, slashes, colons, and hyphens');
293
+ }
294
+ if (!tool.description || typeof tool.description !== 'string') {
295
+ errors.push('Tool description is required and must be a string');
296
+ }
297
+ if (!tool.inputSchema || typeof tool.inputSchema !== 'object') {
298
+ errors.push('Tool inputSchema is required and must be an object');
299
+ }
300
+ else {
301
+ const schemaErrors = this.validateSchema(tool.inputSchema);
302
+ errors.push(...schemaErrors);
303
+ }
304
+ if (typeof tool.handler !== 'function') {
305
+ errors.push('Tool handler is required and must be a function');
306
+ }
307
+ return {
308
+ valid: errors.length === 0,
309
+ errors,
310
+ };
311
+ }
312
+ validateSchema(schema, path = '') {
313
+ const errors = [];
314
+ if (!schema.type) {
315
+ errors.push(`${path || 'schema'}: type is required`);
316
+ }
317
+ if (schema.type === 'object' && schema.properties) {
318
+ for (const [key, propSchema] of Object.entries(schema.properties)) {
319
+ const propPath = path ? `${path}.${key}` : key;
320
+ errors.push(...this.validateSchema(propSchema, propPath));
321
+ }
322
+ }
323
+ if (schema.type === 'array' && schema.items) {
324
+ errors.push(...this.validateSchema(schema.items, `${path}[]`));
325
+ }
326
+ return errors;
327
+ }
328
+ updateAverageExecutionTime(metadata, duration) {
329
+ const n = metadata.callCount;
330
+ metadata.avgExecutionTime =
331
+ ((metadata.avgExecutionTime * (n - 1)) + duration) / n;
332
+ }
333
+ clear() {
334
+ this.tools.clear();
335
+ this.categoryIndex.clear();
336
+ this.tagIndex.clear();
337
+ this.logger.info('Tool registry cleared');
338
+ this.emit('registry:cleared');
339
+ }
340
+ }
341
+ export function createToolRegistry(logger) {
342
+ return new ToolRegistry(logger);
343
+ }
344
+ export function defineTool(name, description, inputSchema, handler, options) {
345
+ return {
346
+ name,
347
+ description,
348
+ inputSchema,
349
+ handler,
350
+ ...options,
351
+ };
352
+ }
353
+ //# sourceMappingURL=tool-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../src/tool-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * @monoes/mcp - HTTP Transport
3
+ *
4
+ * HTTP/REST transport with WebSocket support
5
+ */
6
+ import { EventEmitter } from 'events';
7
+ import type { ITransport, TransportType, MCPNotification, RequestHandler, NotificationHandler, TransportHealthStatus, ILogger, AuthConfig } from '../types.js';
8
+ export interface HttpTransportConfig {
9
+ host: string;
10
+ port: number;
11
+ tlsEnabled?: boolean;
12
+ tlsCert?: string;
13
+ tlsKey?: string;
14
+ corsEnabled?: boolean;
15
+ corsOrigins?: string[];
16
+ auth?: AuthConfig;
17
+ maxRequestSize?: string;
18
+ requestTimeout?: number;
19
+ }
20
+ export declare class HttpTransport extends EventEmitter implements ITransport {
21
+ private readonly logger;
22
+ private readonly config;
23
+ readonly type: TransportType;
24
+ private requestHandler?;
25
+ private notificationHandler?;
26
+ private app;
27
+ private server?;
28
+ private wss?;
29
+ private running;
30
+ private activeConnections;
31
+ private messagesReceived;
32
+ private messagesSent;
33
+ private errors;
34
+ private httpRequests;
35
+ private wsMessages;
36
+ constructor(logger: ILogger, config: HttpTransportConfig);
37
+ start(): Promise<void>;
38
+ /**
39
+ * SECURITY: Refuse to bind unauthenticated servers to a non-loopback
40
+ * interface. Without `auth` configured, `handleHttpRequest` processes
41
+ * every request without validating credentials — that is only acceptable
42
+ * on loopback. If the operator asked for a non-loopback host with no auth,
43
+ * fall back to 127.0.0.1 unless they explicitly opt in via
44
+ * MONOMIND_MCP_ALLOW_REMOTE=1 (matching the CLI's own remote-bind gate).
45
+ */
46
+ private resolveBindHost;
47
+ /**
48
+ * SECURITY: Parses the same `maxRequestSize` string used for the HTTP
49
+ * body-size limit (e.g. "10mb") into a byte count for the embedded
50
+ * WebSocketServer's `maxPayload` option, so both sides of this transport
51
+ * enforce the same ceiling.
52
+ */
53
+ private parseMaxRequestSizeBytes;
54
+ stop(): Promise<void>;
55
+ onRequest(handler: RequestHandler): void;
56
+ onNotification(handler: NotificationHandler): void;
57
+ getHealthStatus(): Promise<TransportHealthStatus>;
58
+ sendNotification(notification: MCPNotification): Promise<void>;
59
+ private setupMiddleware;
60
+ private setupRoutes;
61
+ private setupWebSocketHandlers;
62
+ private handleHttpRequest;
63
+ private handleWebSocketMessage;
64
+ /**
65
+ * SECURITY: Timing-safe token comparison to prevent timing attacks
66
+ */
67
+ private timingSafeCompare;
68
+ private validateAuth;
69
+ }
70
+ export declare function createHttpTransport(logger: ILogger, config: HttpTransportConfig): HttpTransport;
71
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAMtC,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EAGb,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,OAAO,EACP,UAAU,EACX,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,aAAc,SAAQ,YAAa,YAAW,UAAU;IAkBjE,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAlBzB,SAAgB,IAAI,EAAE,aAAa,CAAU;IAE7C,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,mBAAmB,CAAC,CAAsB;IAClD,OAAO,CAAC,GAAG,CAAU;IACrB,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,GAAG,CAAC,CAAkB;IAC9B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,iBAAiB,CAAwB;IAEjD,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,UAAU,CAAK;IAEvB,YACmB,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,mBAAmB,EAM7C;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAqC3B;IAED;;;;;;;OAOG;IACH,OAAO,CAAC,eAAe;IAqCvB;;;;;OAKG;IACH,OAAO,CAAC,wBAAwB;IAoB1B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA8B1B;IAED,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAEvC;IAED,cAAc,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAEjD;IAEK,eAAe,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAYtD;IAEK,gBAAgB,CAAC,YAAY,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAcnE;IAED,OAAO,CAAC,eAAe;IAoEvB,OAAO,CAAC,WAAW;IA+CnB,OAAO,CAAC,sBAAsB;YAkEhB,iBAAiB;YA2HjB,sBAAsB;IAuDpC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,YAAY;CAqCrB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,mBAAmB,GAC1B,aAAa,CAEf"}