mcp-orbit 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +247 -0
- package/dist/__tests__/helpers/test-server.d.ts +2 -0
- package/dist/__tests__/helpers/test-server.d.ts.map +1 -0
- package/dist/__tests__/helpers/test-server.js +27 -0
- package/dist/__tests__/helpers/test-server.js.map +1 -0
- package/dist/cli.d.ts +23 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +56 -0
- package/dist/cli.js.map +1 -0
- package/dist/clients/mcp-http.d.ts +36 -0
- package/dist/clients/mcp-http.d.ts.map +1 -0
- package/dist/clients/mcp-http.js +148 -0
- package/dist/clients/mcp-http.js.map +1 -0
- package/dist/clients/mcp-stdio.d.ts +38 -0
- package/dist/clients/mcp-stdio.d.ts.map +1 -0
- package/dist/clients/mcp-stdio.js +164 -0
- package/dist/clients/mcp-stdio.js.map +1 -0
- package/dist/clients/types.d.ts +104 -0
- package/dist/clients/types.d.ts.map +1 -0
- package/dist/clients/types.js +8 -0
- package/dist/clients/types.js.map +1 -0
- package/dist/core/prompt-registry.d.ts +56 -0
- package/dist/core/prompt-registry.d.ts.map +1 -0
- package/dist/core/prompt-registry.js +100 -0
- package/dist/core/prompt-registry.js.map +1 -0
- package/dist/core/resource-registry.d.ts +79 -0
- package/dist/core/resource-registry.d.ts.map +1 -0
- package/dist/core/resource-registry.js +135 -0
- package/dist/core/resource-registry.js.map +1 -0
- package/dist/core/resource-uri-templates.d.ts +64 -0
- package/dist/core/resource-uri-templates.d.ts.map +1 -0
- package/dist/core/resource-uri-templates.js +168 -0
- package/dist/core/resource-uri-templates.js.map +1 -0
- package/dist/core/server-http.d.ts +15 -0
- package/dist/core/server-http.d.ts.map +1 -0
- package/dist/core/server-http.js +302 -0
- package/dist/core/server-http.js.map +1 -0
- package/dist/core/server-stdio.d.ts +8 -0
- package/dist/core/server-stdio.d.ts.map +1 -0
- package/dist/core/server-stdio.js +15 -0
- package/dist/core/server-stdio.js.map +1 -0
- package/dist/core/server.d.ts +29 -0
- package/dist/core/server.d.ts.map +1 -0
- package/dist/core/server.js +265 -0
- package/dist/core/server.js.map +1 -0
- package/dist/core/types.d.ts +265 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +9 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/dynamic-resource-manager.d.ts +115 -0
- package/dist/utils/dynamic-resource-manager.d.ts.map +1 -0
- package/dist/utils/dynamic-resource-manager.js +460 -0
- package/dist/utils/dynamic-resource-manager.js.map +1 -0
- package/dist/utils/http-client.d.ts +29 -0
- package/dist/utils/http-client.d.ts.map +1 -0
- package/dist/utils/http-client.js +59 -0
- package/dist/utils/http-client.js.map +1 -0
- package/dist/utils/logger.d.ts +25 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +105 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/zod-to-mcp-schema.d.ts +42 -0
- package/dist/utils/zod-to-mcp-schema.d.ts.map +1 -0
- package/dist/utils/zod-to-mcp-schema.js +87 -0
- package/dist/utils/zod-to-mcp-schema.js.map +1 -0
- package/package.json +57 -0
- package/src/__tests__/helpers/test-server.ts +31 -0
- package/src/__tests__/plugin-system.basic.test.ts +137 -0
- package/src/__tests__/server.basic.test.ts +37 -0
- package/src/__tests__/stdio-roundtrip.basic.test.ts +67 -0
- package/src/__tests__/tool-registry.basic.test.ts +114 -0
- package/src/__tests__/zod-schema.basic.test.ts +105 -0
- package/src/cli.ts +58 -0
- package/src/clients/mcp-http.ts +192 -0
- package/src/clients/mcp-stdio.ts +209 -0
- package/src/clients/types.ts +136 -0
- package/src/core/prompt-registry.ts +114 -0
- package/src/core/resource-registry.ts +166 -0
- package/src/core/resource-uri-templates.ts +216 -0
- package/src/core/server-http.ts +407 -0
- package/src/core/server-stdio.ts +20 -0
- package/src/core/server.ts +320 -0
- package/src/core/types.ts +312 -0
- package/src/index.ts +92 -0
- package/src/utils/dynamic-resource-manager.ts +581 -0
- package/src/utils/http-client.ts +86 -0
- package/src/utils/logger.ts +138 -0
- package/src/utils/zod-to-mcp-schema.ts +127 -0
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dynamic Resource Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages automatic resource creation for large tool results.
|
|
5
|
+
* Key features:
|
|
6
|
+
* - Auto-detection of large responses
|
|
7
|
+
* - Dynamic resource registration
|
|
8
|
+
* - Persistent storage with TTL
|
|
9
|
+
* - Schema generation for safe querying
|
|
10
|
+
*/
|
|
11
|
+
import { promises as fs } from "node:fs";
|
|
12
|
+
import path from "node:path";
|
|
13
|
+
import { resourceRegistry } from "../core/resource-registry.js";
|
|
14
|
+
import { getTool } from "../core/server.js";
|
|
15
|
+
import logger from "./logger.js";
|
|
16
|
+
const resourceLogger = logger.child("resource-manager");
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// DYNAMIC RESOURCE MANAGER
|
|
19
|
+
// ============================================================================
|
|
20
|
+
export class DynamicResourceManager {
|
|
21
|
+
dataDir = path.join(process.cwd(), "data", "resources");
|
|
22
|
+
metadata = new Map();
|
|
23
|
+
defaultTTL = 72 * 60 * 60 * 1000; // 72 hours
|
|
24
|
+
largeDataThreshold = 5000; // 5KB
|
|
25
|
+
maxSchemaDepth = 4;
|
|
26
|
+
maxSchemaProperties = 32;
|
|
27
|
+
cacheDisabledLogged = false;
|
|
28
|
+
allowedStoredMetaKeys = new Set([
|
|
29
|
+
"uri",
|
|
30
|
+
"toolName",
|
|
31
|
+
"source",
|
|
32
|
+
"timestamp",
|
|
33
|
+
"size",
|
|
34
|
+
"expiresAt",
|
|
35
|
+
"schema",
|
|
36
|
+
"itemCount",
|
|
37
|
+
]);
|
|
38
|
+
constructor() {
|
|
39
|
+
this.initialize();
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Initialize resource manager
|
|
43
|
+
*/
|
|
44
|
+
async initialize() {
|
|
45
|
+
try {
|
|
46
|
+
await fs.mkdir(this.dataDir, { recursive: true });
|
|
47
|
+
await this.loadResourcesFromDisk();
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
resourceLogger.error("Initialization failed:", error);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Load resources from disk (scan directory and read metadata from files)
|
|
55
|
+
*/
|
|
56
|
+
async loadResourcesFromDisk() {
|
|
57
|
+
try {
|
|
58
|
+
const files = await fs.readdir(this.dataDir);
|
|
59
|
+
for (const file of files) {
|
|
60
|
+
if (!file.endsWith(".json"))
|
|
61
|
+
continue;
|
|
62
|
+
const filePath = path.join(this.dataDir, file);
|
|
63
|
+
const resourceId = path.basename(file, ".json");
|
|
64
|
+
try {
|
|
65
|
+
const fileContent = await fs.readFile(filePath, "utf-8");
|
|
66
|
+
const parsed = JSON.parse(fileContent);
|
|
67
|
+
const data = parsed.data;
|
|
68
|
+
const rawMeta = parsed._meta ?? {};
|
|
69
|
+
const storedMeta = this.normalizeStoredMetadata(rawMeta, data, resourceId);
|
|
70
|
+
const metadata = this.buildRuntimeMetadata(storedMeta, filePath, data);
|
|
71
|
+
this.metadata.set(metadata.uri, metadata);
|
|
72
|
+
this.registerResource(metadata.uri, metadata, filePath);
|
|
73
|
+
const sanitizedMeta = this.toStoredMetadata(metadata);
|
|
74
|
+
const hasDeprecatedKeys = Object.keys(rawMeta ?? {}).some((key) => !this.allowedStoredMetaKeys.has(key));
|
|
75
|
+
const metaMismatch = JSON.stringify(rawMeta ?? {}) !== JSON.stringify(sanitizedMeta);
|
|
76
|
+
if (hasDeprecatedKeys || metaMismatch) {
|
|
77
|
+
await fs.writeFile(filePath, JSON.stringify({ _meta: sanitizedMeta, data }, null, 2), "utf-8");
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
resourceLogger.error(`Failed to load resource ${file}:`, error);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (this.metadata.size > 0) {
|
|
85
|
+
resourceLogger.info(`Loaded ${this.metadata.size} resources from disk`);
|
|
86
|
+
}
|
|
87
|
+
this.cleanupExpiredResources();
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
if (error.code !== "ENOENT") {
|
|
91
|
+
resourceLogger.error("Failed to load resources from disk:", error);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
normalizeStoredMetadata(rawMeta, data, resourceId) {
|
|
96
|
+
const toolName = this.resolveToolName(rawMeta?.toolName, resourceId);
|
|
97
|
+
const source = typeof rawMeta?.source === "string" ? rawMeta.source : undefined;
|
|
98
|
+
const timestamp = typeof rawMeta?.timestamp === "number" ? rawMeta.timestamp : Date.now();
|
|
99
|
+
const uri = typeof rawMeta?.uri === "string" ? rawMeta.uri : `cache://tools/${toolName}-${timestamp}`;
|
|
100
|
+
const size = typeof rawMeta?.size === "number" ? rawMeta.size : data !== undefined ? JSON.stringify(data).length : 0;
|
|
101
|
+
const expiresAt = typeof rawMeta?.expiresAt === "number" ? rawMeta.expiresAt : timestamp + this.defaultTTL;
|
|
102
|
+
const schema = rawMeta?.schema && typeof rawMeta.schema === "object" ? rawMeta.schema : undefined;
|
|
103
|
+
const itemCount = typeof rawMeta?.itemCount === "number" ? rawMeta.itemCount : Array.isArray(data) ? data.length : undefined;
|
|
104
|
+
return {
|
|
105
|
+
uri,
|
|
106
|
+
toolName,
|
|
107
|
+
source,
|
|
108
|
+
timestamp,
|
|
109
|
+
size,
|
|
110
|
+
expiresAt,
|
|
111
|
+
schema,
|
|
112
|
+
itemCount,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
buildRuntimeMetadata(storedMeta, filePath, data) {
|
|
116
|
+
const schema = storedMeta.schema ?? this.generateSchema(data);
|
|
117
|
+
const itemCount = storedMeta.itemCount ?? (Array.isArray(data) ? data.length : undefined);
|
|
118
|
+
return {
|
|
119
|
+
...storedMeta,
|
|
120
|
+
schema,
|
|
121
|
+
itemCount,
|
|
122
|
+
filePath,
|
|
123
|
+
title: this.buildTitle(storedMeta.toolName),
|
|
124
|
+
annotations: this.createAnnotations(storedMeta.timestamp),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
toStoredMetadata(metadata) {
|
|
128
|
+
return {
|
|
129
|
+
uri: metadata.uri,
|
|
130
|
+
toolName: metadata.toolName,
|
|
131
|
+
source: metadata.source,
|
|
132
|
+
timestamp: metadata.timestamp,
|
|
133
|
+
size: metadata.size,
|
|
134
|
+
expiresAt: metadata.expiresAt,
|
|
135
|
+
schema: metadata.schema,
|
|
136
|
+
itemCount: metadata.itemCount,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
resolveToolName(toolNameCandidate, resourceId) {
|
|
140
|
+
if (typeof toolNameCandidate === "string" && toolNameCandidate.length > 0) {
|
|
141
|
+
return toolNameCandidate;
|
|
142
|
+
}
|
|
143
|
+
const segments = resourceId.split("-");
|
|
144
|
+
if (segments.length <= 1) {
|
|
145
|
+
return resourceId || "unknown-tool";
|
|
146
|
+
}
|
|
147
|
+
segments.pop(); // remove timestamp segment
|
|
148
|
+
const name = segments.join("-");
|
|
149
|
+
return name.length > 0 ? name : "unknown-tool";
|
|
150
|
+
}
|
|
151
|
+
buildTitle(toolName) {
|
|
152
|
+
return `Cached dataset from ${toolName}`;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Store tool result as MCP resource if it's large
|
|
156
|
+
* Returns resource URI if stored, undefined if result is small
|
|
157
|
+
*/
|
|
158
|
+
async storeIfLarge(toolName, result, options = {}) {
|
|
159
|
+
if (this.isCacheDisabled()) {
|
|
160
|
+
if (!this.cacheDisabledLogged) {
|
|
161
|
+
resourceLogger.warn("Caching disabled via MCP_DISABLE_CACHE");
|
|
162
|
+
this.cacheDisabledLogged = true;
|
|
163
|
+
}
|
|
164
|
+
return undefined;
|
|
165
|
+
}
|
|
166
|
+
const resultSize = JSON.stringify(result).length;
|
|
167
|
+
if (resultSize < this.largeDataThreshold) {
|
|
168
|
+
return undefined;
|
|
169
|
+
}
|
|
170
|
+
return await this.store(toolName, result, options);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Store tool result as MCP resource (regardless of size)
|
|
174
|
+
*/
|
|
175
|
+
async store(toolName, result, options = {}) {
|
|
176
|
+
const { ttl = this.defaultTTL, namespace = "cache" } = options;
|
|
177
|
+
const timestamp = Date.now();
|
|
178
|
+
const resourceId = `${toolName}-${timestamp}`;
|
|
179
|
+
const uri = `${namespace}://tools/${resourceId}`;
|
|
180
|
+
const filePath = path.join(this.dataDir, `${resourceId}.json`);
|
|
181
|
+
const schema = this.resolveSchema(result, options);
|
|
182
|
+
const itemCount = Array.isArray(result) ? result.length : undefined;
|
|
183
|
+
const annotations = this.createAnnotations(timestamp);
|
|
184
|
+
const metadata = {
|
|
185
|
+
uri,
|
|
186
|
+
toolName,
|
|
187
|
+
source: options.source,
|
|
188
|
+
timestamp,
|
|
189
|
+
size: JSON.stringify(result).length,
|
|
190
|
+
filePath,
|
|
191
|
+
expiresAt: timestamp + ttl,
|
|
192
|
+
schema,
|
|
193
|
+
itemCount,
|
|
194
|
+
title: this.buildTitle(toolName),
|
|
195
|
+
annotations,
|
|
196
|
+
};
|
|
197
|
+
this.metadata.set(uri, metadata);
|
|
198
|
+
const fileContent = {
|
|
199
|
+
_meta: this.toStoredMetadata(metadata),
|
|
200
|
+
data: result,
|
|
201
|
+
};
|
|
202
|
+
await fs.writeFile(filePath, JSON.stringify(fileContent, null, 2), "utf-8");
|
|
203
|
+
this.registerResource(uri, metadata, filePath);
|
|
204
|
+
resourceLogger.info(`Stored ${metadata.size} bytes at ${uri} (expires in ${ttl / 1000}s)`);
|
|
205
|
+
return uri;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Register resource with MCP resource registry
|
|
209
|
+
*/
|
|
210
|
+
registerResource(uri, metadata, filePath) {
|
|
211
|
+
const title = metadata.title ?? `Cached result from ${metadata.toolName}`;
|
|
212
|
+
resourceRegistry.register({
|
|
213
|
+
uri,
|
|
214
|
+
name: `Tool result: ${metadata.toolName}`,
|
|
215
|
+
title,
|
|
216
|
+
description: this.describeSchema(metadata),
|
|
217
|
+
mimeType: "application/json",
|
|
218
|
+
size: metadata.size,
|
|
219
|
+
schema: metadata.schema,
|
|
220
|
+
annotations: metadata.annotations,
|
|
221
|
+
async read() {
|
|
222
|
+
const file = await fs.readFile(metadata.filePath ?? filePath, "utf-8");
|
|
223
|
+
const parsed = JSON.parse(file);
|
|
224
|
+
return {
|
|
225
|
+
text: JSON.stringify(parsed.data, null, 2),
|
|
226
|
+
};
|
|
227
|
+
},
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Generate schema description for logs / chat messages
|
|
232
|
+
*/
|
|
233
|
+
describeSchema(metadata) {
|
|
234
|
+
const schemaText = this.describeSchemaNode(metadata.schema);
|
|
235
|
+
if (metadata.itemCount !== undefined) {
|
|
236
|
+
return `${schemaText} (${metadata.itemCount} items, ${this.formatBytes(metadata.size)})`;
|
|
237
|
+
}
|
|
238
|
+
return `${schemaText} (${this.formatBytes(metadata.size)})`;
|
|
239
|
+
}
|
|
240
|
+
describeSchemaNode(schema, depth = 0) {
|
|
241
|
+
if (!schema) {
|
|
242
|
+
return "unknown structure";
|
|
243
|
+
}
|
|
244
|
+
const type = Array.isArray(schema.type) ? schema.type.join("|") : schema.type;
|
|
245
|
+
if (type === "array" && schema.items) {
|
|
246
|
+
return `array of ${this.describeSchemaNode(schema.items, depth + 1)}`;
|
|
247
|
+
}
|
|
248
|
+
if (type === "object" && schema.properties) {
|
|
249
|
+
const keys = Object.keys(schema.properties).slice(0, 5);
|
|
250
|
+
if (keys.length > 0) {
|
|
251
|
+
return depth === 0 ? `object (keys: ${keys.join(", ")})` : `object (${keys.join(", ")})`;
|
|
252
|
+
}
|
|
253
|
+
return "object";
|
|
254
|
+
}
|
|
255
|
+
return type ?? "unknown";
|
|
256
|
+
}
|
|
257
|
+
createAnnotations(timestamp) {
|
|
258
|
+
return {
|
|
259
|
+
audience: ["assistant"],
|
|
260
|
+
priority: 0.5,
|
|
261
|
+
lastModified: new Date(timestamp).toISOString(),
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
pickSample(items) {
|
|
265
|
+
for (const item of items) {
|
|
266
|
+
if (item !== undefined && item !== null) {
|
|
267
|
+
return item;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return undefined;
|
|
271
|
+
}
|
|
272
|
+
generateSchema(data, depth = 0) {
|
|
273
|
+
if (depth >= this.maxSchemaDepth) {
|
|
274
|
+
return { type: "unknown" };
|
|
275
|
+
}
|
|
276
|
+
if (data === null || data === undefined) {
|
|
277
|
+
return { type: "null" };
|
|
278
|
+
}
|
|
279
|
+
if (Array.isArray(data)) {
|
|
280
|
+
const sample = this.pickSample(data);
|
|
281
|
+
if (sample === undefined) {
|
|
282
|
+
return { type: "array" };
|
|
283
|
+
}
|
|
284
|
+
return { type: "array", items: this.generateSchema(sample, depth + 1) };
|
|
285
|
+
}
|
|
286
|
+
const valueType = typeof data;
|
|
287
|
+
if (valueType !== "object") {
|
|
288
|
+
return { type: valueType };
|
|
289
|
+
}
|
|
290
|
+
// Objects: capture up to maxSchemaProperties keys for better schema details
|
|
291
|
+
const entries = Object.entries(data);
|
|
292
|
+
if (entries.length === 0) {
|
|
293
|
+
return { type: "object" };
|
|
294
|
+
}
|
|
295
|
+
const properties = {};
|
|
296
|
+
for (const [key, value] of entries.slice(0, this.maxSchemaProperties)) {
|
|
297
|
+
properties[key] = this.generateSchema(value, depth + 1);
|
|
298
|
+
}
|
|
299
|
+
const schema = {
|
|
300
|
+
type: "object",
|
|
301
|
+
properties,
|
|
302
|
+
};
|
|
303
|
+
if (entries.length > this.maxSchemaProperties) {
|
|
304
|
+
const remainingSample = this.pickSample(entries.slice(this.maxSchemaProperties).map(([, value]) => value));
|
|
305
|
+
if (remainingSample !== undefined) {
|
|
306
|
+
schema.additionalProperties = this.generateSchema(remainingSample, depth + 1);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
return schema;
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Get metadata for a resource
|
|
313
|
+
*/
|
|
314
|
+
getMetadata(uri) {
|
|
315
|
+
return this.metadata.get(uri);
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Get sanitized metadata for clients (no internal paths)
|
|
319
|
+
*/
|
|
320
|
+
getPublicMetadata(uri) {
|
|
321
|
+
const metadata = this.metadata.get(uri);
|
|
322
|
+
if (!metadata) {
|
|
323
|
+
return undefined;
|
|
324
|
+
}
|
|
325
|
+
return this.toStoredMetadata(metadata);
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* List all active resources
|
|
329
|
+
*/
|
|
330
|
+
listResources() {
|
|
331
|
+
this.cleanupExpiredResources();
|
|
332
|
+
return Array.from(this.metadata.values())
|
|
333
|
+
.filter((m) => m.expiresAt > Date.now())
|
|
334
|
+
.sort((a, b) => b.timestamp - a.timestamp);
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Generate chat-friendly message about stored resource
|
|
338
|
+
*/
|
|
339
|
+
getChatMessage(uri) {
|
|
340
|
+
const metadata = this.metadata.get(uri);
|
|
341
|
+
if (!metadata) {
|
|
342
|
+
return [`resourceUri: "${uri}"`, "size: unknown", "data_schema: type: unknown, properties: none"].join("\n");
|
|
343
|
+
}
|
|
344
|
+
const resourceUriLine = `resourceUri: "${uri}"`;
|
|
345
|
+
const sizeLine = `size: ${this.formatBytes(metadata.size)}`;
|
|
346
|
+
const dataSchemaLine = this.buildDataSchemaLine(metadata.schema);
|
|
347
|
+
return [resourceUriLine, sizeLine, dataSchemaLine].join("\n");
|
|
348
|
+
}
|
|
349
|
+
formatBytes(bytes) {
|
|
350
|
+
if (bytes < 1024)
|
|
351
|
+
return `${bytes} B`;
|
|
352
|
+
if (bytes < 1024 * 1024)
|
|
353
|
+
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
354
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
355
|
+
}
|
|
356
|
+
buildDataSchemaLine(schema) {
|
|
357
|
+
const type = this.describeSchemaType(schema);
|
|
358
|
+
const properties = this.extractSchemaPropertyNames(schema);
|
|
359
|
+
const propertiesText = properties.length > 0 ? properties.join(", ") : "none";
|
|
360
|
+
return `data_schema: type: ${type}, properties: ${propertiesText}`;
|
|
361
|
+
}
|
|
362
|
+
describeSchemaType(schema) {
|
|
363
|
+
if (!schema) {
|
|
364
|
+
return "unknown";
|
|
365
|
+
}
|
|
366
|
+
const types = this.normalizeSchemaTypes(schema.type);
|
|
367
|
+
if (types.includes("array")) {
|
|
368
|
+
const itemType = this.describeSchemaType(schema.items);
|
|
369
|
+
return itemType === "unknown" ? "array" : `array<${itemType}>`;
|
|
370
|
+
}
|
|
371
|
+
if (types.includes("object")) {
|
|
372
|
+
return "object";
|
|
373
|
+
}
|
|
374
|
+
return types[0] ?? "unknown";
|
|
375
|
+
}
|
|
376
|
+
extractSchemaPropertyNames(schema) {
|
|
377
|
+
if (!schema) {
|
|
378
|
+
return [];
|
|
379
|
+
}
|
|
380
|
+
const types = this.normalizeSchemaTypes(schema.type);
|
|
381
|
+
if (types.includes("array")) {
|
|
382
|
+
const fromItems = this.extractSchemaPropertyNames(schema.items);
|
|
383
|
+
if (fromItems.length > 0) {
|
|
384
|
+
return fromItems;
|
|
385
|
+
}
|
|
386
|
+
return ["items"];
|
|
387
|
+
}
|
|
388
|
+
if (types.includes("object")) {
|
|
389
|
+
if (schema.properties) {
|
|
390
|
+
return Object.keys(schema.properties).slice(0, this.maxSchemaProperties);
|
|
391
|
+
}
|
|
392
|
+
if (schema.additionalProperties) {
|
|
393
|
+
return this.extractSchemaPropertyNames(schema.additionalProperties);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
return [];
|
|
397
|
+
}
|
|
398
|
+
normalizeSchemaTypes(type) {
|
|
399
|
+
if (!type) {
|
|
400
|
+
return [];
|
|
401
|
+
}
|
|
402
|
+
return Array.isArray(type) ? type : [type];
|
|
403
|
+
}
|
|
404
|
+
resolveSchema(result, options) {
|
|
405
|
+
const provided = this.sanitizeSchema(options.schema);
|
|
406
|
+
if (provided) {
|
|
407
|
+
return provided;
|
|
408
|
+
}
|
|
409
|
+
const fromTool = this.getToolOutputSchema(options.toolDefinitionName);
|
|
410
|
+
if (fromTool) {
|
|
411
|
+
return fromTool;
|
|
412
|
+
}
|
|
413
|
+
return this.generateSchema(result);
|
|
414
|
+
}
|
|
415
|
+
sanitizeSchema(schema) {
|
|
416
|
+
if (!schema || typeof schema !== "object") {
|
|
417
|
+
return undefined;
|
|
418
|
+
}
|
|
419
|
+
try {
|
|
420
|
+
return JSON.parse(JSON.stringify(schema));
|
|
421
|
+
}
|
|
422
|
+
catch {
|
|
423
|
+
return undefined;
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
getToolOutputSchema(toolDefinitionName) {
|
|
427
|
+
if (!toolDefinitionName) {
|
|
428
|
+
return undefined;
|
|
429
|
+
}
|
|
430
|
+
const tool = getTool(toolDefinitionName);
|
|
431
|
+
if (!tool?.definition?.outputSchema) {
|
|
432
|
+
return undefined;
|
|
433
|
+
}
|
|
434
|
+
return this.sanitizeSchema(tool.definition.outputSchema);
|
|
435
|
+
}
|
|
436
|
+
cleanupExpiredResources() {
|
|
437
|
+
const now = Date.now();
|
|
438
|
+
for (const [uri, metadata] of Array.from(this.metadata.entries())) {
|
|
439
|
+
if (metadata.expiresAt <= now) {
|
|
440
|
+
this.metadata.delete(uri);
|
|
441
|
+
resourceRegistry.unregister(uri);
|
|
442
|
+
void fs.unlink(metadata.filePath).catch(() => undefined);
|
|
443
|
+
resourceLogger.info(`Expired resource removed: ${uri}`);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
isCacheDisabled() {
|
|
448
|
+
const raw = process.env.MCP_DISABLE_CACHE;
|
|
449
|
+
if (!raw) {
|
|
450
|
+
return false;
|
|
451
|
+
}
|
|
452
|
+
const normalized = raw.trim().toLowerCase();
|
|
453
|
+
return normalized === "1" || normalized === "true" || normalized === "yes";
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
// ============================================================================
|
|
457
|
+
// SINGLETON INSTANCE
|
|
458
|
+
// ============================================================================
|
|
459
|
+
export const dynamicResourceManager = new DynamicResourceManager();
|
|
460
|
+
//# sourceMappingURL=dynamic-resource-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamic-resource-manager.js","sourceRoot":"","sources":["../../src/utils/dynamic-resource-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic HTTP Client Utility
|
|
3
|
+
*
|
|
4
|
+
* Pure HTTP logic without MCP-specific types.
|
|
5
|
+
* Used by providers (kraken-api, etc.) for making HTTP requests.
|
|
6
|
+
*/
|
|
7
|
+
export interface HTTPClientConfig {
|
|
8
|
+
url: string;
|
|
9
|
+
method: "GET" | "POST" | "PUT" | "DELETE";
|
|
10
|
+
headers?: Record<string, string>;
|
|
11
|
+
body?: string;
|
|
12
|
+
timeout?: number;
|
|
13
|
+
maxResponseSize?: number;
|
|
14
|
+
}
|
|
15
|
+
export interface HTTPClientResponse {
|
|
16
|
+
statusCode: number;
|
|
17
|
+
headers: Record<string, string>;
|
|
18
|
+
body: string;
|
|
19
|
+
}
|
|
20
|
+
export declare class HTTPClient {
|
|
21
|
+
private defaultTimeout;
|
|
22
|
+
private defaultMaxSize;
|
|
23
|
+
/**
|
|
24
|
+
* Execute HTTP request with timeout and size limits
|
|
25
|
+
*/
|
|
26
|
+
request(config: HTTPClientConfig): Promise<HTTPClientResponse>;
|
|
27
|
+
}
|
|
28
|
+
export declare const httpClient: HTTPClient;
|
|
29
|
+
//# sourceMappingURL=http-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../src/utils/http-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;CACd;AAMD,qBAAa,UAAU;IACrB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,cAAc,CAAoB;IAE1C;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CA2CrE;AAGD,eAAO,MAAM,UAAU,YAAmB,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic HTTP Client Utility
|
|
3
|
+
*
|
|
4
|
+
* Pure HTTP logic without MCP-specific types.
|
|
5
|
+
* Used by providers (kraken-api, etc.) for making HTTP requests.
|
|
6
|
+
*/
|
|
7
|
+
import { request } from "undici";
|
|
8
|
+
// ============================================================================
|
|
9
|
+
// HTTP CLIENT
|
|
10
|
+
// ============================================================================
|
|
11
|
+
export class HTTPClient {
|
|
12
|
+
defaultTimeout = 30000; // 30 seconds
|
|
13
|
+
defaultMaxSize = 10 * 1024 * 1024; // 10 MB
|
|
14
|
+
/**
|
|
15
|
+
* Execute HTTP request with timeout and size limits
|
|
16
|
+
*/
|
|
17
|
+
async request(config) {
|
|
18
|
+
const timeout = config.timeout || this.defaultTimeout;
|
|
19
|
+
const maxSize = config.maxResponseSize || this.defaultMaxSize;
|
|
20
|
+
try {
|
|
21
|
+
// Execute request with timeout
|
|
22
|
+
const response = await request(config.url, {
|
|
23
|
+
method: config.method,
|
|
24
|
+
headers: config.headers,
|
|
25
|
+
body: config.body,
|
|
26
|
+
signal: AbortSignal.timeout(timeout),
|
|
27
|
+
});
|
|
28
|
+
// Read body with size limit
|
|
29
|
+
const chunks = [];
|
|
30
|
+
let totalSize = 0;
|
|
31
|
+
for await (const chunk of response.body) {
|
|
32
|
+
totalSize += chunk.length;
|
|
33
|
+
if (totalSize > maxSize) {
|
|
34
|
+
throw new Error(`Response size exceeded ${maxSize} bytes`);
|
|
35
|
+
}
|
|
36
|
+
chunks.push(chunk);
|
|
37
|
+
}
|
|
38
|
+
// Convert headers to Record<string, string>
|
|
39
|
+
const headers = {};
|
|
40
|
+
for (const [key, value] of Object.entries(response.headers)) {
|
|
41
|
+
headers[key] = Array.isArray(value) ? value[0] : value || "";
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
statusCode: response.statusCode,
|
|
45
|
+
headers,
|
|
46
|
+
body: Buffer.concat(chunks).toString("utf-8"),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
if (error instanceof Error) {
|
|
51
|
+
throw error;
|
|
52
|
+
}
|
|
53
|
+
throw new Error(`HTTP request failed: ${String(error)}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Singleton instance
|
|
58
|
+
export const httpClient = new HTTPClient();
|
|
59
|
+
//# sourceMappingURL=http-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../src/utils/http-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAC,OAAO,EAAC,MAAM,QAAQ,CAAC;AAqB/B,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E,MAAM,OAAO,UAAU;IACb,cAAc,GAAG,KAAK,CAAC,CAAC,aAAa;IACrC,cAAc,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,QAAQ;IAEnD;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,MAAwB;QACpC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC;QACtD,MAAM,OAAO,GAAG,MAAM,CAAC,eAAe,IAAI,IAAI,CAAC,cAAc,CAAC;QAE9D,IAAI,CAAC;YACH,+BAA+B;YAC/B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE;gBACzC,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC;aACrC,CAAC,CAAC;YAEH,4BAA4B;YAC5B,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,IAAI,SAAS,GAAG,CAAC,CAAC;YAElB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC;gBAC1B,IAAI,SAAS,GAAG,OAAO,EAAE,CAAC;oBACxB,MAAM,IAAI,KAAK,CAAC,0BAA0B,OAAO,QAAQ,CAAC,CAAC;gBAC7D,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;YAED,4CAA4C;YAC5C,MAAM,OAAO,GAA2B,EAAE,CAAC;YAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5D,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC/D,CAAC;YAED,OAAO;gBACL,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,OAAO;gBACP,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;aAC9C,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;CACF;AAED,qBAAqB;AACrB,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type LogLevel = "debug" | "info" | "success" | "warn" | "error";
|
|
2
|
+
export interface Logger {
|
|
3
|
+
debug: (...args: unknown[]) => void;
|
|
4
|
+
info: (...args: unknown[]) => void;
|
|
5
|
+
success: (...args: unknown[]) => void;
|
|
6
|
+
warn: (...args: unknown[]) => void;
|
|
7
|
+
error: (...args: unknown[]) => void;
|
|
8
|
+
child: (scope: string, levelOverride?: LogLevel) => Logger;
|
|
9
|
+
level: LogLevel;
|
|
10
|
+
}
|
|
11
|
+
declare const LOG_LEVELS: Record<LogLevel, number>;
|
|
12
|
+
export declare let forceStdErrMode: boolean;
|
|
13
|
+
export declare function _setForceStdErrMode(value: boolean): void;
|
|
14
|
+
/**
|
|
15
|
+
* Public log function for quick one-off logs without creating a scoped logger.
|
|
16
|
+
*/
|
|
17
|
+
export declare function log(level: LogLevel, ...args: unknown[]): void;
|
|
18
|
+
/**
|
|
19
|
+
* Creates a scoped logger instance. Child loggers inherit the current level unless overridden.
|
|
20
|
+
*/
|
|
21
|
+
export declare function createLogger(scope?: string, level?: LogLevel): Logger;
|
|
22
|
+
declare const defaultLogger: Logger;
|
|
23
|
+
export default defaultLogger;
|
|
24
|
+
export { LOG_LEVELS };
|
|
25
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAEvE,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACnC,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACtC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACnC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,QAAQ,KAAK,MAAM,CAAC;IAC3D,KAAK,EAAE,QAAQ,CAAC;CACjB;AAED,QAAA,MAAM,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAMxC,CAAC;AAoBF,eAAO,IAAI,eAAe,SAAQ,CAAC;AACnC,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,QAEjD;AAkBD;;GAEG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,QAEtD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,GAAE,QAAuB,GAAG,MAAM,CAkBnF;AAED,QAAA,MAAM,aAAa,QAAiB,CAAC;AAErC,eAAe,aAAa,CAAC;AAC7B,OAAO,EAAC,UAAU,EAAC,CAAC"}
|