@paretools/http 0.8.5 → 0.9.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.
@@ -4,6 +4,6 @@ import { run } from "@paretools/shared";
4
4
  * Uses a generous timeout since HTTP requests can be slow.
5
5
  */
6
6
  export async function curlCmd(args, cwd) {
7
- return run("curl", args, { cwd, timeout: 120_000 });
7
+ return run("curl", args, { cwd, timeout: 180_000 });
8
8
  }
9
9
  //# sourceMappingURL=curl-runner.js.map
@@ -7,7 +7,11 @@ export declare function formatHttpHeadResponse(data: HttpHeadResponse): string;
7
7
  export declare function compactResponseMap(data: HttpResponse): HttpResponseCompact;
8
8
  /** Formats compact HTTP response. */
9
9
  export declare function formatResponseCompact(data: HttpResponseCompact): string;
10
- /** Maps full HEAD response to compact form (drop headers). */
10
+ /**
11
+ * Maps full HEAD response to compact form.
12
+ * Preserves essential headers (content-length, cache-control, etag, last-modified, content-type)
13
+ * even in compact mode, since HEAD responses are primarily about headers.
14
+ */
11
15
  export declare function compactHeadResponseMap(data: HttpHeadResponse): HttpHeadResponseCompact;
12
16
  /** Formats compact HEAD response. */
13
17
  export declare function formatHeadResponseCompact(data: HttpHeadResponseCompact): string;
@@ -1 +1 @@
1
- {"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../src/lib/formatters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACxB,MAAM,qBAAqB,CAAC;AAE7B,6DAA6D;AAC7D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CA0B7D;AAED,wDAAwD;AACxD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAoBrE;AAID,uEAAuE;AACvE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,mBAAmB,CAQ1E;AAED,qCAAqC;AACrC,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAGvE;AAED,8DAA8D;AAC9D,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,gBAAgB,GAAG,uBAAuB,CAOtF;AAED,qCAAqC;AACrC,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,uBAAuB,GAAG,MAAM,CAG/E"}
1
+ {"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../src/lib/formatters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EAExB,MAAM,qBAAqB,CAAC;AAyB7B,6DAA6D;AAC7D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CA0B7D;AAED,wDAAwD;AACxD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAwBrE;AAID,uEAAuE;AACvE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,mBAAmB,CAQ1E;AAED,qCAAqC;AACrC,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAGvE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,gBAAgB,GAAG,uBAAuB,CAkBtF;AAED,qCAAqC;AACrC,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,uBAAuB,GAAG,MAAM,CAkB/E"}
@@ -1,3 +1,25 @@
1
+ import { HEAD_ESSENTIAL_HEADERS } from "../schemas/index.js";
2
+ /** Formats timing details into a human-readable string. */
3
+ function formatTimingLine(timing) {
4
+ let line = `Time: ${timing.total.toFixed(3)}s`;
5
+ if (timing.details) {
6
+ const d = timing.details;
7
+ const parts = [];
8
+ parts.push(`dns=${d.namelookup.toFixed(3)}s`);
9
+ parts.push(`tcp=${d.connect.toFixed(3)}s`);
10
+ if (d.appconnect !== undefined) {
11
+ parts.push(`tls=${d.appconnect.toFixed(3)}s`);
12
+ }
13
+ if (d.pretransfer !== undefined) {
14
+ parts.push(`pre=${d.pretransfer.toFixed(3)}s`);
15
+ }
16
+ if (d.starttransfer !== undefined) {
17
+ parts.push(`ttfb=${d.starttransfer.toFixed(3)}s`);
18
+ }
19
+ line += ` (${parts.join(", ")})`;
20
+ }
21
+ return line;
22
+ }
1
23
  /** Formats a full HTTP response into human-readable text. */
