@claude-flow/mcp 3.0.0-alpha.1
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/.agentic-flow/intelligence.json +16 -0
- package/README.md +428 -0
- package/__tests__/integration.test.ts +449 -0
- package/__tests__/mcp.test.ts +641 -0
- package/dist/connection-pool.d.ts +36 -0
- package/dist/connection-pool.d.ts.map +1 -0
- package/dist/connection-pool.js +273 -0
- package/dist/connection-pool.js.map +1 -0
- package/dist/index.d.ts +75 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +85 -0
- package/dist/index.js.map +1 -0
- package/dist/oauth.d.ts +146 -0
- package/dist/oauth.d.ts.map +1 -0
- package/dist/oauth.js +318 -0
- package/dist/oauth.js.map +1 -0
- package/dist/prompt-registry.d.ts +90 -0
- package/dist/prompt-registry.d.ts.map +1 -0
- package/dist/prompt-registry.js +209 -0
- package/dist/prompt-registry.js.map +1 -0
- package/dist/rate-limiter.d.ts +86 -0
- package/dist/rate-limiter.d.ts.map +1 -0
- package/dist/rate-limiter.js +197 -0
- package/dist/rate-limiter.js.map +1 -0
- package/dist/resource-registry.d.ts +144 -0
- package/dist/resource-registry.d.ts.map +1 -0
- package/dist/resource-registry.js +405 -0
- package/dist/resource-registry.js.map +1 -0
- package/dist/sampling.d.ts +102 -0
- package/dist/sampling.d.ts.map +1 -0
- package/dist/sampling.js +268 -0
- package/dist/sampling.js.map +1 -0
- package/dist/schema-validator.d.ts +30 -0
- package/dist/schema-validator.d.ts.map +1 -0
- package/dist/schema-validator.js +182 -0
- package/dist/schema-validator.js.map +1 -0
- package/dist/server.d.ts +122 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +829 -0
- package/dist/server.js.map +1 -0
- package/dist/session-manager.d.ts +55 -0
- package/dist/session-manager.d.ts.map +1 -0
- package/dist/session-manager.js +252 -0
- package/dist/session-manager.js.map +1 -0
- package/dist/task-manager.d.ts +81 -0
- package/dist/task-manager.d.ts.map +1 -0
- package/dist/task-manager.js +337 -0
- package/dist/task-manager.js.map +1 -0
- package/dist/tool-registry.d.ts +88 -0
- package/dist/tool-registry.d.ts.map +1 -0
- package/dist/tool-registry.js +353 -0
- package/dist/tool-registry.js.map +1 -0
- package/dist/transport/http.d.ts +55 -0
- package/dist/transport/http.d.ts.map +1 -0
- package/dist/transport/http.js +446 -0
- package/dist/transport/http.js.map +1 -0
- package/dist/transport/index.d.ts +50 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +181 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/transport/stdio.d.ts +43 -0
- package/dist/transport/stdio.d.ts.map +1 -0
- package/dist/transport/stdio.js +194 -0
- package/dist/transport/stdio.js.map +1 -0
- package/dist/transport/websocket.d.ts +65 -0
- package/dist/transport/websocket.d.ts.map +1 -0
- package/dist/transport/websocket.js +314 -0
- package/dist/transport/websocket.js.map +1 -0
- package/dist/types.d.ts +473 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +40 -0
- package/dist/types.js.map +1 -0
- package/package.json +42 -0
- package/src/connection-pool.ts +344 -0
- package/src/index.ts +253 -0
- package/src/oauth.ts +447 -0
- package/src/prompt-registry.ts +296 -0
- package/src/rate-limiter.ts +266 -0
- package/src/resource-registry.ts +530 -0
- package/src/sampling.ts +363 -0
- package/src/schema-validator.ts +213 -0
- package/src/server.ts +1134 -0
- package/src/session-manager.ts +339 -0
- package/src/task-manager.ts +427 -0
- package/src/tool-registry.ts +475 -0
- package/src/transport/http.ts +532 -0
- package/src/transport/index.ts +233 -0
- package/src/transport/stdio.ts +252 -0
- package/src/transport/websocket.ts +396 -0
- package/src/types.ts +664 -0
- package/tsconfig.json +20 -0
- package/vitest.config.ts +13 -0
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @claude-flow/mcp - Resource Registry
|
|
3
|
+
*
|
|
4
|
+
* MCP 2025-11-25 compliant resource management
|
|
5
|
+
* Supports: list, read, subscribe, templates, pagination
|
|
6
|
+
*/
|
|
7
|
+
import { EventEmitter } from 'events';
|
|
8
|
+
export class ResourceRegistry extends EventEmitter {
|
|
9
|
+
logger;
|
|
10
|
+
resources = new Map();
|
|
11
|
+
templates = new Map();
|
|
12
|
+
handlers = new Map();
|
|
13
|
+
subscriptions = new Map();
|
|
14
|
+
cache = new Map();
|
|
15
|
+
subscriptionCounter = 0;
|
|
16
|
+
options;
|
|
17
|
+
constructor(logger, options = {}) {
|
|
18
|
+
super();
|
|
19
|
+
this.logger = logger;
|
|
20
|
+
this.options = {
|
|
21
|
+
enableSubscriptions: options.enableSubscriptions ?? true,
|
|
22
|
+
maxSubscriptionsPerResource: options.maxSubscriptionsPerResource ?? 100,
|
|
23
|
+
cacheEnabled: options.cacheEnabled ?? true,
|
|
24
|
+
cacheTTL: options.cacheTTL ?? 60000, // 1 minute default
|
|
25
|
+
maxCacheSize: options.maxCacheSize ?? 1000, // SECURITY: Default max 1000 entries
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Register a static resource
|
|
30
|
+
*/
|
|
31
|
+
registerResource(resource, handler) {
|
|
32
|
+
if (this.resources.has(resource.uri)) {
|
|
33
|
+
this.logger.warn('Resource already registered', { uri: resource.uri });
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
this.resources.set(resource.uri, resource);
|
|
37
|
+
this.handlers.set(resource.uri, handler);
|
|
38
|
+
this.logger.debug('Resource registered', { uri: resource.uri, name: resource.name });
|
|
39
|
+
this.emit('resource:registered', { uri: resource.uri });
|
|
40
|
+
this.emitListChanged();
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Register a resource template (dynamic URIs)
|
|
45
|
+
*/
|
|
46
|
+
registerTemplate(template, handler) {
|
|
47
|
+
if (this.templates.has(template.uriTemplate)) {
|
|
48
|
+
this.logger.warn('Template already registered', { template: template.uriTemplate });
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
this.templates.set(template.uriTemplate, template);
|
|
52
|
+
this.handlers.set(template.uriTemplate, handler);
|
|
53
|
+
this.logger.debug('Resource template registered', { template: template.uriTemplate });
|
|
54
|
+
this.emit('template:registered', { template: template.uriTemplate });
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Unregister a resource
|
|
59
|
+
*/
|
|
60
|
+
unregisterResource(uri) {
|
|
61
|
+
if (!this.resources.has(uri)) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
this.resources.delete(uri);
|
|
65
|
+
this.handlers.delete(uri);
|
|
66
|
+
this.cache.delete(uri);
|
|
67
|
+
// Cancel subscriptions for this resource
|
|
68
|
+
const subs = this.subscriptions.get(uri) || [];
|
|
69
|
+
for (const sub of subs) {
|
|
70
|
+
this.emit('subscription:cancelled', { subscriptionId: sub.id, uri });
|
|
71
|
+
}
|
|
72
|
+
this.subscriptions.delete(uri);
|
|
73
|
+
this.logger.debug('Resource unregistered', { uri });
|
|
74
|
+
this.emit('resource:unregistered', { uri });
|
|
75
|
+
this.emitListChanged();
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* List resources with pagination
|
|
80
|
+
*/
|
|
81
|
+
list(cursor, pageSize = 50) {
|
|
82
|
+
const allResources = Array.from(this.resources.values());
|
|
83
|
+
let startIndex = 0;
|
|
84
|
+
if (cursor) {
|
|
85
|
+
const decoded = this.decodeCursor(cursor);
|
|
86
|
+
startIndex = decoded.offset;
|
|
87
|
+
}
|
|
88
|
+
const endIndex = Math.min(startIndex + pageSize, allResources.length);
|
|
89
|
+
const resources = allResources.slice(startIndex, endIndex);
|
|
90
|
+
const result = { resources };
|
|
91
|
+
if (endIndex < allResources.length) {
|
|
92
|
+
result.nextCursor = this.encodeCursor({ offset: endIndex });
|
|
93
|
+
}
|
|
94
|
+
return result;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Read resource content
|
|
98
|
+
*/
|
|
99
|
+
async read(uri) {
|
|
100
|
+
// Check cache first
|
|
101
|
+
if (this.options.cacheEnabled) {
|
|
102
|
+
const cached = this.cache.get(uri);
|
|
103
|
+
if (cached && Date.now() - cached.cachedAt < cached.ttl) {
|
|
104
|
+
this.logger.debug('Resource cache hit', { uri });
|
|
105
|
+
return { contents: cached.content };
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Find handler (exact match or template match)
|
|
109
|
+
let handler = this.handlers.get(uri);
|
|
110
|
+
if (!handler) {
|
|
111
|
+
handler = this.findTemplateHandler(uri);
|
|
112
|
+
}
|
|
113
|
+
if (!handler) {
|
|
114
|
+
throw new Error(`Resource not found: ${uri}`);
|
|
115
|
+
}
|
|
116
|
+
const contents = await handler(uri);
|
|
117
|
+
// Cache the result with size limit (LRU eviction)
|
|
118
|
+
if (this.options.cacheEnabled) {
|
|
119
|
+
// SECURITY: Enforce max cache size to prevent memory exhaustion
|
|
120
|
+
if (this.cache.size >= this.options.maxCacheSize) {
|
|
121
|
+
// Remove oldest entry (first entry in Map iteration order)
|
|
122
|
+
const oldestKey = this.cache.keys().next().value;
|
|
123
|
+
if (oldestKey) {
|
|
124
|
+
this.cache.delete(oldestKey);
|
|
125
|
+
this.logger.debug('Cache evicted oldest entry', { uri: oldestKey });
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
this.cache.set(uri, {
|
|
129
|
+
content: contents,
|
|
130
|
+
cachedAt: Date.now(),
|
|
131
|
+
ttl: this.options.cacheTTL,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
this.emit('resource:read', { uri, contentCount: contents.length });
|
|
135
|
+
return { contents };
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Subscribe to resource updates
|
|
139
|
+
*/
|
|
140
|
+
subscribe(uri, callback) {
|
|
141
|
+
if (!this.options.enableSubscriptions) {
|
|
142
|
+
throw new Error('Subscriptions are disabled');
|
|
143
|
+
}
|
|
144
|
+
const existingSubs = this.subscriptions.get(uri) || [];
|
|
145
|
+
if (existingSubs.length >= this.options.maxSubscriptionsPerResource) {
|
|
146
|
+
throw new Error(`Maximum subscriptions reached for resource: ${uri}`);
|
|
147
|
+
}
|
|
148
|
+
const subscriptionId = `sub-${++this.subscriptionCounter}-${Date.now()}`;
|
|
149
|
+
const subscription = {
|
|
150
|
+
id: subscriptionId,
|
|
151
|
+
uri,
|
|
152
|
+
callback,
|
|
153
|
+
createdAt: new Date(),
|
|
154
|
+
};
|
|
155
|
+
existingSubs.push(subscription);
|
|
156
|
+
this.subscriptions.set(uri, existingSubs);
|
|
157
|
+
this.logger.debug('Subscription created', { subscriptionId, uri });
|
|
158
|
+
this.emit('subscription:created', { subscriptionId, uri });
|
|
159
|
+
return subscriptionId;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Unsubscribe from resource updates
|
|
163
|
+
*/
|
|
164
|
+
unsubscribe(subscriptionId) {
|
|
165
|
+
for (const [uri, subs] of this.subscriptions) {
|
|
166
|
+
const index = subs.findIndex((s) => s.id === subscriptionId);
|
|
167
|
+
if (index !== -1) {
|
|
168
|
+
subs.splice(index, 1);
|
|
169
|
+
if (subs.length === 0) {
|
|
170
|
+
this.subscriptions.delete(uri);
|
|
171
|
+
}
|
|
172
|
+
this.logger.debug('Subscription removed', { subscriptionId, uri });
|
|
173
|
+
this.emit('subscription:removed', { subscriptionId, uri });
|
|
174
|
+
return true;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Notify subscribers of resource update
|
|
181
|
+
*/
|
|
182
|
+
async notifyUpdate(uri) {
|
|
183
|
+
const subs = this.subscriptions.get(uri);
|
|
184
|
+
if (!subs || subs.length === 0) {
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
// Invalidate cache
|
|
188
|
+
this.cache.delete(uri);
|
|
189
|
+
// Read fresh content
|
|
190
|
+
const { contents } = await this.read(uri);
|
|
191
|
+
// Notify all subscribers
|
|
192
|
+
for (const sub of subs) {
|
|
193
|
+
try {
|
|
194
|
+
sub.callback(uri, contents);
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
this.logger.error('Subscription callback error', { subscriptionId: sub.id, error });
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
this.emit('resource:updated', { uri, subscriberCount: subs.length });
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Get resource by URI
|
|
204
|
+
*/
|
|
205
|
+
getResource(uri) {
|
|
206
|
+
return this.resources.get(uri);
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Check if resource exists
|
|
210
|
+
*/
|
|
211
|
+
hasResource(uri) {
|
|
212
|
+
return this.resources.has(uri) || this.matchesTemplate(uri);
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Get resource count
|
|
216
|
+
*/
|
|
217
|
+
getResourceCount() {
|
|
218
|
+
return this.resources.size;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Get all templates
|
|
222
|
+
*/
|
|
223
|
+
getTemplates() {
|
|
224
|
+
return Array.from(this.templates.values());
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Get subscription count for a resource
|
|
228
|
+
*/
|
|
229
|
+
getSubscriptionCount(uri) {
|
|
230
|
+
return this.subscriptions.get(uri)?.length || 0;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Get stats
|
|
234
|
+
*/
|
|
235
|
+
getStats() {
|
|
236
|
+
let totalSubscriptions = 0;
|
|
237
|
+
for (const subs of this.subscriptions.values()) {
|
|
238
|
+
totalSubscriptions += subs.length;
|
|
239
|
+
}
|
|
240
|
+
return {
|
|
241
|
+
totalResources: this.resources.size,
|
|
242
|
+
totalTemplates: this.templates.size,
|
|
243
|
+
totalSubscriptions,
|
|
244
|
+
cacheSize: this.cache.size,
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Clear cache
|
|
249
|
+
*/
|
|
250
|
+
clearCache() {
|
|
251
|
+
this.cache.clear();
|
|
252
|
+
this.logger.debug('Resource cache cleared');
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Find handler for template URI
|
|
256
|
+
*/
|
|
257
|
+
findTemplateHandler(uri) {
|
|
258
|
+
for (const [template, handler] of this.handlers) {
|
|
259
|
+
if (this.matchesTemplate(uri, template)) {
|
|
260
|
+
return handler;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
return undefined;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Escape regex metacharacters to prevent ReDoS attacks
|
|
267
|
+
* SECURITY: Critical for preventing regex denial of service
|
|
268
|
+
*/
|
|
269
|
+
escapeRegex(str) {
|
|
270
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Check if URI matches any template
|
|
274
|
+
* SECURITY: Uses escaped regex to prevent ReDoS
|
|
275
|
+
*/
|
|
276
|
+
matchesTemplate(uri, template) {
|
|
277
|
+
if (template) {
|
|
278
|
+
// SECURITY: Escape regex metacharacters before converting template
|
|
279
|
+
// First extract placeholders, escape the rest, then add placeholder pattern
|
|
280
|
+
const escaped = this.escapeRegex(template);
|
|
281
|
+
// Replace escaped placeholder braces with the pattern
|
|
282
|
+
const pattern = escaped.replace(/\\\{[^}]+\\\}/g, '[^/]+');
|
|
283
|
+
try {
|
|
284
|
+
const regex = new RegExp('^' + pattern + '$');
|
|
285
|
+
return regex.test(uri);
|
|
286
|
+
}
|
|
287
|
+
catch {
|
|
288
|
+
// Invalid regex pattern - return false safely
|
|
289
|
+
return false;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
for (const t of this.templates.keys()) {
|
|
293
|
+
const escaped = this.escapeRegex(t);
|
|
294
|
+
const pattern = escaped.replace(/\\\{[^}]+\\\}/g, '[^/]+');
|
|
295
|
+
try {
|
|
296
|
+
const regex = new RegExp('^' + pattern + '$');
|
|
297
|
+
if (regex.test(uri)) {
|
|
298
|
+
return true;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
catch {
|
|
302
|
+
// Skip invalid patterns
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
return false;
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Encode cursor for pagination
|
|
310
|
+
*/
|
|
311
|
+
encodeCursor(data) {
|
|
312
|
+
return Buffer.from(JSON.stringify(data)).toString('base64');
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Decode cursor for pagination
|
|
316
|
+
*/
|
|
317
|
+
decodeCursor(cursor) {
|
|
318
|
+
try {
|
|
319
|
+
return JSON.parse(Buffer.from(cursor, 'base64').toString('utf-8'));
|
|
320
|
+
}
|
|
321
|
+
catch {
|
|
322
|
+
return { offset: 0 };
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Emit listChanged notification
|
|
327
|
+
*/
|
|
328
|
+
emitListChanged() {
|
|
329
|
+
this.emit('resources:listChanged');
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
export function createResourceRegistry(logger, options) {
|
|
333
|
+
return new ResourceRegistry(logger, options);
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Helper to create a static text resource
|
|
337
|
+
*/
|
|
338
|
+
export function createTextResource(uri, name, text, options) {
|
|
339
|
+
const resource = {
|
|
340
|
+
uri,
|
|
341
|
+
name,
|
|
342
|
+
description: options?.description,
|
|
343
|
+
mimeType: options?.mimeType || 'text/plain',
|
|
344
|
+
annotations: options?.annotations,
|
|
345
|
+
};
|
|
346
|
+
const handler = async () => [
|
|
347
|
+
{
|
|
348
|
+
uri,
|
|
349
|
+
mimeType: options?.mimeType || 'text/plain',
|
|
350
|
+
text,
|
|
351
|
+
},
|
|
352
|
+
];
|
|
353
|
+
return { resource, handler };
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Helper to create a file resource
|
|
357
|
+
* SECURITY: Validates path to prevent path traversal attacks
|
|
358
|
+
*/
|
|
359
|
+
export function createFileResource(uri, name, filePath, options) {
|
|
360
|
+
const resource = {
|
|
361
|
+
uri,
|
|
362
|
+
name,
|
|
363
|
+
description: options?.description,
|
|
364
|
+
mimeType: options?.mimeType || 'application/octet-stream',
|
|
365
|
+
};
|
|
366
|
+
const handler = async () => {
|
|
367
|
+
const fs = await import('fs/promises');
|
|
368
|
+
const path = await import('path');
|
|
369
|
+
// SECURITY: Normalize and validate the path
|
|
370
|
+
const normalizedPath = path.normalize(filePath);
|
|
371
|
+
// Prevent path traversal
|
|
372
|
+
if (normalizedPath.includes('..') || normalizedPath.includes('\0')) {
|
|
373
|
+
throw new Error('Invalid file path: path traversal detected');
|
|
374
|
+
}
|
|
375
|
+
// Prevent access to sensitive system paths
|
|
376
|
+
const blockedPaths = ['/etc/', '/proc/', '/sys/', '/dev/', '/root/', '/var/log/'];
|
|
377
|
+
const lowerPath = normalizedPath.toLowerCase();
|
|
378
|
+
for (const blocked of blockedPaths) {
|
|
379
|
+
if (lowerPath.startsWith(blocked) || lowerPath.includes('/.')) {
|
|
380
|
+
throw new Error('Access to system paths is not allowed');
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
// If allowedBasePaths specified, validate against them
|
|
384
|
+
if (options?.allowedBasePaths && options.allowedBasePaths.length > 0) {
|
|
385
|
+
const resolvedPath = path.resolve(normalizedPath);
|
|
386
|
+
const isAllowed = options.allowedBasePaths.some((basePath) => {
|
|
387
|
+
const resolvedBase = path.resolve(basePath);
|
|
388
|
+
return resolvedPath.startsWith(resolvedBase);
|
|
389
|
+
});
|
|
390
|
+
if (!isAllowed) {
|
|
391
|
+
throw new Error('File path is outside allowed directories');
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
const content = await fs.readFile(normalizedPath);
|
|
395
|
+
return [
|
|
396
|
+
{
|
|
397
|
+
uri,
|
|
398
|
+
mimeType: options?.mimeType || 'application/octet-stream',
|
|
399
|
+
blob: content.toString('base64'),
|
|
400
|
+
},
|
|
401
|
+
];
|
|
402
|
+
};
|
|
403
|
+
return { resource, handler };
|
|
404
|
+
}
|
|
405
|
+
//# sourceMappingURL=resource-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-registry.js","sourceRoot":"","sources":["../src/resource-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @claude-flow/mcp - Sampling (Server-Initiated LLM)
|
|
3
|
+
*
|
|
4
|
+
* MCP 2025-11-25 compliant sampling for server-initiated LLM calls
|
|
5
|
+
*/
|
|
6
|
+
import { EventEmitter } from 'events';
|
|
7
|
+
import type { ModelPreferences, CreateMessageRequest, CreateMessageResult, ILogger } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* External LLM provider interface
|
|
10
|
+
*/
|
|
11
|
+
export interface LLMProvider {
|
|
12
|
+
name: string;
|
|
13
|
+
createMessage(request: CreateMessageRequest): Promise<CreateMessageResult>;
|
|
14
|
+
isAvailable(): Promise<boolean>;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Sampling configuration
|
|
18
|
+
*/
|
|
19
|
+
export interface SamplingConfig {
|
|
20
|
+
/** Default model preferences */
|
|
21
|
+
defaultModelPreferences?: ModelPreferences;
|
|
22
|
+
/** Maximum tokens for any request */
|
|
23
|
+
maxTokensLimit?: number;
|
|
24
|
+
/** Default temperature */
|
|
25
|
+
defaultTemperature?: number;
|
|
26
|
+
/** Timeout for LLM calls (ms) */
|
|
27
|
+
timeout?: number;
|
|
28
|
+
/** Enable request logging */
|
|
29
|
+
enableLogging?: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Sampling request context
|
|
33
|
+
*/
|
|
34
|
+
export interface SamplingContext {
|
|
35
|
+
sessionId: string;
|
|
36
|
+
serverId?: string;
|
|
37
|
+
metadata?: Record<string, unknown>;
|
|
38
|
+
}
|
|
39
|
+
export declare class SamplingManager extends EventEmitter {
|
|
40
|
+
private readonly logger;
|
|
41
|
+
private readonly config;
|
|
42
|
+
private providers;
|
|
43
|
+
private defaultProvider?;
|
|
44
|
+
private requestCount;
|
|
45
|
+
private totalTokens;
|
|
46
|
+
constructor(logger: ILogger, config?: Partial<SamplingConfig>);
|
|
47
|
+
/**
|
|
48
|
+
* Register an LLM provider
|
|
49
|
+
*/
|
|
50
|
+
registerProvider(provider: LLMProvider, isDefault?: boolean): void;
|
|
51
|
+
/**
|
|
52
|
+
* Unregister a provider
|
|
53
|
+
*/
|
|
54
|
+
unregisterProvider(name: string): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Create a message (sampling/createMessage)
|
|
57
|
+
*/
|
|
58
|
+
createMessage(request: CreateMessageRequest, context?: SamplingContext): Promise<CreateMessageResult>;
|
|
59
|
+
/**
|
|
60
|
+
* Check if sampling is available
|
|
61
|
+
*/
|
|
62
|
+
isAvailable(): Promise<boolean>;
|
|
63
|
+
/**
|
|
64
|
+
* Get available providers
|
|
65
|
+
*/
|
|
66
|
+
getProviders(): string[];
|
|
67
|
+
/**
|
|
68
|
+
* Get stats
|
|
69
|
+
*/
|
|
70
|
+
getStats(): {
|
|
71
|
+
requestCount: number;
|
|
72
|
+
totalTokens: number;
|
|
73
|
+
providerCount: number;
|
|
74
|
+
defaultProvider?: string;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Validate sampling request
|
|
78
|
+
*/
|
|
79
|
+
private validateRequest;
|
|
80
|
+
/**
|
|
81
|
+
* Select provider based on preferences
|
|
82
|
+
*/
|
|
83
|
+
private selectProvider;
|
|
84
|
+
/**
|
|
85
|
+
* Apply default values to request
|
|
86
|
+
*/
|
|
87
|
+
private applyDefaults;
|
|
88
|
+
/**
|
|
89
|
+
* Call with timeout
|
|
90
|
+
*/
|
|
91
|
+
private callWithTimeout;
|
|
92
|
+
}
|
|
93
|
+
export declare function createSamplingManager(logger: ILogger, config?: Partial<SamplingConfig>): SamplingManager;
|
|
94
|
+
/**
|
|
95
|
+
* Create a mock LLM provider for testing
|
|
96
|
+
*/
|
|
97
|
+
export declare function createMockProvider(name?: string): LLMProvider;
|
|
98
|
+
/**
|
|
99
|
+
* Create an Anthropic provider (requires API key)
|
|
100
|
+
*/
|
|
101
|
+
export declare function createAnthropicProvider(apiKey: string): LLMProvider;
|
|
102
|
+
//# sourceMappingURL=sampling.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sampling.d.ts","sourceRoot":"","sources":["../src/sampling.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAEV,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EAEnB,OAAO,EACR,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC3E,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,gCAAgC;IAChC,uBAAuB,CAAC,EAAE,gBAAgB,CAAC;IAC3C,qCAAqC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0BAA0B;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAcD,qBAAa,eAAgB,SAAQ,YAAY;IAQ7C,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;IAClD,OAAO,CAAC,SAAS,CAAuC;IACxD,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,WAAW,CAAK;gBAGL,MAAM,EAAE,OAAO,EAChC,MAAM,GAAE,OAAO,CAAC,cAAc,CAAM;IAMtC;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,GAAE,OAAe,GAAG,IAAI;IASzE;;OAEG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAQzC;;OAEG;IACG,aAAa,CACjB,OAAO,EAAE,oBAAoB,EAC7B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,mBAAmB,CAAC;IAwE/B;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAcrC;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;IAIxB;;OAEG;IACH,QAAQ,IAAI;QACV,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B;IASD;;OAEG;IACH,OAAO,CAAC,eAAe;IAcvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAmBtB;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;YACW,eAAe;CAQ9B;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,OAAO,EACf,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAC/B,eAAe,CAEjB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,MAAe,GAAG,WAAW,CAqBrE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CA2CnE"}
|