@j0hanz/fetch-url-mcp 1.12.8 → 1.12.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/http/auth.d.ts +2 -2
- package/dist/http/auth.d.ts.map +1 -1
- package/dist/http/auth.js +42 -24
- package/dist/http/index.d.ts +0 -2
- package/dist/http/index.d.ts.map +1 -1
- package/dist/http/index.js +2 -2
- package/dist/http/native.d.ts +4 -1
- package/dist/http/native.d.ts.map +1 -1
- package/dist/http/native.js +171 -98
- package/dist/http/rate-limit.d.ts +11 -3
- package/dist/http/rate-limit.d.ts.map +1 -1
- package/dist/http/rate-limit.js +19 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/lib/config.d.ts +1 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +25 -3
- package/dist/lib/core.d.ts +12 -2
- package/dist/lib/core.d.ts.map +1 -1
- package/dist/lib/core.js +166 -87
- package/dist/lib/error/classes.d.ts.map +1 -1
- package/dist/lib/error/classes.js +4 -2
- package/dist/lib/error/classify.d.ts.map +1 -1
- package/dist/lib/error/classify.js +20 -16
- package/dist/lib/error/index.d.ts.map +1 -1
- package/dist/lib/error/index.js +2 -0
- package/dist/lib/mcp-interop.d.ts +12 -0
- package/dist/lib/mcp-interop.d.ts.map +1 -1
- package/dist/lib/mcp-interop.js +20 -2
- package/dist/lib/net/http.js +2 -1
- package/dist/lib/net/index.d.ts.map +1 -1
- package/dist/lib/net/index.js +2 -0
- package/dist/lib/net/pipeline.d.ts.map +1 -1
- package/dist/lib/net/pipeline.js +10 -9
- package/dist/lib/net/url.d.ts +1 -2
- package/dist/lib/net/url.d.ts.map +1 -1
- package/dist/lib/net/url.js +9 -6
- package/dist/lib/utils.d.ts +0 -16
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +3 -51
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +49 -22
- package/dist/schemas.d.ts +9 -1
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +3 -1
- package/dist/tasks/index.d.ts.map +1 -1
- package/dist/tasks/index.js +2 -0
- package/dist/tasks/manager.d.ts +9 -106
- package/dist/tasks/manager.d.ts.map +1 -1
- package/dist/tasks/manager.js +200 -553
- package/dist/tasks/store.d.ts +104 -0
- package/dist/tasks/store.d.ts.map +1 -0
- package/dist/tasks/store.js +480 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +5 -4
- package/dist/transform/index.d.ts +1 -85
- package/dist/transform/index.d.ts.map +1 -1
- package/dist/transform/index.js +312 -942
- package/dist/transform/worker-pool.d.ts +19 -0
- package/dist/transform/worker-pool.d.ts.map +1 -0
- package/dist/transform/worker-pool.js +713 -0
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -540,6 +540,8 @@ You get text content back by default. If output validation passes, the response
|
|
|
540
540
|
|
|
541
541
|
To opt into progress updates, include `_meta.progressToken` in the tool call. The token may be a string or number. The server may then emit monotonic `notifications/progress` updates, and task mode reuses the same token until the task reaches a terminal state.
|
|
542
542
|
|
|
543
|
+
To run the tool in task mode, include `_meta["modelcontextprotocol.io/task"] = { "taskId": "<client-id>", "keepAlive": <ms> }`. `tasks/result` returns output only after the task reaches `completed`. Task-linked progress notifications, task summaries, and final results include `_meta["modelcontextprotocol.io/related-task"] = { "taskId": "<client-id>" }`.
|
|
544
|
+
|
|
543
545
|
```json
|
|
544
546
|
{
|
|
545
547
|
"method": "tools/call",
|
package/dist/http/auth.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { InvalidTokenError } from '@modelcontextprotocol/sdk/server/auth/errors.js';
|
|
2
2
|
import type { AuthInfo } from '@modelcontextprotocol/sdk/server/auth/types.js';
|
|
3
3
|
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
4
|
-
import {
|
|
4
|
+
import type { RequestContext } from './native.js';
|
|
5
5
|
declare class CorsPolicy {
|
|
6
6
|
handle(ctx: RequestContext): boolean;
|
|
7
7
|
}
|
|
@@ -52,7 +52,7 @@ declare class AuthService {
|
|
|
52
52
|
}
|
|
53
53
|
export declare function applyUnauthorizedAuthHeaders(req: IncomingMessage, res: ServerResponse): void;
|
|
54
54
|
export declare function applyInsufficientScopeAuthHeaders(req: IncomingMessage, res: ServerResponse, requiredScopes: readonly string[], message?: string): void;
|
|
55
|
-
export declare function buildProtectedResourceMetadataDocument(
|
|
55
|
+
export declare function buildProtectedResourceMetadataDocument(): {
|
|
56
56
|
resource: string;
|
|
57
57
|
resource_metadata: string;
|
|
58
58
|
authorization_servers: string[];
|
package/dist/http/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/http/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAElB,MAAM,iDAAiD,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gDAAgD,CAAC;AAG/E,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/http/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/http/auth.js
CHANGED
|
@@ -1,9 +1,34 @@
|
|
|
1
1
|
import { InvalidTokenError, ServerError, } from '@modelcontextprotocol/sdk/server/auth/errors.js';
|
|
2
2
|
import { randomBytes } from 'node:crypto';
|
|
3
|
-
import { config
|
|
3
|
+
import { config } from '../lib/config.js';
|
|
4
|
+
import { logDebug, Loggers, logWarn } from '../lib/core.js';
|
|
5
|
+
import { sendJsonRpcError } from '../lib/mcp-interop.js';
|
|
4
6
|
import { normalizeHost } from '../lib/net/index.js';
|
|
5
|
-
import { composeAbortSignal, hmacSha256Hex, isObject,
|
|
6
|
-
|
|
7
|
+
import { composeAbortSignal, hmacSha256Hex, isObject, timingSafeEqualUtf8, } from '../lib/utils.js';
|
|
8
|
+
function setNoStoreHeaders(res) {
|
|
9
|
+
res.setHeader('X-Content-Type-Options', 'nosniff');
|
|
10
|
+
res.setHeader('Cache-Control', 'no-store');
|
|
11
|
+
}
|
|
12
|
+
function sendJson(res, status, body) {
|
|
13
|
+
res.statusCode = status;
|
|
14
|
+
res.setHeader('Content-Type', 'application/json; charset=utf-8');
|
|
15
|
+
setNoStoreHeaders(res);
|
|
16
|
+
res.end(JSON.stringify(body));
|
|
17
|
+
}
|
|
18
|
+
function sendEmpty(res, status) {
|
|
19
|
+
res.statusCode = status;
|
|
20
|
+
res.setHeader('Content-Length', '0');
|
|
21
|
+
res.end();
|
|
22
|
+
}
|
|
23
|
+
function sendError(res, code, message, status = 400, id) {
|
|
24
|
+
sendJsonRpcError(res, status, code, message, id ?? null);
|
|
25
|
+
}
|
|
26
|
+
function getHeaderValue(req, name) {
|
|
27
|
+
const value = req.headers[name];
|
|
28
|
+
if (!value)
|
|
29
|
+
return null;
|
|
30
|
+
return Array.isArray(value) ? (value[0] ?? null) : value;
|
|
31
|
+
}
|
|
7
32
|
// ---------------------------------------------------------------------------
|
|
8
33
|
// CORS
|
|
9
34
|
// ---------------------------------------------------------------------------
|
|
@@ -110,7 +135,7 @@ class HostOriginPolicy {
|
|
|
110
135
|
return null;
|
|
111
136
|
const isEncrypted = Reflect.get(req.socket, 'encrypted') === true;
|
|
112
137
|
const scheme = isEncrypted ? 'https' : 'http';
|
|
113
|
-
const parsed =
|
|
138
|
+
const parsed = URL.parse(`${scheme}://${hostHeader}`);
|
|
114
139
|
if (!parsed)
|
|
115
140
|
return null;
|
|
116
141
|
const normalizedHost = normalizeHost(parsed.host);
|
|
@@ -125,7 +150,7 @@ class HostOriginPolicy {
|
|
|
125
150
|
resolveOrigin(origin) {
|
|
126
151
|
if (origin === 'null')
|
|
127
152
|
return null;
|
|
128
|
-
const parsed =
|
|
153
|
+
const parsed = URL.parse(origin);
|
|
129
154
|
if (!parsed)
|
|
130
155
|
return null;
|
|
131
156
|
const scheme = parsed.protocol === 'https:' ? 'https' : 'http';
|
|
@@ -174,6 +199,9 @@ export function assertHttpModeConfiguration() {
|
|
|
174
199
|
if (config.auth.mode === 'oauth' && !config.auth.issuerUrl) {
|
|
175
200
|
throw Error('OAuth mode requires OAUTH_ISSUER_URL to serve RFC9728 metadata');
|
|
176
201
|
}
|
|
202
|
+
if (config.auth.mode === 'oauth' && !config.auth.introspectionUrl) {
|
|
203
|
+
throw Error('OAuth mode requires OAUTH_INTROSPECTION_URL');
|
|
204
|
+
}
|
|
177
205
|
if (config.auth.mode === 'static' && config.auth.staticTokens.length === 0) {
|
|
178
206
|
throw Error('Static auth requires ACCESS_TOKENS or API_KEY to be configured');
|
|
179
207
|
}
|
|
@@ -196,11 +224,6 @@ export function ensureMcpProtocolVersion(req, res, options) {
|
|
|
196
224
|
const version = resolveMcpProtocolVersion(req);
|
|
197
225
|
const path = URL.parse(req.url ?? '', 'http://localhost')?.pathname;
|
|
198
226
|
if (!version) {
|
|
199
|
-
// Tolerate missing header on sessioned requests (expectedVersion set)
|
|
200
|
-
// to avoid breaking older clients that don't send it yet.
|
|
201
|
-
if (options?.expectedVersion) {
|
|
202
|
-
return true;
|
|
203
|
-
}
|
|
204
227
|
logWarn('MCP protocol version rejected', { reason: 'missing_header', path }, 'http');
|
|
205
228
|
sendError(res, -32600, 'Please include the MCP-Protocol-Version header in your request.');
|
|
206
229
|
return false;
|
|
@@ -481,16 +504,11 @@ class AuthService {
|
|
|
481
504
|
}
|
|
482
505
|
}
|
|
483
506
|
}
|
|
484
|
-
function resolvePublicOrigin(
|
|
485
|
-
const host = getHeaderValue(req, 'host');
|
|
486
|
-
if (host) {
|
|
487
|
-
const protocol = config.server.https.enabled ? 'https' : 'http';
|
|
488
|
-
return `${protocol}://${host}`;
|
|
489
|
-
}
|
|
507
|
+
function resolvePublicOrigin() {
|
|
490
508
|
return config.auth.resourceUrl.origin;
|
|
491
509
|
}
|
|
492
|
-
function buildRequestScopedProtectedResourceUrls(
|
|
493
|
-
const origin = resolvePublicOrigin(
|
|
510
|
+
function buildRequestScopedProtectedResourceUrls() {
|
|
511
|
+
const origin = resolvePublicOrigin();
|
|
494
512
|
return {
|
|
495
513
|
resource: new URL('/mcp', `${origin}/`).href,
|
|
496
514
|
resourceMetadata: new URL(resolveResourceMetadataPath(), `${origin}/`).href,
|
|
@@ -499,13 +517,13 @@ function buildRequestScopedProtectedResourceUrls(req) {
|
|
|
499
517
|
function resolveResourceMetadataPath() {
|
|
500
518
|
return '/.well-known/oauth-protected-resource/mcp';
|
|
501
519
|
}
|
|
502
|
-
function buildResourceMetadataUrl(
|
|
503
|
-
return buildRequestScopedProtectedResourceUrls(
|
|
520
|
+
function buildResourceMetadataUrl() {
|
|
521
|
+
return buildRequestScopedProtectedResourceUrls().resourceMetadata;
|
|
504
522
|
}
|
|
505
523
|
export function applyUnauthorizedAuthHeaders(req, res) {
|
|
506
524
|
if (!isOAuthMetadataEnabled())
|
|
507
525
|
return;
|
|
508
|
-
const resourceMetadata = buildResourceMetadataUrl(
|
|
526
|
+
const resourceMetadata = buildResourceMetadataUrl();
|
|
509
527
|
const challengeParts = [`resource_metadata="${resourceMetadata}"`];
|
|
510
528
|
if (config.auth.requiredScopes.length > 0) {
|
|
511
529
|
challengeParts.push(`scope="${config.auth.requiredScopes.join(' ')}"`);
|
|
@@ -515,7 +533,7 @@ export function applyUnauthorizedAuthHeaders(req, res) {
|
|
|
515
533
|
export function applyInsufficientScopeAuthHeaders(req, res, requiredScopes, message = 'Additional authorization scope is required') {
|
|
516
534
|
if (!isOAuthMetadataEnabled())
|
|
517
535
|
return;
|
|
518
|
-
const resourceMetadata = buildResourceMetadataUrl(
|
|
536
|
+
const resourceMetadata = buildResourceMetadataUrl();
|
|
519
537
|
const challengeParts = [
|
|
520
538
|
'error="insufficient_scope"',
|
|
521
539
|
`scope="${requiredScopes.join(' ')}"`,
|
|
@@ -524,8 +542,8 @@ export function applyInsufficientScopeAuthHeaders(req, res, requiredScopes, mess
|
|
|
524
542
|
];
|
|
525
543
|
res.setHeader('WWW-Authenticate', `Bearer ${challengeParts.join(', ')}`);
|
|
526
544
|
}
|
|
527
|
-
export function buildProtectedResourceMetadataDocument(
|
|
528
|
-
const urls = buildRequestScopedProtectedResourceUrls(
|
|
545
|
+
export function buildProtectedResourceMetadataDocument() {
|
|
546
|
+
const urls = buildRequestScopedProtectedResourceUrls();
|
|
529
547
|
if (!config.auth.issuerUrl) {
|
|
530
548
|
const error = new ServerError('OAuth issuer URL is required for protected resource metadata');
|
|
531
549
|
throw error;
|
package/dist/http/index.d.ts
CHANGED
package/dist/http/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/http/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/http/index.ts"],"names":[],"mappings":"AAGA,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC"}
|
package/dist/http/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
// Area contract: HTTP transport surface for auth, gateway, and rate limiting.
|
|
2
|
+
// Export only HTTP-facing primitives used outside http/; keep generic shared utilities and fetch logic out.
|
|
1
3
|
export * from './auth.js';
|
|
2
4
|
export * from './native.js';
|
|
3
|
-
export * from './native.js';
|
|
4
|
-
export * from './native.js';
|
|
5
5
|
export * from './rate-limit.js';
|
package/dist/http/native.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ export interface AuthenticatedContext extends RequestContext {
|
|
|
21
21
|
}
|
|
22
22
|
export declare function sendJson(res: ServerResponse, status: number, body: unknown): void;
|
|
23
23
|
export declare function sendEmpty(res: ServerResponse, status: number): void;
|
|
24
|
-
export declare function sendError(res: ServerResponse,
|
|
24
|
+
export declare function sendError(res: ServerResponse, code: number, message: string, status?: number, id?: JsonRpcId | null): void;
|
|
25
25
|
export declare function getHeaderValue(req: IncomingMessage, name: string): string | null;
|
|
26
26
|
export declare function getMcpSessionId(req: IncomingMessage): string | null;
|
|
27
27
|
export declare function findDuplicateSingleValueHeader(req: IncomingMessage): string | null;
|
|
@@ -45,7 +45,10 @@ export declare class JsonBodyError extends Error {
|
|
|
45
45
|
export declare function isJsonBodyError(error: unknown): error is JsonBodyError;
|
|
46
46
|
export declare const DEFAULT_BODY_LIMIT_BYTES: number;
|
|
47
47
|
declare class JsonBodyReader {
|
|
48
|
+
private validateContentLength;
|
|
48
49
|
read(req: IncomingMessage, limit?: number, signal?: AbortSignal): Promise<unknown>;
|
|
50
|
+
private setupAbortListener;
|
|
51
|
+
private cleanupAbortListener;
|
|
49
52
|
private readBody;
|
|
50
53
|
private collectChunks;
|
|
51
54
|
private normalizeChunk;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/http/native.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gDAAgD,CAAC;AAC/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;
|
|
1
|
+
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/http/native.ts"],"names":[],"mappings":"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"}
|