@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.
Files changed (65) hide show
  1. package/README.md +2 -0
  2. package/dist/http/auth.d.ts +2 -2
  3. package/dist/http/auth.d.ts.map +1 -1
  4. package/dist/http/auth.js +42 -24
  5. package/dist/http/index.d.ts +0 -2
  6. package/dist/http/index.d.ts.map +1 -1
  7. package/dist/http/index.js +2 -2
  8. package/dist/http/native.d.ts +4 -1
  9. package/dist/http/native.d.ts.map +1 -1
  10. package/dist/http/native.js +171 -98
  11. package/dist/http/rate-limit.d.ts +11 -3
  12. package/dist/http/rate-limit.d.ts.map +1 -1
  13. package/dist/http/rate-limit.js +19 -10
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +2 -1
  16. package/dist/lib/config.d.ts +1 -0
  17. package/dist/lib/config.d.ts.map +1 -1
  18. package/dist/lib/config.js +25 -3
  19. package/dist/lib/core.d.ts +12 -2
  20. package/dist/lib/core.d.ts.map +1 -1
  21. package/dist/lib/core.js +166 -87
  22. package/dist/lib/error/classes.d.ts.map +1 -1
  23. package/dist/lib/error/classes.js +4 -2
  24. package/dist/lib/error/classify.d.ts.map +1 -1
  25. package/dist/lib/error/classify.js +20 -16
  26. package/dist/lib/error/index.d.ts.map +1 -1
  27. package/dist/lib/error/index.js +2 -0
  28. package/dist/lib/mcp-interop.d.ts +12 -0
  29. package/dist/lib/mcp-interop.d.ts.map +1 -1
  30. package/dist/lib/mcp-interop.js +20 -2
  31. package/dist/lib/net/http.js +2 -1
  32. package/dist/lib/net/index.d.ts.map +1 -1
  33. package/dist/lib/net/index.js +2 -0
  34. package/dist/lib/net/pipeline.d.ts.map +1 -1
  35. package/dist/lib/net/pipeline.js +10 -9
  36. package/dist/lib/net/url.d.ts +1 -2
  37. package/dist/lib/net/url.d.ts.map +1 -1
  38. package/dist/lib/net/url.js +9 -6
  39. package/dist/lib/utils.d.ts +0 -16
  40. package/dist/lib/utils.d.ts.map +1 -1
  41. package/dist/lib/utils.js +3 -51
  42. package/dist/resources/index.d.ts.map +1 -1
  43. package/dist/resources/index.js +49 -22
  44. package/dist/schemas.d.ts +9 -1
  45. package/dist/schemas.d.ts.map +1 -1
  46. package/dist/schemas.js +1 -1
  47. package/dist/server.d.ts.map +1 -1
  48. package/dist/server.js +3 -1
  49. package/dist/tasks/index.d.ts.map +1 -1
  50. package/dist/tasks/index.js +2 -0
  51. package/dist/tasks/manager.d.ts +9 -106
  52. package/dist/tasks/manager.d.ts.map +1 -1
  53. package/dist/tasks/manager.js +200 -553
  54. package/dist/tasks/store.d.ts +104 -0
  55. package/dist/tasks/store.d.ts.map +1 -0
  56. package/dist/tasks/store.js +480 -0
  57. package/dist/tools/index.d.ts.map +1 -1
  58. package/dist/tools/index.js +5 -4
  59. package/dist/transform/index.d.ts +1 -85
  60. package/dist/transform/index.d.ts.map +1 -1
  61. package/dist/transform/index.js +312 -942
  62. package/dist/transform/worker-pool.d.ts +19 -0
  63. package/dist/transform/worker-pool.d.ts.map +1 -0
  64. package/dist/transform/worker-pool.js +713 -0
  65. 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",
@@ -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 { type RequestContext } from './native.js';
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(req: IncomingMessage): {
55
+ export declare function buildProtectedResourceMetadataDocument(): {
56
56
  resource: string;
57
57
  resource_metadata: string;
58
58
  authorization_servers: string[];
@@ -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;AAYjE,OAAO,EAEL,KAAK,cAAc,EAIpB,MAAM,aAAa,CAAC;AAMrB,cAAM,UAAU;IAId,MAAM,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO;CAuBrC;AAED,eAAO,MAAM,UAAU,YAAmB,CAAC;AAS3C,cAAM,sBAAuB,SAAQ,iBAAiB;IAElD,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE;gBAAjC,cAAc,EAAE,SAAS,MAAM,EAAE,EAC1C,OAAO,SAAuB;CAKjC;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,sBAAsB,CAEjC;AAwCD,cAAM,gBAAgB;IACpB,QAAQ,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO;IA6BtC,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,oBAAoB;IAqB5B,OAAO,CAAC,aAAa;IAsBrB,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,MAAM;CAoBf;AAED,eAAO,MAAM,gBAAgB,kBAAyB,CAAC;AAMvD,wBAAgB,2BAA2B,IAAI,IAAI,CAyBlD;AAMD,eAAO,MAAM,4BAA4B,eAAe,CAAC;AACzD,eAAO,MAAM,+BAA+B,aAE1C,CAAC;AAEH,UAAU,8BAA8B;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAUD,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,OAAO,CAAC,EAAE,8BAA8B,GACvC,OAAO,CA2DT;AAED,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAQD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,QAAQ,GAAG,SAAS,GACzB,MAAM,GAAG,IAAI,CAWf;AAiBD,cAAM,WAAW;IACf,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAEjC;IAEF,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA0C;IAEvE,YAAY,CAChB,GAAG,EAAE,eAAe,EACpB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,QAAQ,CAAC;IAwBpB,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,sBAAsB;IA6B9B,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,uBAAuB;IAgB/B,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,CAAC,mBAAmB;IA+B3B,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,yBAAyB;YA0BnB,oBAAoB;IAiClC,OAAO,CAAC,0BAA0B;IAmBlC,OAAO,CAAC,oBAAoB;YAiBd,uBAAuB;IA2DrC,OAAO,CAAC,iBAAiB;CAa1B;AA+BD,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,GAClB,IAAI,CAUN;AAED,wBAAgB,iCAAiC,CAC/C,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,cAAc,EAAE,SAAS,MAAM,EAAE,EACjC,OAAO,SAA+C,GACrD,IAAI,CAYN;AAED,wBAAgB,sCAAsC,CAAC,GAAG,EAAE,eAAe,GAAG;IAC5E,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B,CAgBA;AAED,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAKzE;AAED,eAAO,MAAM,WAAW,aAAoB,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, logDebug, Loggers, logWarn } from '../lib/core.js';
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, parseUrlOrNull, timingSafeEqualUtf8, } from '../lib/utils.js';
6
- import { getHeaderValue, sendEmpty, sendError, sendJson, } from './native.js';
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 = parseUrlOrNull(`${scheme}://${hostHeader}`);
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 = parseUrlOrNull(origin);
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(req) {
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(req) {
493
- const origin = resolvePublicOrigin(req);
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(req) {
503
- return buildRequestScopedProtectedResourceUrls(req).resourceMetadata;
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(req);
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(req);
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(req) {
528
- const urls = buildRequestScopedProtectedResourceUrls(req);
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;
@@ -1,6 +1,4 @@
1
1
  export * from './auth.js';
2
2
  export * from './native.js';
3
- export * from './native.js';
4
- export * from './native.js';
5
3
  export * from './rate-limit.js';
6
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/http/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC"}
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"}
@@ -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';
@@ -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, _code: number, message: string, status?: number, _id?: JsonRpcId | null): void;
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":"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"}
1
+ {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/http/native.ts"],"names":[],"mappings":"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"}