@j0hanz/fetch-url-mcp 1.12.2 → 1.12.4
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/dist/lib/http.d.ts.map +1 -1
- package/dist/lib/http.js +12 -6
- package/dist/lib/mcp-interop.d.ts +2 -1
- package/dist/lib/mcp-interop.d.ts.map +1 -1
- package/dist/lib/mcp-interop.js +8 -3
- package/dist/tasks/call-contract.d.ts.map +1 -1
- package/dist/tasks/call-contract.js +3 -2
- package/dist/tasks/execution.d.ts.map +1 -1
- package/dist/tasks/execution.js +5 -4
- package/dist/tasks/handlers.d.ts.map +1 -1
- package/dist/tasks/handlers.js +3 -4
- package/dist/tasks/manager.d.ts.map +1 -1
- package/dist/tasks/manager.js +9 -8
- package/dist/tasks/waiters.d.ts.map +1 -1
- package/dist/tasks/waiters.js +4 -3
- package/dist/tools/fetch-url.d.ts.map +1 -1
- package/dist/tools/fetch-url.js +4 -4
- package/package.json +1 -1
package/dist/lib/http.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/lib/http.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,EAAmB,MAAM,QAAQ,CAAC;AAYhD,OAAO,EAOL,KAAK,eAAe,EAGrB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/lib/http.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,EAAmB,MAAM,QAAQ,CAAC;AAYhD,OAAO,EAOL,KAAK,eAAe,EAGrB,MAAM,UAAU,CAAC;AAsvClB,UAAU,qBAAqB;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAoKD,UAAU,YAAY;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AA6ND,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE/C;AACD,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAEA;AACD,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjE;AACD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAE9D;AACD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAExD;AACD,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,GACb,qBAAqB,CAEvB;AACD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,QAAQ,EAClB,WAAW,CAAC,EAAE,MAAM,GACnB,IAAI,CAEN;AACD,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,qBAAqB,EAC9B,KAAK,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,MAAM,GACd,IAAI,CAEN;AACD,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,EACjB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC,CAE7D;AACD,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,WAAW,EACpB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CASzC;AACD,wBAAsB,kBAAkB,CACtC,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,MAAM,CAAC,CAEjB;AACD,wBAAsB,wBAAwB,CAC5C,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC;IACT,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CAED"}
|
package/dist/lib/http.js
CHANGED
|
@@ -234,7 +234,9 @@ function isBinaryContent(buffer, encoding) {
|
|
|
234
234
|
return hasNullByte(buffer, BINARY_SCAN_LIMIT);
|
|
235
235
|
}
|
|
236
236
|
function createBinaryContentError(url) {
|
|
237
|
-
return new FetchError('
|
|
237
|
+
return new FetchError('Binary content detected', url, 500, {
|
|
238
|
+
reason: 'binary_content_detected',
|
|
239
|
+
});
|
|
238
240
|
}
|
|
239
241
|
// ═══════════════════════════════════════════════════════════════════
|
|
240
242
|
// FETCH ERRORS
|
|
@@ -258,13 +260,15 @@ function parseRetryAfter(header) {
|
|
|
258
260
|
function createFetchError(input, url) {
|
|
259
261
|
switch (input.kind) {
|
|
260
262
|
case 'canceled':
|
|
261
|
-
return new FetchError('Request
|
|
263
|
+
return new FetchError('Request canceled', url, 499, {
|
|
262
264
|
reason: 'aborted',
|
|
263
265
|
});
|
|
264
266
|
case 'aborted':
|
|
265
|
-
return new FetchError('Request
|
|
267
|
+
return new FetchError('Request aborted during response read', url, 499, {
|
|
268
|
+
reason: 'aborted',
|
|
269
|
+
});
|
|
266
270
|
case 'timeout':
|
|
267
|
-
return new FetchError(`Request
|
|
271
|
+
return new FetchError(`Request timed out after ${input.timeout}ms`, url, 504, { timeout: input.timeout });
|
|
268
272
|
case 'rate-limited':
|
|
269
273
|
return new FetchError('Too many requests', url, 429, {
|
|
270
274
|
retryAfter: parseRetryAfter(input.retryAfter),
|
|
@@ -274,9 +278,11 @@ function createFetchError(input, url) {
|
|
|
274
278
|
case 'too-many-redirects':
|
|
275
279
|
return new FetchError('Too many redirects', url);
|
|
276
280
|
case 'missing-redirect-location':
|
|
277
|
-
return new FetchError('Redirect
|
|
281
|
+
return new FetchError('Redirect missing Location header', url);
|
|
278
282
|
case 'network':
|
|
279
|
-
return new FetchError(
|
|
283
|
+
return new FetchError('Network error', url, undefined, {
|
|
284
|
+
message: input.message,
|
|
285
|
+
});
|
|
280
286
|
case 'unknown':
|
|
281
287
|
return new FetchError(input.message ?? 'Unexpected error', url);
|
|
282
288
|
default: {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
-
import { type CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import { type CallToolResult, McpError } from '@modelcontextprotocol/sdk/types.js';
|
|
3
3
|
import { z } from 'zod';
|
|
4
|
+
export declare function createMcpError(code: number, message: string, data?: unknown): McpError;
|
|
4
5
|
export type JsonRpcId = string | number | null;
|
|
5
6
|
declare const jsonRpcRequestSchema: z.ZodObject<{
|
|
6
7
|
jsonrpc: z.ZodLiteral<"2.0">;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-interop.d.ts","sourceRoot":"","sources":["../../src/lib/mcp-interop.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EACL,KAAK,cAAc,
|
|
1
|
+
{"version":3,"file":"mcp-interop.d.ts","sourceRoot":"","sources":["../../src/lib/mcp-interop.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/mcp-interop.js
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import { setTimeout as setTimeoutPromise } from 'node:timers/promises';
|
|
2
|
-
import { ListToolsRequestSchema, ListToolsResultSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import { ListToolsRequestSchema, ListToolsResultSchema, McpError, } from '@modelcontextprotocol/sdk/types.js';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { logError, logWarn } from './core.js';
|
|
5
5
|
import { FetchError, getErrorMessage, isAbortError, isObject, isSystemError, } from './utils.js';
|
|
6
|
+
export function createMcpError(code, message, data) {
|
|
7
|
+
const error = new McpError(code, message, data);
|
|
8
|
+
error.message = message;
|
|
9
|
+
return error;
|
|
10
|
+
}
|
|
6
11
|
const paramsSchema = z.looseObject({
|
|
7
12
|
_meta: z.record(z.string(), z.unknown()).optional(),
|
|
8
13
|
});
|
|
@@ -128,8 +133,8 @@ export function handleToolError(error, url, fallbackMessage = 'Operation failed'
|
|
|
128
133
|
}
|
|
129
134
|
const code = isAbortError(error) ? 'ABORTED' : 'FETCH_ERROR';
|
|
130
135
|
const message = error instanceof Error
|
|
131
|
-
?
|
|
132
|
-
: `${fallbackMessage}:
|
|
136
|
+
? error.message
|
|
137
|
+
: `${fallbackMessage}: unknown error`;
|
|
133
138
|
return createToolErrorResponse(message, url, { code });
|
|
134
139
|
}
|
|
135
140
|
function getNestedRecord(value, key) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call-contract.d.ts","sourceRoot":"","sources":["../../src/tasks/call-contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAEvE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"call-contract.d.ts","sourceRoot":"","sources":["../../src/tasks/call-contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAEvE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAiBxB,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;iBA4BzC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAC3C,OAAO,6BAA6B,CACrC,CAAC;AACF,MAAM,MAAM,mBAAmB,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC;AAE7E,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,OAAO,GACf,uBAAuB,CAKzB;AAED,wBAAgB,oBAAoB,CAClC,IAAI,CAAC,EAAE,mBAAmB,GACzB,mBAAmB,GAAG,SAAS,CAMjC;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,mBAAmB,GACzB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKzB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,GACb,YAAY,CAQd"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { ErrorCode
|
|
1
|
+
import { ErrorCode } from '@modelcontextprotocol/sdk/types.js';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
+
import { createMcpError } from '../lib/mcp-interop.js';
|
|
3
4
|
import { formatZodError } from '../lib/zod.js';
|
|
4
5
|
const MIN_TASK_TTL_MS = 1_000;
|
|
5
6
|
const MAX_TASK_TTL_MS = 86_400_000;
|
|
@@ -34,7 +35,7 @@ export function parseExtendedCallToolRequest(request) {
|
|
|
34
35
|
const parsed = extendedCallToolRequestSchema.safeParse(request);
|
|
35
36
|
if (parsed.success)
|
|
36
37
|
return parsed.data;
|
|
37
|
-
throw
|
|
38
|
+
throw createMcpError(ErrorCode.InvalidParams, formatZodError(parsed.error));
|
|
38
39
|
}
|
|
39
40
|
export function sanitizeToolCallMeta(meta) {
|
|
40
41
|
if (!meta)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../src/tasks/execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../src/tasks/execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,oCAAoC,CAAC;AAe5C,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,gBAAgB,EAErB,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAGL,KAAK,eAAe,EAErB,MAAM,YAAY,CAAC;AAkCpB,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAGvD;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,aAAa,SAA4D,GACxE,MAAM,CAOR;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAMD,KAAK,WAAW,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAC5C,KAAK,uBAAuB,GAAG,IAAI,CACjC,SAAS,EACP,QAAQ,GACR,QAAQ,GACR,eAAe,GACf,UAAU,GACV,OAAO,GACP,WAAW,GACX,eAAe,GACf,KAAK,GACL,cAAc,CACjB,CAAC;AAEF,wBAAgB,aAAa,CAAC,IAAI,EAAE,uBAAuB,GAAG,WAAW,CAYxE;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,SAAS,GACd,IAAI,CAmBN;AAED,wBAAgB,iBAAiB,IAAI,KAAK,CAEzC;AA2JD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,uBAAuB,EAChC,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,YAAY,CAAC,CAwFvB"}
|
package/dist/tasks/execution.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ErrorCode, McpError, } from '@modelcontextprotocol/sdk/types.js';
|
|
2
2
|
import { config } from '../lib/core.js';
|
|
3
3
|
import { logDebug, logError, logInfo, logWarn, runWithRequestContext, } from '../lib/core.js';
|
|
4
|
+
import { createMcpError } from '../lib/mcp-interop.js';
|
|
4
5
|
import {} from '../lib/mcp-interop.js';
|
|
5
6
|
import { getErrorMessage } from '../lib/utils.js';
|
|
6
7
|
import { isObject } from '../lib/utils.js';
|
|
@@ -73,7 +74,7 @@ export function emitTaskStatusNotification(server, task) {
|
|
|
73
74
|
});
|
|
74
75
|
}
|
|
75
76
|
export function throwTaskNotFound() {
|
|
76
|
-
throw
|
|
77
|
+
throw createMcpError(ErrorCode.InvalidParams, 'Task not found');
|
|
77
78
|
}
|
|
78
79
|
/* -------------------------------------------------------------------------------------------------
|
|
79
80
|
* Execution pipeline
|
|
@@ -181,11 +182,11 @@ export async function handleToolCallRequest(server, request, context) {
|
|
|
181
182
|
// Validate the tool name first so an unknown tool always produces MethodNotFound
|
|
182
183
|
const tool = getTaskCapableTool(server, params.name);
|
|
183
184
|
if (!tool) {
|
|
184
|
-
throw
|
|
185
|
+
throw createMcpError(ErrorCode.MethodNotFound, `Unknown tool: '${params.name}'`);
|
|
185
186
|
}
|
|
186
187
|
if (params.task) {
|
|
187
188
|
if (getTaskCapableToolSupport(server, params.name) === 'forbidden') {
|
|
188
|
-
throw
|
|
189
|
+
throw createMcpError(ErrorCode.MethodNotFound, `Task augmentation is forbidden for tool '${params.name}'`);
|
|
189
190
|
}
|
|
190
191
|
const args = tool.parseArguments(params.arguments);
|
|
191
192
|
const task = taskManager.createTask(params.task.ttl !== undefined ? { ttl: params.task.ttl } : undefined, 'Task started', context.ownerKey);
|
|
@@ -217,7 +218,7 @@ export async function handleToolCallRequest(server, request, context) {
|
|
|
217
218
|
};
|
|
218
219
|
}
|
|
219
220
|
if (getTaskCapableToolSupport(server, params.name) === 'required') {
|
|
220
|
-
throw
|
|
221
|
+
throw createMcpError(ErrorCode.MethodNotFound, `Task augmentation is required for tool '${params.name}'`);
|
|
221
222
|
}
|
|
222
223
|
const args = tool.parseArguments(params.arguments);
|
|
223
224
|
const progressState = { closed: false };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/tasks/handlers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/tasks/handlers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkCzE,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AA4D7E,UAAU,8BAA8B;IACtC,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,UAAU,6BAA6B;IACrC,oBAAoB,EAAE,OAAO,CAAC;IAC9B,0BAA0B,EAAE,OAAO,CAAC;CACrC;AAkBD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,OAAO,CAAC,EAAE,8BAA8B,GACvC,6BAA6B,CAoK/B"}
|
package/dist/tasks/handlers.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
2
|
import {} from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
3
|
import { CallToolRequestSchema, ErrorCode, } from '@modelcontextprotocol/sdk/types.js';
|
|
4
|
-
import { McpError } from '@modelcontextprotocol/sdk/types.js';
|
|
5
4
|
import { z } from 'zod';
|
|
6
5
|
import { logDebug, logWarn, runWithRequestContext } from '../lib/core.js';
|
|
7
|
-
import { getSdkCallToolHandler } from '../lib/mcp-interop.js';
|
|
6
|
+
import { createMcpError, getSdkCallToolHandler } from '../lib/mcp-interop.js';
|
|
8
7
|
import { parseExtendedCallToolRequest, withRelatedTaskMeta, } from './call-contract.js';
|
|
9
8
|
import { abortTaskExecution, emitTaskStatusNotification, handleToolCallRequest, throwTaskNotFound, toTaskSummary, } from './execution.js';
|
|
10
9
|
import { taskManager } from './manager.js';
|
|
@@ -43,9 +42,9 @@ function resolveOwnerScopedExtra(extra) {
|
|
|
43
42
|
}
|
|
44
43
|
function throwStoredTaskError(task) {
|
|
45
44
|
if (task.error) {
|
|
46
|
-
throw
|
|
45
|
+
throw createMcpError(task.error.code, task.error.message, task.error.data);
|
|
47
46
|
}
|
|
48
|
-
throw
|
|
47
|
+
throw createMcpError(ErrorCode.InternalError, task.statusMessage ?? 'Task execution failed', { taskId: task.taskId });
|
|
49
48
|
}
|
|
50
49
|
export function registerTaskHandlers(server, options) {
|
|
51
50
|
const sdkCallToolHandler = getSdkCallToolHandler(server);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/tasks/manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/tasks/manager.ts"],"names":[],"mappings":"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"}
|
package/dist/tasks/manager.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
2
|
import { createHmac, randomBytes } from 'node:crypto';
|
|
3
3
|
import { setInterval } from 'node:timers';
|
|
4
|
-
import { ErrorCode
|
|
4
|
+
import { ErrorCode } from '@modelcontextprotocol/sdk/types.js';
|
|
5
5
|
import { config, logInfo, logWarn } from '../lib/core.js';
|
|
6
|
+
import { createMcpError } from '../lib/mcp-interop.js';
|
|
6
7
|
import { isObject, timingSafeEqualUtf8 } from '../lib/utils.js';
|
|
7
8
|
import { TaskWaiterRegistry, waitForTerminalTask as waitForTerminalTaskWithDeadline, } from './waiters.js';
|
|
8
9
|
const DEFAULT_TTL_MS = 60_000;
|
|
@@ -33,10 +34,10 @@ function resolveNextTaskStatus(task, updates) {
|
|
|
33
34
|
if (!nextStatus || nextStatus === task.status)
|
|
34
35
|
return task.status;
|
|
35
36
|
if (!TASK_STATUS_VALUES.has(nextStatus)) {
|
|
36
|
-
throw
|
|
37
|
+
throw createMcpError(ErrorCode.InternalError, `Invalid task status '${nextStatus}'`);
|
|
37
38
|
}
|
|
38
39
|
if (isTerminalStatus(task.status)) {
|
|
39
|
-
throw
|
|
40
|
+
throw createMcpError(ErrorCode.InternalError, `Invalid task status transition: '${task.status}' -> '${nextStatus}'`);
|
|
40
41
|
}
|
|
41
42
|
return nextStatus;
|
|
42
43
|
}
|
|
@@ -140,10 +141,10 @@ class TaskManager {
|
|
|
140
141
|
reserveTaskCapacity(ownerKey) {
|
|
141
142
|
const { maxPerOwner, maxTotal } = config.tasks;
|
|
142
143
|
if (this.tasks.size >= maxTotal) {
|
|
143
|
-
throw
|
|
144
|
+
throw createMcpError(ErrorCode.InvalidRequest, `Task capacity reached (${maxTotal} total tasks)`);
|
|
144
145
|
}
|
|
145
146
|
if ((this.ownerCounts.get(ownerKey) ?? 0) >= maxPerOwner) {
|
|
146
|
-
throw
|
|
147
|
+
throw createMcpError(ErrorCode.InvalidRequest, `Task capacity reached for owner (${maxPerOwner} tasks)`);
|
|
147
148
|
}
|
|
148
149
|
this.ownerCounts.set(ownerKey, (this.ownerCounts.get(ownerKey) ?? 0) + 1);
|
|
149
150
|
}
|
|
@@ -214,7 +215,7 @@ class TaskManager {
|
|
|
214
215
|
if (!task)
|
|
215
216
|
return undefined;
|
|
216
217
|
if (isTerminalStatus(task.status)) {
|
|
217
|
-
throw
|
|
218
|
+
throw createMcpError(ErrorCode.InvalidParams, `Cannot cancel task: already in terminal status '${task.status}'`);
|
|
218
219
|
}
|
|
219
220
|
this.cancelActiveTask(task, 'The task was cancelled by request.');
|
|
220
221
|
logInfo('Task cancelled by request', {
|
|
@@ -257,7 +258,7 @@ class TaskManager {
|
|
|
257
258
|
}
|
|
258
259
|
const anchorIndex = validTasks.findIndex((t) => t.taskId === anchorTaskId);
|
|
259
260
|
if (anchorIndex === -1) {
|
|
260
|
-
throw
|
|
261
|
+
throw createMcpError(ErrorCode.InvalidParams, 'Invalid cursor');
|
|
261
262
|
}
|
|
262
263
|
return validTasks.slice(anchorIndex + 1, anchorIndex + 1 + pageSize + 1);
|
|
263
264
|
}
|
|
@@ -277,7 +278,7 @@ class TaskManager {
|
|
|
277
278
|
return null;
|
|
278
279
|
const decoded = decodeTaskCursor(cursor);
|
|
279
280
|
if (!decoded)
|
|
280
|
-
throw
|
|
281
|
+
throw createMcpError(ErrorCode.InvalidParams, 'Invalid cursor');
|
|
281
282
|
return decoded.anchorTaskId;
|
|
282
283
|
}
|
|
283
284
|
async waitForTerminalTask(taskId, ownerKey, signal) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"waiters.d.ts","sourceRoot":"","sources":["../../src/tasks/waiters.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"waiters.d.ts","sourceRoot":"","sources":["../../src/tasks/waiters.ts"],"names":[],"mappings":"AAQA,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,KAAK,UAAU,CAAC,KAAK,SAAS,YAAY,IAAI,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC;AAEpE,qBAAa,kBAAkB,CAAC,KAAK,SAAS,YAAY;IAItD,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAHnC,OAAO,CAAC,OAAO,CAA6C;gBAGzC,gBAAgB,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,OAAO;IAGzE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,GAAG,IAAI;IASpD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI;IAY9D,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI;CAS1B;AAED,wBAAsB,mBAAmB,CAAC,KAAK,SAAS,YAAY,EAAE,OAAO,EAAE;IAC7E,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,KAAK,GAAG,SAAS,CAAC;IACpE,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACpC,gBAAgB,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC;CACxD,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CA2F7B"}
|
package/dist/tasks/waiters.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
|
-
import { ErrorCode
|
|
2
|
+
import { ErrorCode } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
import { createMcpError } from '../lib/mcp-interop.js';
|
|
3
4
|
import { toError } from '../lib/utils.js';
|
|
4
5
|
import { createUnrefTimeout } from '../lib/utils.js';
|
|
5
6
|
export class TaskWaiterRegistry {
|
|
@@ -74,7 +75,7 @@ export async function waitForTerminalTask(options) {
|
|
|
74
75
|
settleOnce(() => {
|
|
75
76
|
cleanup();
|
|
76
77
|
options.registry.remove(options.taskId, waiter);
|
|
77
|
-
rejectInContext(
|
|
78
|
+
rejectInContext(createMcpError(ErrorCode.ConnectionClosed, 'Request was cancelled'));
|
|
78
79
|
});
|
|
79
80
|
};
|
|
80
81
|
waiter = (updated) => {
|
|
@@ -103,7 +104,7 @@ export async function waitForTerminalTask(options) {
|
|
|
103
104
|
cleanup();
|
|
104
105
|
options.registry.remove(options.taskId, waiter);
|
|
105
106
|
options.removeTask(options.taskId);
|
|
106
|
-
rejectInContext(
|
|
107
|
+
rejectInContext(createMcpError(ErrorCode.InvalidParams, 'Task expired', {
|
|
107
108
|
taskId: options.taskId,
|
|
108
109
|
}));
|
|
109
110
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-url.d.ts","sourceRoot":"","sources":["../../src/tools/fetch-url.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EACV,YAAY,EAEb,MAAM,oCAAoC,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAY7B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,
|
|
1
|
+
{"version":3,"file":"fetch-url.d.ts","sourceRoot":"","sources":["../../src/tools/fetch-url.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EACV,YAAY,EAEb,MAAM,oCAAoC,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAY7B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAIL,KAAK,gBAAgB,EAErB,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAW/B,OAAO,EACL,mBAAmB,EAIpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAIL,KAAK,sBAAsB,EAE5B,MAAM,sBAAsB,CAAC;AAE9B,KAAK,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEzD,UAAU,gBAAgB;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,mBAAmB,cAAc,CAAC;AA6F/C,wBAAgB,0BAA0B,CACxC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACzC,YAAY,EAAE,CAUhB;AAuCD,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,YAAY,GACnB,MAAM,GAAG,SAAS,CAUpB;AAED,qBAAa,oBAAoB;IAI7B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;gBAGhB,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,MAAM;IAGlC,WAAW,IAAI,IAAI;IAInB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAM1C,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAQxC,aAAa,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAQvC,OAAO,CAAC,QAAQ;CAiCjB;AA8FD,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,aAAa,EACpB,KAAK,CAAC,EAAE,gBAAgB,GACvB,OAAO,CAAC,gBAAgB,CAAC,CAiC3B;AAqBD,MAAM,WAAW,wBAAwB;IACvC,cAAc,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,IAAI,CAAC;CAC3D;AAqBD,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,wBAAwB,CAuCzE"}
|
package/dist/tools/fetch-url.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';
|
|
2
2
|
import { config, logError, logInfo, logWarn } from '../lib/core.js';
|
|
3
3
|
import { finalizeInlineMarkdown, markdownTransform, performSharedFetch, withSignal, } from '../lib/fetch-pipeline.js';
|
|
4
|
-
import { createProgressReporter, handleToolError, registerToolPresentation, } from '../lib/mcp-interop.js';
|
|
4
|
+
import { createMcpError, createProgressReporter, handleToolError, registerToolPresentation, } from '../lib/mcp-interop.js';
|
|
5
5
|
import { composeAbortSignal, FetchError, isAbortError, isObject, parseUrlOrNull, toError, } from '../lib/utils.js';
|
|
6
6
|
import { formatZodError } from '../lib/zod.js';
|
|
7
7
|
import { fetchUrlInputSchema, fetchUrlOutputSchema, normalizeExtractedMetadata, normalizePageTitle, } from '../schemas.js';
|
|
@@ -71,7 +71,7 @@ function validateStructuredContent(structuredContent, inputUrl) {
|
|
|
71
71
|
url: inputUrl,
|
|
72
72
|
issues,
|
|
73
73
|
}, 'fetch-url');
|
|
74
|
-
throw
|
|
74
|
+
throw createMcpError(ErrorCode.InternalError, 'fetch-url produced output that does not match its declared outputSchema', { issues });
|
|
75
75
|
}
|
|
76
76
|
export function buildFetchUrlContentBlocks(structuredContent) {
|
|
77
77
|
const markdown = typeof structuredContent['markdown'] === 'string'
|
|
@@ -182,7 +182,7 @@ function buildToolAbortSignal(extraSignal) {
|
|
|
182
182
|
const timeout = config.tools.timeoutMs > 0 ? config.tools.timeoutMs : HARD_TOOL_TIMEOUT_MS;
|
|
183
183
|
const signal = composeAbortSignal(extraSignal, timeout);
|
|
184
184
|
if (!signal) {
|
|
185
|
-
throw
|
|
185
|
+
throw createMcpError(ErrorCode.InternalError, 'Tool timeout signal could not be created');
|
|
186
186
|
}
|
|
187
187
|
return signal;
|
|
188
188
|
}
|
|
@@ -279,7 +279,7 @@ function createTaskCapableDescriptor() {
|
|
|
279
279
|
parseArguments: (args) => {
|
|
280
280
|
const parsed = TOOL_DEFINITION.inputSchema.safeParse(args);
|
|
281
281
|
if (!parsed.success) {
|
|
282
|
-
throw
|
|
282
|
+
throw createMcpError(ErrorCode.InvalidParams, formatZodError(parsed.error));
|
|
283
283
|
}
|
|
284
284
|
return parsed.data;
|
|
285
285
|
},
|
package/package.json
CHANGED