2
24
  export function formatHttpResponse(data) {
3
25
  const lines = [];
@@ -5,7 +27,7 @@ export function formatHttpResponse(data) {
5
27
  if (data.contentType) {
6
28
  lines.push(`Content-Type: ${data.contentType}`);
7
29
  }
8
- lines.push(`Size: ${data.size} bytes | Time: ${data.timing.total.toFixed(3)}s`);
30
+ lines.push(`Size: ${data.size} bytes | ${formatTimingLine(data.timing)}`);
9
31
  const headers = data.headers ?? {};
10
32
  const headerCount = Object.keys(headers).length;
11
33
  lines.push(`Headers: ${headerCount}`);
@@ -26,7 +48,10 @@ export function formatHttpHeadResponse(data) {
26
48
  if (data.contentType) {
27
49
  lines.push(`Content-Type: ${data.contentType}`);
28
50
  }
29
- lines.push(`Time: ${data.timing.total.toFixed(3)}s`);
51
+ if (data.contentLength !== undefined) {
52
+ lines.push(`Content-Length: ${data.contentLength}`);
53
+ }
54
+ lines.push(formatTimingLine(data.timing));
30
55
  const headers = data.headers ?? {};
31
56
  const headerCount = Object.keys(headers).length;
32
57
  lines.push(`Headers: ${headerCount}`);
@@ -51,18 +76,45 @@ export function formatResponseCompact(data) {
51
76
  const ct = data.contentType ? ` (${data.contentType})` : "";
52
77
  return `HTTP ${data.status} ${data.statusText}${ct} | ${data.size} bytes | ${data.timing.total.toFixed(3)}s`;
53
78
  }
54
- /** Maps full HEAD response to compact form (drop headers). */
79
+ /**
80
+ * Maps full HEAD response to compact form.
81
+ * Preserves essential headers (content-length, cache-control, etag, last-modified, content-type)
82
+ * even in compact mode, since HEAD responses are primarily about headers.
83
+ */
55
84
  export function compactHeadResponseMap(data) {
85
+ const headers = data.headers ?? {};
86
+ const essential = {};
87
+ for (const key of HEAD_ESSENTIAL_HEADERS) {
88
+ if (headers[key] !== undefined) {
89
+ essential[key] = headers[key];
90
+ }
91
+ }
56
92
  return {
57
93
  status: data.status,
58
94
  statusText: data.statusText,
59
95
  contentType: data.contentType,
96
+ contentLength: data.contentLength,
60
97
  timing: data.timing,
98
+ ...(Object.keys(essential).length > 0 ? { essentialHeaders: essential } : {}),
61
99
  };
62
100
  }
63
101
  /** Formats compact HEAD response. */
64
102
  export function formatHeadResponseCompact(data) {
65
103
  const ct = data.contentType ? ` (${data.contentType})` : "";
66
- return `HTTP ${data.status} ${data.statusText}${ct} | ${data.timing.total.toFixed(3)}s`;
104
+ const cl = data.contentLength !== undefined ? ` | ${data.contentLength} bytes` : "";
105
+ let line = `HTTP ${data.status} ${data.statusText}${ct}${cl} | ${data.timing.total.toFixed(3)}s`;
106
+ if (data.essentialHeaders && Object.keys(data.essentialHeaders).length > 0) {
107
+ const headerParts = [];
108
+ for (const [key, value] of Object.entries(data.essentialHeaders)) {
109
+ // Skip content-type (already shown) and content-length (already shown as bytes)
110
+ if (key === "content-type" || key === "content-length")
111
+ continue;
112
+ headerParts.push(`${key}: ${value}`);
113
+ }
114
+ if (headerParts.length > 0) {
115
+ line += "\n " + headerParts.join("\n ");
116
+ }
117
+ }
118
+ return line;
67
119
  }
68
120
  //# sourceMappingURL=formatters.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/lib/formatters.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/lib/formatters.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,2DAA2D;AAC3D,SAAS,gBAAgB,CAAC,MAAkB;IAC1C,IAAI,IAAI,GAAG,SAAS,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;QACzB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,CAAC,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IACnC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,kBAAkB,CAAC,IAAkB;IACnD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IAErD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,YAAY,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAE1E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IACnC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IAChD,KAAK,CAAC,IAAI,CAAC,YAAY,WAAW,EAAE,CAAC,CAAC;IAEtC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7F,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,sBAAsB,CAAC,IAAsB;IAC3D,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IAErD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAE1C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IACnC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IAChD,KAAK,CAAC,IAAI,CAAC,YAAY,WAAW,EAAE,CAAC,CAAC;IAEtC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,wEAAwE;AAExE,uEAAuE;AACvE,MAAM,UAAU,kBAAkB,CAAC,IAAkB;IACnD,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC;AACJ,CAAC;AAED,qCAAqC;AACrC,MAAM,UAAU,qBAAqB,CAAC,IAAyB;IAC7D,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,OAAO,QAAQ,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE,MAAM,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AAC/G,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAsB;IAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IACnC,MAAM,SAAS,GAA2B,EAAE,CAAC;IAE7C,KAAK,MAAM,GAAG,IAAI,sBAAsB,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;YAC/B,SAAS,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9E,CAAC;AACJ,CAAC;AAED,qCAAqC;AACrC,MAAM,UAAU,yBAAyB,CAAC,IAA6B;IACrE,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACpF,IAAI,IAAI,GAAG,QAAQ,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE,GAAG,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAEjG,IAAI,IAAI,CAAC,gBAAgB,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3E,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACjE,gFAAgF;YAChF,IAAI,GAAG,KAAK,cAAc,IAAI,GAAG,KAAK,gBAAgB;gBAAE,SAAS;YACjE,WAAW,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,IAAI,IAAI,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -11,7 +11,7 @@ export declare const PARE_META_SEPARATOR = "---PARE_HTTP_META---";
11
11
  * \r\n
12
12
  * <body>
13
13
  * \n---PARE_HTTP_META---\n
14
- * <time_total> <size_download>
14
+ * <time_total> <size_download> <time_namelookup> <time_connect> <time_appconnect> <time_pretransfer> <time_starttransfer>
15
15
  *
16
16
  * When following redirects, multiple status+header blocks may appear.
17
17
  * We parse the LAST one (the final response).
@@ -19,6 +19,7 @@ export declare const PARE_META_SEPARATOR = "---PARE_HTTP_META---";
19
19
  export declare function parseCurlOutput(stdout: string, _stderr: string, _exitCode: number): HttpResponse;
20
20
  /**
21
21
  * Parses curl output for HEAD requests (no body expected).
22
+ * Extracts contentLength as a numeric field from the Content-Length header.
22
23
  */
23
24
  export declare function parseCurlHeadOutput(stdout: string, stderr: string, exitCode: number): HttpHeadResponse;
24
25
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"parsers.d.ts","sourceRoot":"","sources":["../../src/lib/parsers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE1E,oEAAoE;AACpE,eAAO,MAAM,mBAAmB,yBAAyB,CAAC;AAU1D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,CA+BhG;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,gBAAgB,CAUlB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAsBrD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;CACd,CA0CA"}
1
+ {"version":3,"file":"parsers.d.ts","sourceRoot":"","sources":["../../src/lib/parsers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAiB,MAAM,qBAAqB,CAAC;AAEzF,oEAAoE;AACpE,eAAO,MAAM,mBAAmB,yBAAyB,CAAC;AAe1D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,CAoChG;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,gBAAgB,CAsBlB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAsBrD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;CACd,CA0CA"}
@@ -10,7 +10,7 @@ export const PARE_META_SEPARATOR = "---PARE_HTTP_META---";
10
10
  * \r\n
11
11
  * <body>
12
12
  * \n---PARE_HTTP_META---\n
13
- * <time_total> <size_download>
13
+ * <time_total> <size_download> <time_namelookup> <time_connect> <time_appconnect> <time_pretransfer> <time_starttransfer>
14
14
  *
15
15
  * When following redirects, multiple status+header blocks may appear.
16
16
  * We parse the LAST one (the final response).
@@ -31,27 +31,43 @@ export function parseCurlOutput(stdout, _stderr, _exitCode) {
31
31
  const lastBlock = blocks.length > 0 ? blocks[blocks.length - 1] : responsePart;
32
32
  const { status, statusText, headers, body } = parseHttpBlock(lastBlock);
33
33
  const contentType = headers["content-type"];
34
+ const timingDetails = buildTimingDetails(meta);
34
35
  return {
35
36
  status,
36
37
  statusText,
37
38
  headers,
38
39
  body: body || undefined,
39
- timing: { total: meta.time_total },
40
+ timing: {
41
+ total: meta.time_total,
42
+ ...(timingDetails ? { details: timingDetails } : {}),
43
+ },
40
44
  size: meta.size_download,
41
45
  contentType,
42
46
  };
43
47
  }
44
48
  /**
45
49
  * Parses curl output for HEAD requests (no body expected).
50
+ * Extracts contentLength as a numeric field from the Content-Length header.
46
51
  */
47
52
  export function parseCurlHeadOutput(stdout, stderr, exitCode) {
48
53
  const full = parseCurlOutput(stdout, stderr, exitCode);
54
+ // Extract Content-Length as a numeric field for easy size checking
55
+ const headers = full.headers ?? {};
56
+ const clHeader = headers["content-length"];
57
+ let contentLength;
58
+ if (clHeader !== undefined) {
59
+ const parsed = parseInt(clHeader, 10);
60
+ if (!isNaN(parsed) && parsed >= 0) {
61
+ contentLength = parsed;
62
+ }
63
+ }
49
64
  return {
50
65
  status: full.status,
51
66
  statusText: full.statusText,
52
67
  headers: full.headers,
53
68
  timing: full.timing,
54
69
  contentType: full.contentType,
70
+ contentLength,
55
71
  };
56
72
  }
57
73
  /**
@@ -117,15 +133,51 @@ export function parseHttpBlock(block) {
117
133
  body = body.replace(/\n$/, "");
118
134
  return { status, statusText, headers, body };
119
135
  }
136
+ /**
137
+ * Builds a TimingDetails object from the parsed meta section.
138
+ * Returns undefined if all timing values are zero (no real timing data available).
139
+ */
140
+ function buildTimingDetails(meta) {
141
+ // If namelookup and connect are both 0, we likely have no timing data
142
+ // (e.g. old format or no metadata)
143
+ if (meta.time_namelookup === 0 && meta.time_connect === 0 && meta.time_starttransfer === 0) {
144
+ return undefined;
145
+ }
146
+ const details = {
147
+ namelookup: meta.time_namelookup,
148
+ connect: meta.time_connect,
149
+ };
150
+ // Only include appconnect when it has a meaningful value (> 0 means TLS was used)
151
+ if (meta.time_appconnect > 0) {
152
+ details.appconnect = meta.time_appconnect;
153
+ }
154
+ // Only include pretransfer when available
155
+ if (meta.time_pretransfer > 0) {
156
+ details.pretransfer = meta.time_pretransfer;
157
+ }
158
+ // Only include starttransfer when available
159
+ if (meta.time_starttransfer > 0) {
160
+ details.starttransfer = meta.time_starttransfer;
161
+ }
162
+ return details;
163
+ }
120
164
  /**
121
165
  * Parses the metadata section appended by curl's -w format string.
122
- * Format: "<time_total> <size_download>"
166
+ * Format: "<time_total> <size_download> <time_namelookup> <time_connect> <time_appconnect> <time_pretransfer> <time_starttransfer>"
167
+ *
168
+ * For backward compatibility, also handles the old 2-field format:
169
+ * "<time_total> <size_download>"
123
170
  */
124
171
  function parseMetaSection(meta) {
125
172
  const parts = meta.trim().split(/\s+/);
126
173
  return {
127
174
  time_total: parts[0] ? parseFloat(parts[0]) : 0,
128
175
  size_download: parts[1] ? parseFloat(parts[1]) : 0,
176
+ time_namelookup: parts[2] ? parseFloat(parts[2]) : 0,
177
+ time_connect: parts[3] ? parseFloat(parts[3]) : 0,
178
+ time_appconnect: parts[4] ? parseFloat(parts[4]) : 0,
179
+ time_pretransfer: parts[5] ? parseFloat(parts[5]) : 0,
180
+ time_starttransfer: parts[6] ? parseFloat(parts[6]) : 0,
129
181
  };
130
182
  }
131
183
  //# sourceMappingURL=parsers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parsers.js","sourceRoot":"","sources":["../../src/lib/parsers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parsers.js","sourceRoot":"","sources":["../../src/lib/parsers.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,27 @@
1
1
  import { z } from "zod";
2
2
  /** Zod schema for a single HTTP header key-value pair as a record. */
3
3
  export declare const HttpHeadersSchema: z.ZodRecord<z.ZodString, z.ZodString>;
4
+ /** Zod schema for expanded timing details from curl's -w format variables. */
5
+ export declare const TimingDetailsSchema: z.ZodObject<{
6
+ namelookup: z.ZodNumber;
7
+ connect: z.ZodNumber;
8
+ appconnect: z.ZodOptional<z.ZodNumber>;
9
+ pretransfer: z.ZodOptional<z.ZodNumber>;
10
+ starttransfer: z.ZodOptional<z.ZodNumber>;
11
+ }, z.core.$strip>;
12
+ export type TimingDetails = z.infer<typeof TimingDetailsSchema>;
4
13
  /** Zod schema for HTTP timing information. */
5
14
  export declare const HttpTimingSchema: z.ZodObject<{
6
15
  total: z.ZodNumber;
16
+ details: z.ZodOptional<z.ZodObject<{
17
+ namelookup: z.ZodNumber;
18
+ connect: z.ZodNumber;
19
+ appconnect: z.ZodOptional<z.ZodNumber>;
20
+ pretransfer: z.ZodOptional<z.ZodNumber>;
21
+ starttransfer: z.ZodOptional<z.ZodNumber>;
22
+ }, z.core.$strip>>;
7
23
  }, z.core.$strip>;
24
+ export type HttpTiming = z.infer<typeof HttpTimingSchema>;
8
25
  /** Zod schema for the full HTTP response result (used by request, get, post). */
9
26
  export declare const HttpResponseSchema: z.ZodObject<{
10
27
  status: z.ZodNumber;
@@ -13,6 +30,13 @@ export declare const HttpResponseSchema: z.ZodObject<{
13
30
  body: z.ZodOptional<z.ZodString>;
14
31
  timing: z.ZodObject<{
15
32
  total: z.ZodNumber;
33
+ details: z.ZodOptional<z.ZodObject<{
34
+ namelookup: z.ZodNumber;
35
+ connect: z.ZodNumber;
36
+ appconnect: z.ZodOptional<z.ZodNumber>;
37
+ pretransfer: z.ZodOptional<z.ZodNumber>;
38
+ starttransfer: z.ZodOptional<z.ZodNumber>;
39
+ }, z.core.$strip>>;
16
40
  }, z.core.$strip>;
17
41
  size: z.ZodNumber;
18
42
  contentType: z.ZodOptional<z.ZodString>;
@@ -25,8 +49,16 @@ export declare const HttpHeadResponseSchema: z.ZodObject<{
25
49
  headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
26
50
  timing: z.ZodObject<{
27
51
  total: z.ZodNumber;
52
+ details: z.ZodOptional<z.ZodObject<{
53
+ namelookup: z.ZodNumber;
54
+ connect: z.ZodNumber;
55
+ appconnect: z.ZodOptional<z.ZodNumber>;
56
+ pretransfer: z.ZodOptional<z.ZodNumber>;
57
+ starttransfer: z.ZodOptional<z.ZodNumber>;
58
+ }, z.core.$strip>>;
28
59
  }, z.core.$strip>;
29
60
  contentType: z.ZodOptional<z.ZodString>;
61
+ contentLength: z.ZodOptional<z.ZodNumber>;
30
62
  }, z.core.$strip>;
31
63
  export type HttpHeadResponse = z.infer<typeof HttpHeadResponseSchema>;
32
64
  /** Compact response: status, timing, size. Drop headers and body. */
@@ -37,17 +69,39 @@ export declare const HttpResponseCompactSchema: z.ZodObject<{
37
69
  size: z.ZodNumber;
38
70
  timing: z.ZodObject<{
39
71
  total: z.ZodNumber;
72
+ details: z.ZodOptional<z.ZodObject<{
73
+ namelookup: z.ZodNumber;
74
+ connect: z.ZodNumber;
75
+ appconnect: z.ZodOptional<z.ZodNumber>;
76
+ pretransfer: z.ZodOptional<z.ZodNumber>;
77
+ starttransfer: z.ZodOptional<z.ZodNumber>;
78
+ }, z.core.$strip>>;
40
79
  }, z.core.$strip>;
41
80
  }, z.core.$strip>;
42
81
  export type HttpResponseCompact = z.infer<typeof HttpResponseCompactSchema>;
43
- /** Compact HEAD response: status and timing only. Drop headers. */
82
+ /**
83
+ * Compact HEAD response: status, timing, and key headers.
84
+ * Retains essential headers even in compact mode: content-length, cache-control,
85
+ * etag, last-modified, content-type.
86
+ */
44
87
  export declare const HttpHeadResponseCompactSchema: z.ZodObject<{
45
88
  status: z.ZodNumber;
46
89
  statusText: z.ZodString;
47
90
  contentType: z.ZodOptional<z.ZodString>;
91
+ contentLength: z.ZodOptional<z.ZodNumber>;
48
92
  timing: z.ZodObject<{
49
93
  total: z.ZodNumber;
94
+ details: z.ZodOptional<z.ZodObject<{
95
+ namelookup: z.ZodNumber;
96
+ connect: z.ZodNumber;
97
+ appconnect: z.ZodOptional<z.ZodNumber>;
98
+ pretransfer: z.ZodOptional<z.ZodNumber>;
99
+ starttransfer: z.ZodOptional<z.ZodNumber>;
100
+ }, z.core.$strip>>;
50
101
  }, z.core.$strip>;
102
+ essentialHeaders: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
51
103
  }, z.core.$strip>;
52
104
  export type HttpHeadResponseCompact = z.infer<typeof HttpHeadResponseCompactSchema>;
105
+ /** Headers that should be preserved in HEAD compact mode. */
106
+ export declare const HEAD_ESSENTIAL_HEADERS: readonly ["content-length", "cache-control", "etag", "last-modified", "content-type"];
53
107
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,sEAAsE;AACtE,eAAO,MAAM,iBAAiB,uCAAmC,CAAC;AAElE,8CAA8C;AAC9C,eAAO,MAAM,gBAAgB;;iBAE3B,CAAC;AAEH,iFAAiF;AACjF,eAAO,MAAM,kBAAkB;;;;;;;;;;iBAQ7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,mEAAmE;AACnE,eAAO,MAAM,sBAAsB;;;;;;;;iBAMjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,qEAAqE;AACrE,eAAO,MAAM,yBAAyB;;;;;;;;iBAMpC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,mEAAmE;AACnE,eAAO,MAAM,6BAA6B;;;;;;;iBAKxC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,sEAAsE;AACtE,eAAO,MAAM,iBAAiB,uCAAmC,CAAC;AAElE,8EAA8E;AAC9E,eAAO,MAAM,mBAAmB;;;;;;iBAe9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,8CAA8C;AAC9C,eAAO,MAAM,gBAAgB;;;;;;;;;iBAG3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,iFAAiF;AACjF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;iBAQ7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,mEAAmE;AACnE,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;iBAOjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,qEAAqE;AACrE,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;iBAMpC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E;;;;GAIG;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;iBAOxC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEpF,6DAA6D;AAC7D,eAAO,MAAM,sBAAsB,uFAMzB,CAAC"}
@@ -1,9 +1,27 @@
1
1
  import { z } from "zod";
2
2
  /** Zod schema for a single HTTP header key-value pair as a record. */
3
3
  export const HttpHeadersSchema = z.record(z.string(), z.string());
4
+ /** Zod schema for expanded timing details from curl's -w format variables. */
5
+ export const TimingDetailsSchema = z.object({
6
+ namelookup: z.number().describe("Time from start until DNS resolution completed (seconds)"),
7
+ connect: z.number().describe("Time from start until TCP connection established (seconds)"),
8
+ appconnect: z
9
+ .number()
10
+ .optional()
11
+ .describe("Time from start until TLS handshake completed (seconds)"),
12
+ pretransfer: z
13
+ .number()
14
+ .optional()
15
+ .describe("Time from start until just before transfer begins (seconds)"),
16
+ starttransfer: z
17
+ .number()
18
+ .optional()
19
+ .describe("Time from start until first response byte received (seconds)"),
20
+ });
4
21
  /** Zod schema for HTTP timing information. */
5
22
  export const HttpTimingSchema = z.object({
6
23
  total: z.number(),
24
+ details: TimingDetailsSchema.optional(),
7
25
  });
8
26
  /** Zod schema for the full HTTP response result (used by request, get, post). */
9
27
  export const HttpResponseSchema = z.object({
@@ -22,6 +40,7 @@ export const HttpHeadResponseSchema = z.object({
22
40
  headers: HttpHeadersSchema.optional(),
23
41
  timing: HttpTimingSchema,
24
42
  contentType: z.string().optional(),
43
+ contentLength: z.number().optional(),
25
44
  });
26
45
  /** Compact response: status, timing, size. Drop headers and body. */
27
46
  export const HttpResponseCompactSchema = z.object({
@@ -31,11 +50,25 @@ export const HttpResponseCompactSchema = z.object({
31
50
  size: z.number(),
32
51
  timing: HttpTimingSchema,
33
52
  });
34
- /** Compact HEAD response: status and timing only. Drop headers. */
53
+ /**
54
+ * Compact HEAD response: status, timing, and key headers.
55
+ * Retains essential headers even in compact mode: content-length, cache-control,
56
+ * etag, last-modified, content-type.
57
+ */
35
58
  export const HttpHeadResponseCompactSchema = z.object({
36
59
  status: z.number(),
37
60
  statusText: z.string(),
38
61
  contentType: z.string().optional(),
62
+ contentLength: z.number().optional(),
39
63
  timing: HttpTimingSchema,
64
+ essentialHeaders: HttpHeadersSchema.optional(),
40
65
  });
66
+ /** Headers that should be preserved in HEAD compact mode. */
67
+ export const HEAD_ESSENTIAL_HEADERS = [
68
+ "content-length",
69
+ "cache-control",
70
+ "etag",
71
+ "last-modified",
72
+ "content-type",
73
+ ];
41
74
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,sEAAsE;AACtE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAElE,8CAA8C;AAC9C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;CAClB,CAAC,CAAC;AAEH,iFAAiF;AACjF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,OAAO,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACrC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,MAAM,EAAE,gBAAgB;IACxB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAC;AAIH,mEAAmE;AACnE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,OAAO,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACrC,MAAM,EAAE,gBAAgB;IACxB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAC;AAIH,qEAAqE;AACrE,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,MAAM,EAAE,gBAAgB;CACzB,CAAC,CAAC;AAIH,mEAAmE;AACnE,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IACpD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,MAAM,EAAE,gBAAgB;CACzB,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../src/tools/get.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,wDAAwD;AACxD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,QAwEhD"}
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../src/tools/get.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAezE,wDAAwD;AACxD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,QAkKhD"}
package/dist/tools/get.js CHANGED
@@ -1,11 +1,12 @@
1
1
  import { z } from "zod";
2
- import { compactDualOutput, INPUT_LIMITS } from "@paretools/shared";
2
+ import { compactDualOutput, assertNoFlagInjection, INPUT_LIMITS } from "@paretools/shared";
3
3
  import { curlCmd } from "../lib/curl-runner.js";
4
4
  import { parseCurlOutput } from "../lib/parsers.js";
5
5
  import { formatHttpResponse, compactResponseMap, formatResponseCompact, } from "../lib/formatters.js";
6
6
  import { HttpResponseSchema } from "../schemas/index.js";
7
7
  import { assertSafeUrl } from "../lib/url-validation.js";
8
8
  import { buildCurlArgs } from "./request.js";
9
+ const HTTP_VERSIONS = ["1.0", "1.1", "2"];
9
10
  /** Registers the `get` tool on the given MCP server. */
10
11
  export function registerGetTool(server) {
11
12
  server.registerTool("get", {
@@ -27,11 +28,54 @@ export function registerGetTool(server) {
27
28
  .optional()
28
29
  .default(30)
29
30
  .describe("Request timeout in seconds (default: 30)"),
31
+ connectTimeout: z
32
+ .number()
33
+ .min(1)
34
+ .max(300)
35
+ .optional()
36
+ .describe("Maximum time in seconds for connection phase only (--connect-timeout). Detects connection failures fast."),
30
37
  followRedirects: z
31
38
  .boolean()
32
39
  .optional()
33
40
  .default(true)
34
41
  .describe("Follow HTTP redirects (default: true)"),
42
+ insecure: z
43
+ .boolean()
44
+ .optional()
45
+ .describe("Allow insecure TLS connections, e.g. self-signed certificates (-k)"),
46
+ retry: z
47
+ .number()
48
+ .min(0)
49
+ .max(10)
50
+ .optional()
51
+ .describe("Number of retries on transient failures (--retry)"),
52
+ compressed: z
53
+ .boolean()
54
+ .optional()
55
+ .describe("Request compressed response and decompress automatically (--compressed)"),
56
+ basicAuth: z
57
+ .string()
58
+ .max(INPUT_LIMITS.STRING_MAX)
59
+ .optional()
60
+ .describe("Basic auth credentials as 'user:password' (-u)"),
61
+ proxy: z
62
+ .string()
63
+ .max(INPUT_LIMITS.STRING_MAX)
64
+ .optional()
65
+ .describe("Proxy URL (e.g., http://proxy:8080) (-x)"),
66
+ queryParams: z
67
+ .record(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX), z.string().max(INPUT_LIMITS.STRING_MAX))
68
+ .optional()
69
+ .describe("Query parameters as key-value pairs. URL-encoded and appended to the URL automatically."),
70
+ httpVersion: z
71
+ .enum(HTTP_VERSIONS)
72
+ .optional()
73
+ .describe("HTTP version to use: '1.0', '1.1', or '2' (--http1.0/--http1.1/--http2)"),
74
+ resolve: z
75
+ .string()
76
+ .max(INPUT_LIMITS.STRING_MAX)
77
+ .optional()
78
+ .describe("Custom DNS resolution (--resolve). Format: 'host:port:addr' (e.g., 'example.com:443:127.0.0.1')"),
35
79
  compact: z
36
80
  .boolean()
37
81
  .optional()
@@ -44,14 +88,38 @@ export function registerGetTool(server) {
44
88
  .describe("Working directory (default: cwd)"),
45
89
  },
46
90
  outputSchema: HttpResponseSchema,
47
- }, async ({ url, headers, timeout, followRedirects, compact, path }) => {
48
- assertSafeUrl(url);
91
+ }, async ({ url, headers, timeout, connectTimeout, followRedirects, insecure, retry, compressed, basicAuth, proxy, queryParams, httpVersion, resolve, compact, path, }) => {
92
+ // Build URL with query params if provided
93
+ let finalUrl = url;
94
+ if (queryParams && Object.keys(queryParams).length > 0) {
95
+ const params = new URLSearchParams();
96
+ for (const [key, value] of Object.entries(queryParams)) {
97
+ params.append(key, value);
98
+ }
99
+ const separator = url.includes("?") ? "&" : "?";
100
+ finalUrl = `${url}${separator}${params.toString()}`;
101
+ }
102
+ assertSafeUrl(finalUrl);
103
+ if (basicAuth)
104
+ assertNoFlagInjection(basicAuth, "basicAuth");
105
+ if (proxy)
106
+ assertNoFlagInjection(proxy, "proxy");
107
+ if (resolve)
108
+ assertNoFlagInjection(resolve, "resolve");
49
109
  const args = buildCurlArgs({
50
- url,
110
+ url: finalUrl,
51
111
  method: "GET",
52
112
  headers,
53
113
  timeout: timeout ?? 30,
114
+ connectTimeout,
54
115
  followRedirects: followRedirects ?? true,
116
+ insecure,
117
+ retry,
118
+ compressed,
119
+ basicAuth,
120
+ proxy,
121
+ httpVersion,
122
+ resolve,
55
123
  });
56
124
  const cwd = path || process.cwd();
57
125
  const result = await curlCmd(args, cwd);
@@ -1 +1 @@
1
- {"version":3,"file":"get.js","sourceRoot":"","sources":["../../src/tools/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,wDAAwD;AACxD,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC/C,MAAM,CAAC,YAAY,CACjB,KAAK,EACL;QACE,KAAK,EAAE,UAAU;QACjB,WAAW,EACT,oHAAoH;QACtH,WAAW,EAAE;YACX,GAAG,EAAE,CAAC;iBACH,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC;iBAC5B,QAAQ,CAAC,+CAA+C,CAAC;YAC5D,OAAO,EAAE,CAAC;iBACP,MAAM,CACL,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAC7C,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,CACxC;iBACA,QAAQ,EAAE;iBACV,QAAQ,CAAC,oCAAoC,CAAC;YACjD,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,EAAE;iBACV,OAAO,CAAC,EAAE,CAAC;iBACX,QAAQ,CAAC,0CAA0C,CAAC;YACvD,eAAe,EAAE,CAAC;iBACf,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CAAC,uCAAuC,CAAC;YACpD,OAAO,EAAE,CAAC;iBACP,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CACP,kGAAkG,CACnG;YACH,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC;iBAC1B,QAAQ,EAAE;iBACV,QAAQ,CAAC,kCAAkC,CAAC;SAChD;QACD,YAAY,EAAE,kBAAkB;KACjC,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;QAClE,aAAa,CAAC,GAAG,CAAC,CAAC;QAEnB,MAAM,IAAI,GAAG,aAAa,CAAC;YACzB,GAAG;YACH,MAAM,EAAE,KAAK;YACb,OAAO;YACP,OAAO,EAAE,OAAO,IAAI,EAAE;YACtB,eAAe,EAAE,eAAe,IAAI,IAAI;SACzC,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5E,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAEhE,OAAO,iBAAiB,CACtB,IAAI,EACJ,SAAS,EACT,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,OAAO,KAAK,KAAK,CAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../src/tools/get.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"head.d.ts","sourceRoot":"","sources":["../../src/tools/head.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,yDAAyD;AACzD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,QAwEjD"}
1
+ {"version":3,"file":"head.d.ts","sourceRoot":"","sources":["../../src/tools/head.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAezE,yDAAyD;AACzD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,QAwIjD"}
@@ -1,11 +1,12 @@
1
1
  import { z } from "zod";
2
- import { compactDualOutput, INPUT_LIMITS } from "@paretools/shared";
2
+ import { compactDualOutput, assertNoFlagInjection, INPUT_LIMITS } from "@paretools/shared";
3
3
  import { curlCmd } from "../lib/curl-runner.js";
4
4
  import { parseCurlHeadOutput } from "../lib/parsers.js";
5
5
  import { formatHttpHeadResponse, compactHeadResponseMap, formatHeadResponseCompact, } from "../lib/formatters.js";
6
6
  import { HttpHeadResponseSchema } from "../schemas/index.js";
7
7
  import { assertSafeUrl } from "../lib/url-validation.js";
8
8
  import { buildCurlArgs } from "./request.js";
9
+ const HTTP_VERSIONS = ["1.0", "1.1", "2"];
9
10
  /** Registers the `head` tool on the given MCP server. */
10
11
  export function registerHeadTool(server) {
11
12
  server.registerTool("head", {
@@ -27,11 +28,46 @@ export function registerHeadTool(server) {
27
28
  .optional()
28
29
  .default(30)
29
30
  .describe("Request timeout in seconds (default: 30)"),
31
+ connectTimeout: z
32
+ .number()
33
+ .min(1)
34
+ .max(300)
35
+ .optional()
36
+ .describe("Maximum time in seconds for connection phase only (--connect-timeout). Fast failure for availability probing."),
30
37
  followRedirects: z
31
38
  .boolean()
32
39
  .optional()
33
40
  .default(true)
34
41
  .describe("Follow HTTP redirects (default: true)"),
42
+ insecure: z
43
+ .boolean()
44
+ .optional()
45
+ .describe("Allow insecure TLS connections, e.g. self-signed certificates (-k)"),
46
+ retry: z
47
+ .number()
48
+ .min(0)
49
+ .max(10)
50
+ .optional()
51
+ .describe("Number of retries on transient failures (--retry)"),
52
+ basicAuth: z
53
+ .string()
54
+ .max(INPUT_LIMITS.STRING_MAX)
55
+ .optional()
56
+ .describe("Basic auth credentials as 'user:password' (-u)"),
57
+ proxy: z
58
+ .string()
59
+ .max(INPUT_LIMITS.STRING_MAX)
60
+ .optional()
61
+ .describe("Proxy URL (e.g., http://proxy:8080) (-x)"),
62
+ httpVersion: z
63
+ .enum(HTTP_VERSIONS)
64
+ .optional()
65
+ .describe("HTTP version to use: '1.0', '1.1', or '2' (--http1.0/--http1.1/--http2)"),
66
+ resolve: z
67
+ .string()
68
+ .max(INPUT_LIMITS.STRING_MAX)
69
+ .optional()
70
+ .describe("Custom DNS resolution (--resolve). Format: 'host:port:addr' (e.g., 'example.com:443:127.0.0.1')"),
35
71
  compact: z
36
72
  .boolean()
37
73
  .optional()
@@ -44,14 +80,28 @@ export function registerHeadTool(server) {
44
80
  .describe("Working directory (default: cwd)"),
45
81
  },
46
82
  outputSchema: HttpHeadResponseSchema,
47
- }, async ({ url, headers, timeout, followRedirects, compact, path }) => {
83
+ }, async ({ url, headers, timeout, connectTimeout, followRedirects, insecure, retry, basicAuth, proxy, httpVersion, resolve, compact, path, }) => {
48
84
  assertSafeUrl(url);
85
+ if (basicAuth)
86
+ assertNoFlagInjection(basicAuth, "basicAuth");
87
+ if (proxy)
88
+ assertNoFlagInjection(proxy, "proxy");
89
+ if (resolve)
90
+ assertNoFlagInjection(resolve, "resolve");
49
91
  const args = buildCurlArgs({
50
92
  url,
51
93
  method: "HEAD",
52
94
  headers,
53
95
  timeout: timeout ?? 30,
96
+ connectTimeout,
54
97
  followRedirects: followRedirects ?? true,
98
+ insecure,
99
+ retry,
100
+ basicAuth,
101
+ proxy,
102
+ httpVersion,
103
+ resolve,
104
+ useHeadFlag: true, // Use -I instead of -X HEAD to avoid potential hangs
55
105
  });
56
106
  const cwd = path || process.cwd();
57
107
  const result = await curlCmd(args, cwd);
@@ -1 +1 @@
1
- {"version":3,"file":"head.js","sourceRoot":"","sources":["../../src/tools/head.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"head.js","sourceRoot":"","sources":["../../src/tools/head.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../src/tools/post.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,yDAAyD;AACzD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,QAsFjD"}
1
+ {"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../src/tools/post.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAezE,yDAAyD;AACzD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,QAmMjD"}
@@ -1,11 +1,12 @@
1
1
  import { z } from "zod";
2
- import { compactDualOutput, INPUT_LIMITS } from "@paretools/shared";
2
+ import { compactDualOutput, assertNoFlagInjection, INPUT_LIMITS } from "@paretools/shared";
3
3
  import { curlCmd } from "../lib/curl-runner.js";
4
4
  import { parseCurlOutput } from "../lib/parsers.js";
5
5
  import { formatHttpResponse, compactResponseMap, formatResponseCompact, } from "../lib/formatters.js";
6
6
  import { HttpResponseSchema } from "../schemas/index.js";
7
7
  import { assertSafeUrl } from "../lib/url-validation.js";
8
8
  import { buildCurlArgs } from "./request.js";
9
+ const HTTP_VERSIONS = ["1.0", "1.1", "2"];
9
10
  /** Registers the `post` tool on the given MCP server. */
10
11
  export function registerPostTool(server) {
11
12
  server.registerTool("post", {
@@ -16,7 +17,11 @@ export function registerPostTool(server) {
16
17
  .string()
17
18
  .max(INPUT_LIMITS.STRING_MAX)
18
19
  .describe("The URL to request (http:// or https:// only)"),
19
- body: z.string().max(INPUT_LIMITS.STRING_MAX).describe("Request body"),
20
+ body: z
21
+ .string()
22
+ .max(INPUT_LIMITS.STRING_MAX)
23
+ .optional()
24
+ .describe("Request body. Ignored when `form` is provided."),
20
25
  headers: z
21
26
  .record(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX), z.string().max(INPUT_LIMITS.STRING_MAX))
22
27
  .optional()
@@ -26,7 +31,7 @@ export function registerPostTool(server) {
26
31
  .max(INPUT_LIMITS.SHORT_STRING_MAX)
27
32
  .optional()
28
33
  .default("application/json")
29
- .describe("Content-Type header (default: application/json)"),
34
+ .describe("Content-Type header (default: application/json). Ignored when `form` is provided."),
30
35
  timeout: z
31
36
  .number()
32
37
  .min(1)
@@ -34,11 +39,56 @@ export function registerPostTool(server) {
34
39
  .optional()
35
40
  .default(30)
36
41
  .describe("Request timeout in seconds (default: 30)"),
42
+ connectTimeout: z
43
+ .number()
44
+ .min(1)
45
+ .max(300)
46
+ .optional()
47
+ .describe("Maximum time in seconds for connection phase only (--connect-timeout). Detects connection failures fast."),
37
48
  followRedirects: z
38
49
  .boolean()
39
50
  .optional()
40
51
  .default(true)
41
52
  .describe("Follow HTTP redirects (default: true)"),
53
+ preserveMethodOnRedirect: z
54
+ .boolean()
55
+ .optional()
56
+ .describe("Preserve POST method on 301/302/303 redirects instead of converting to GET (--post301/--post302/--post303)"),
57
+ insecure: z
58
+ .boolean()
59
+ .optional()
60
+ .describe("Allow insecure TLS connections, e.g. self-signed certificates (-k)"),
61
+ accept: z
62
+ .string()
63
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
64
+ .optional()
65
+ .describe("Expected response format via Accept header (e.g., 'application/json')"),
66
+ compressed: z
67
+ .boolean()
68
+ .optional()
69
+ .describe("Request compressed response and decompress automatically (--compressed)"),
70
+ basicAuth: z
71
+ .string()
72
+ .max(INPUT_LIMITS.STRING_MAX)
73
+ .optional()
74
+ .describe("Basic auth credentials as 'user:password' (-u)"),
75
+ proxy: z
76
+ .string()
77
+ .max(INPUT_LIMITS.STRING_MAX)
78
+ .optional()
79
+ .describe("Proxy URL (e.g., http://proxy:8080) (-x)"),
80
+ dataUrlencode: z
81
+ .array(z.string().max(INPUT_LIMITS.STRING_MAX))
82
+ .optional()
83
+ .describe("URL-encoded form data items (--data-urlencode). Each item is 'key=value'. Use instead of manual URL encoding."),
84
+ form: z
85
+ .record(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX), z.string().max(INPUT_LIMITS.STRING_MAX))
86
+ .optional()
87
+ .describe("Multipart form data as key-value pairs (-F). Each pair maps to `-F key=value`. For file uploads use `@filepath` as the value. When provided, `body` and `contentType` are ignored."),
88
+ httpVersion: z
89
+ .enum(HTTP_VERSIONS)
90
+ .optional()
91
+ .describe("HTTP version to use: '1.0', '1.1', or '2' (--http1.0/--http1.1/--http2)"),
42
92
  compact: z
43
93
  .boolean()
44
94
  .optional()
@@ -51,20 +101,50 @@ export function registerPostTool(server) {
51
101
  .describe("Working directory (default: cwd)"),
52
102
  },
53
103
  outputSchema: HttpResponseSchema,
54
- }, async ({ url, body, headers, contentType, timeout, followRedirects, compact, path }) => {
104
+ }, async ({ url, body, headers, contentType, timeout, connectTimeout, followRedirects, preserveMethodOnRedirect, insecure, accept, compressed, basicAuth, proxy, dataUrlencode, form, httpVersion, compact, path, }) => {
55
105
  assertSafeUrl(url);
56
- // Merge content-type header with user-supplied headers
57
- const mergedHeaders = {
58
- "Content-Type": contentType ?? "application/json",
59
- ...headers,
60
- };
106
+ if (accept)
107
+ assertNoFlagInjection(accept, "accept");
108
+ if (basicAuth)
109
+ assertNoFlagInjection(basicAuth, "basicAuth");
110
+ if (proxy)
111
+ assertNoFlagInjection(proxy, "proxy");
112
+ if (dataUrlencode) {
113
+ for (const item of dataUrlencode) {
114
+ assertNoFlagInjection(item, "dataUrlencode");
115
+ }
116
+ }
117
+ if (form) {
118
+ for (const value of Object.values(form)) {
119
+ assertNoFlagInjection(value, "form value");
120
+ }
121
+ }
122
+ // When form is provided, don't set Content-Type (curl sets multipart/form-data automatically)
123
+ const mergedHeaders = form
124
+ ? { ...headers }
125
+ : {
126
+ "Content-Type": contentType ?? "application/json",
127
+ ...headers,
128
+ };
129
+ if (accept) {
130
+ mergedHeaders["Accept"] = accept;
131
+ }
61
132
  const args = buildCurlArgs({
62
133
  url,
63
134
  method: "POST",
64
135
  headers: mergedHeaders,
65
- body,
136
+ body: form ? undefined : body,
66
137
  timeout: timeout ?? 30,
138
+ connectTimeout,
67
139
  followRedirects: followRedirects ?? true,
140
+ insecure,
141
+ compressed,
142
+ basicAuth,
143
+ proxy,
144
+ httpVersion,
145
+ preserveMethodOnRedirect,
146
+ dataUrlencode: form ? undefined : dataUrlencode,
147
+ form,
68
148
  });
69
149
  const cwd = path || process.cwd();
70
150
  const result = await curlCmd(args, cwd);
@@ -1 +1 @@
1
- {"version":3,"file":"post.js","sourceRoot":"","sources":["../../src/tools/post.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"post.js","sourceRoot":"","sources":["../../src/tools/post.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAU,CAAC;AAEnD,yDAAyD;AACzD,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,MAAM,CAAC,YAAY,CACjB,MAAM,EACN;QACE,KAAK,EAAE,WAAW;QAClB,WAAW,EACT,wIAAwI;QAC1I,WAAW,EAAE;YACX,GAAG,EAAE,CAAC;iBACH,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC;iBAC5B,QAAQ,CAAC,+CAA+C,CAAC;YAC5D,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC;iBAC5B,QAAQ,EAAE;iBACV,QAAQ,CAAC,gDAAgD,CAAC;YAC7D,OAAO,EAAE,CAAC;iBACP,MAAM,CACL,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAC7C,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,CACxC;iBACA,QAAQ,EAAE;iBACV,QAAQ,CAAC,oCAAoC,CAAC;YACjD,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC;iBAClC,QAAQ,EAAE;iBACV,OAAO,CAAC,kBAAkB,CAAC;iBAC3B,QAAQ,CACP,mFAAmF,CACpF;YACH,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,EAAE;iBACV,OAAO,CAAC,EAAE,CAAC;iBACX,QAAQ,CAAC,0CAA0C,CAAC;YACvD,cAAc,EAAE,CAAC;iBACd,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,0GAA0G,CAC3G;YACH,eAAe,EAAE,CAAC;iBACf,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CAAC,uCAAuC,CAAC;YACpD,wBAAwB,EAAE,CAAC;iBACxB,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CACP,4GAA4G,CAC7G;YACH,QAAQ,EAAE,CAAC;iBACR,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,oEAAoE,CAAC;YACjF,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC;iBAClC,QAAQ,EAAE;iBACV,QAAQ,CAAC,uEAAuE,CAAC;YACpF,UAAU,EAAE,CAAC;iBACV,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,yEAAyE,CAAC;YACtF,SAAS,EAAE,CAAC;iBACT,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC;iBAC5B,QAAQ,EAAE;iBACV,QAAQ,CAAC,gDAAgD,CAAC;YAC7D,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC;iBAC5B,QAAQ,EAAE;iBACV,QAAQ,CAAC,0CAA0C,CAAC;YACvD,aAAa,EAAE,CAAC;iBACb,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;iBAC9C,QAAQ,EAAE;iBACV,QAAQ,CACP,+GAA+G,CAChH;YACH,IAAI,EAAE,CAAC;iBACJ,MAAM,CACL,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAC7C,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,CACxC;iBACA,QAAQ,EAAE;iBACV,QAAQ,CACP,oLAAoL,CACrL;YACH,WAAW,EAAE,CAAC;iBACX,IAAI,CAAC,aAAa,CAAC;iBACnB,QAAQ,EAAE;iBACV,QAAQ,CAAC,yEAAyE,CAAC;YACtF,OAAO,EAAE,CAAC;iBACP,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CACP,kGAAkG,CACnG;YACH,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC;iBAC1B,QAAQ,EAAE;iBACV,QAAQ,CAAC,kCAAkC,CAAC;SAChD;QACD,YAAY,EAAE,kBAAkB;KACjC,EACD,KAAK,EAAE,EACL,GAAG,EACH,IAAI,EACJ,OAAO,EACP,WAAW,EACX,OAAO,EACP,cAAc,EACd,eAAe,EACf,wBAAwB,EACxB,QAAQ,EACR,MAAM,EACN,UAAU,EACV,SAAS,EACT,KAAK,EACL,aAAa,EACb,IAAI,EACJ,WAAW,EACX,OAAO,EACP,IAAI,GACL,EAAE,EAAE;QACH,aAAa,CAAC,GAAG,CAAC,CAAC;QACnB,IAAI,MAAM;YAAE,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACpD,IAAI,SAAS;YAAE,qBAAqB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAC7D,IAAI,KAAK;YAAE,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACjD,IAAI,aAAa,EAAE,CAAC;YAClB,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;gBACjC,qBAAqB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACT,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxC,qBAAqB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAED,8FAA8F;QAC9F,MAAM,aAAa,GAA2B,IAAI;YAChD,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE;YAChB,CAAC,CAAC;gBACE,cAAc,EAAE,WAAW,IAAI,kBAAkB;gBACjD,GAAG,OAAO;aACX,CAAC;QAEN,IAAI,MAAM,EAAE,CAAC;YACX,aAAa,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;QACnC,CAAC;QAED,MAAM,IAAI,GAAG,aAAa,CAAC;YACzB,GAAG;YACH,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,aAAa;YACtB,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;YAC7B,OAAO,EAAE,OAAO,IAAI,EAAE;YACtB,cAAc;YACd,eAAe,EAAE,eAAe,IAAI,IAAI;YACxC,QAAQ;YACR,UAAU;YACV,SAAS;YACT,KAAK;YACL,WAAW;YACX,wBAAwB;YACxB,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa;YAC/C,IAAI;SACL,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5E,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAEhE,OAAO,iBAAiB,CACtB,IAAI,EACJ,SAAS,EACT,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,OAAO,KAAK,KAAK,CAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -2,15 +2,37 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  /** Registers the `request` tool on the given MCP server. */
3
3
  export declare function registerRequestTool(server: McpServer): void;
4
4
  /**
5
- * Builds the curl argument array from the request parameters.
6
- * Exported for reuse in get/post/head tools.
5
+ * Options for building curl arguments.
6
+ * Shared by all HTTP tools (get, post, head, request).
7
7
  */
8
- export declare function buildCurlArgs(opts: {
8
+ export interface BuildCurlArgsOptions {
9
9
  url: string;
10
10
  method: string;
11
11
  headers?: Record<string, string>;
12
12
  body?: string;
13
13
  timeout: number;
14
+ connectTimeout?: number;
14
15
  followRedirects: boolean;
15
- }): string[];
16
+ insecure?: boolean;
17
+ retry?: number;
18
+ compressed?: boolean;
19
+ basicAuth?: string;
20
+ proxy?: string;
21
+ httpVersion?: string;
22
+ cookie?: string;
23
+ resolve?: string;
24
+ /** When true, use -I (--head) instead of -X HEAD for proper HEAD behavior. */
25
+ useHeadFlag?: boolean;
26
+ /** When true, add --post301 --post302 --post303 to preserve POST method on redirects. */
27
+ preserveMethodOnRedirect?: boolean;
28
+ /** URL-encoded form data items passed via --data-urlencode. */
29
+ dataUrlencode?: string[];
30
+ /** Multipart form data items passed via -F. Each key-value becomes -F key=value. */
31
+ form?: Record<string, string>;
32
+ }
33
+ /**
34
+ * Builds the curl argument array from the request parameters.
35
+ * Exported for reuse in get/post/head tools.
36
+ */
37
+ export declare function buildCurlArgs(opts: BuildCurlArgsOptions): string[];
16
38
  //# sourceMappingURL=request.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/tools/request.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAczE,4DAA4D;AAC5D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,QA+EpD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,OAAO,CAAC;CAC1B,GAAG,MAAM,EAAE,CA2CX"}
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/tools/request.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAezE,4DAA4D;AAC5D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,QAgKpD;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,yFAAyF;IACzF,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,oFAAoF;IACpF,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,EAAE,CAmIlE"}
@@ -6,6 +6,7 @@ import { formatHttpResponse, compactResponseMap, formatResponseCompact, } from "
6
6
  import { HttpResponseSchema } from "../schemas/index.js";
7
7
  import { assertSafeUrl, assertSafeHeader } from "../lib/url-validation.js";
8
8
  const METHODS = ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"];
9
+ const HTTP_VERSIONS = ["1.0", "1.1", "2"];
9
10
  /** Registers the `request` tool on the given MCP server. */
10
11
  export function registerRequestTool(server) {
11
12
  server.registerTool("request", {
@@ -33,11 +34,55 @@ export function registerRequestTool(server) {
33
34
  .optional()
34
35
  .default(30)
35
36
  .describe("Request timeout in seconds (default: 30)"),
37
+ connectTimeout: z
38
+ .number()
39
+ .min(1)
40
+ .max(300)
41
+ .optional()
42
+ .describe("Maximum time in seconds for connection phase only (--connect-timeout). Independent of total timeout."),
36
43
  followRedirects: z
37
44
  .boolean()
38
45
  .optional()
39
46
  .default(true)
40
47
  .describe("Follow HTTP redirects (default: true)"),
48
+ insecure: z
49
+ .boolean()
50
+ .optional()
51
+ .describe("Allow insecure TLS connections, e.g. self-signed certificates (-k)"),
52
+ retry: z
53
+ .number()
54
+ .min(0)
55
+ .max(10)
56
+ .optional()
57
+ .describe("Number of retries on transient failures (--retry)"),
58
+ compressed: z
59
+ .boolean()
60
+ .optional()
61
+ .describe("Request compressed response and decompress automatically (--compressed)"),
62
+ basicAuth: z
63
+ .string()
64
+ .max(INPUT_LIMITS.STRING_MAX)
65
+ .optional()
66
+ .describe("Basic auth credentials as 'user:password' (-u)"),
67
+ proxy: z
68
+ .string()
69
+ .max(INPUT_LIMITS.STRING_MAX)
70
+ .optional()
71
+ .describe("Proxy URL (e.g., http://proxy:8080) (-x)"),
72
+ httpVersion: z
73
+ .enum(HTTP_VERSIONS)
74
+ .optional()
75
+ .describe("HTTP version to use: '1.0', '1.1', or '2' (--http1.0/--http1.1/--http2)"),
76
+ cookie: z
77
+ .string()
78
+ .max(INPUT_LIMITS.STRING_MAX)
79
+ .optional()
80
+ .describe("Cookie string or cookie jar file path for session-based APIs (-b). Format: 'name=value; name2=value2'"),
81
+ resolve: z
82
+ .string()
83
+ .max(INPUT_LIMITS.STRING_MAX)
84
+ .optional()
85
+ .describe("Custom DNS resolution (--resolve). Format: 'host:port:addr' (e.g., 'example.com:443:127.0.0.1')"),
41
86
  compact: z
42
87
  .boolean()
43
88
  .optional()
@@ -50,15 +95,32 @@ export function registerRequestTool(server) {
50
95
  .describe("Working directory (default: cwd)"),
51
96
  },
52
97
  outputSchema: HttpResponseSchema,
53
- }, async ({ url, method, headers, body, timeout, followRedirects, compact, path }) => {
98
+ }, async ({ url, method, headers, body, timeout, connectTimeout, followRedirects, insecure, retry, compressed, basicAuth, proxy, httpVersion, cookie, resolve, compact, path, }) => {
54
99
  assertSafeUrl(url);
100
+ if (basicAuth)
101
+ assertNoFlagInjection(basicAuth, "basicAuth");
102
+ if (proxy)
103
+ assertNoFlagInjection(proxy, "proxy");
104
+ if (cookie)
105
+ assertNoFlagInjection(cookie, "cookie");
106
+ if (resolve)
107
+ assertNoFlagInjection(resolve, "resolve");
55
108
  const args = buildCurlArgs({
56
109
  url,
57
110
  method: method ?? "GET",
58
111
  headers,
59
112
  body,
60
113
  timeout: timeout ?? 30,
114
+ connectTimeout,
61
115
  followRedirects: followRedirects ?? true,
116
+ insecure,
117
+ retry,
118
+ compressed,
119
+ basicAuth,
120
+ proxy,
121
+ httpVersion,
122
+ cookie,
123
+ resolve,
62
124
  });
63
125
  const cwd = path || process.cwd();
64
126
  const result = await curlCmd(args, cwd);
@@ -77,19 +139,41 @@ export function buildCurlArgs(opts) {
77
139
  "-S", // Show errors
78
140
  "-i", // Include response headers in output
79
141
  ];
80
- // Write-out format for timing and size metadata
81
- const writeOut = `\n${PARE_META_SEPARATOR}\n%{time_total} %{size_download}`;
142
+ // Write-out format for timing and size metadata (expanded with detailed timing)
143
+ const writeOut = [
144
+ `\n${PARE_META_SEPARATOR}\n`,
145
+ "%{time_total}",
146
+ "%{size_download}",
147
+ "%{time_namelookup}",
148
+ "%{time_connect}",
149
+ "%{time_appconnect}",
150
+ "%{time_pretransfer}",
151
+ "%{time_starttransfer}",
152
+ ].join(" ");
82
153
  args.push("-w", writeOut);
83
- // HTTP method
84
- args.push("-X", opts.method);
154
+ // HTTP method: use -I (--head) for HEAD requests, -X for everything else
155
+ if (opts.useHeadFlag) {
156
+ args.push("-I");
157
+ }
158
+ else {
159
+ args.push("-X", opts.method);
160
+ }
85
161
  // Timeout
86
162
  args.push("--max-time", String(opts.timeout));
163
+ // Connection timeout (separate from total timeout)
164
+ if (opts.connectTimeout !== undefined) {
165
+ args.push("--connect-timeout", String(opts.connectTimeout));
166
+ }
87
167
  // Follow redirects
88
168
  if (opts.followRedirects) {
89
169
  args.push("-L");
90
170
  // Limit redirect hops to prevent infinite loops
91
171
  args.push("--max-redirs", "10");
92
172
  }
173
+ // Preserve POST method on redirects (prevent silent POST-to-GET conversion)
174
+ if (opts.preserveMethodOnRedirect) {
175
+ args.push("--post301", "--post302", "--post303");
176
+ }
93
177
  // Custom headers
94
178
  if (opts.headers) {
95
179
  for (const [key, value] of Object.entries(opts.headers)) {
@@ -99,9 +183,66 @@ export function buildCurlArgs(opts) {
99
183
  args.push("-H", `${key}: ${value}`);
100
184
  }
101
185
  }
102
- // Request body
103
- if (opts.body) {
104
- args.push("--data-raw", opts.body);
186
+ // Multipart form data (-F): takes priority over body/data-raw
187
+ if (opts.form && Object.keys(opts.form).length > 0) {
188
+ for (const [key, value] of Object.entries(opts.form)) {
189
+ assertNoFlagInjection(value, "form value");
190
+ args.push("-F", `${key}=${value}`);
191
+ }
192
+ }
193
+ else {
194
+ // Request body
195
+ if (opts.body) {
196
+ args.push("--data-raw", opts.body);
197
+ }
198
+ // URL-encoded form data
199
+ if (opts.dataUrlencode) {
200
+ for (const item of opts.dataUrlencode) {
201
+ args.push("--data-urlencode", item);
202
+ }
203
+ }
204
+ }
205
+ // Insecure TLS (self-signed certs)
206
+ if (opts.insecure) {
207
+ args.push("-k");
208
+ }
209
+ // Retry on transient failures
210
+ if (opts.retry !== undefined) {
211
+ args.push("--retry", String(opts.retry));
212
+ }
213
+ // Request compressed response
214
+ if (opts.compressed) {
215
+ args.push("--compressed");
216
+ }
217
+ // Basic authentication
218
+ if (opts.basicAuth) {
219
+ args.push("-u", opts.basicAuth);
220
+ }
221
+ // HTTP proxy
222
+ if (opts.proxy) {
223
+ args.push("-x", opts.proxy);
224
+ }
225
+ // HTTP version
226
+ if (opts.httpVersion) {
227
+ switch (opts.httpVersion) {
228
+ case "1.0":
229
+ args.push("--http1.0");
230
+ break;
231
+ case "1.1":
232
+ args.push("--http1.1");
233
+ break;
234
+ case "2":
235
+ args.push("--http2");
236
+ break;
237
+ }
238
+ }
239
+ // Cookie
240
+ if (opts.cookie) {
241
+ args.push("-b", opts.cookie);
242
+ }
243
+ // Custom DNS resolution
244
+ if (opts.resolve) {
245
+ args.push("--resolve", opts.resolve);
105
246
  }
106
247
  // URL must be last
107
248
  args.push(opts.url);
@@ -1 +1 @@
1
- {"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/tools/request.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/tools/request.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paretools/http",
3
- "version": "0.8.5",
3
+ "version": "0.9.0",
4
4
  "mcpName": "io.github.Dave-London/pare-http",
5
5
  "description": "MCP server for HTTP requests (curl) with structured, token-efficient output",
6
6
  "license": "MIT",
@@ -51,7 +51,7 @@
51
51
  "dependencies": {
52
52
  "@modelcontextprotocol/sdk": "^1.26.0",
53
53
  "zod": "^4.3.6",
54
- "@paretools/shared": "0.8.5"
54
+ "@paretools/shared": "0.9.0"
55
55
  },
56
56
  "devDependencies": {
57
57
  "@types/node": "^25.2.3",