@ai-sdk/mcp 1.0.28 → 1.0.30

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.
@@ -18,11 +18,11 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
 
20
20
  // src/tool/mcp-stdio/index.ts
21
- var mcp_stdio_exports = {};
22
- __export(mcp_stdio_exports, {
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
23
  Experimental_StdioMCPTransport: () => StdioMCPTransport
24
24
  });
25
- module.exports = __toCommonJS(mcp_stdio_exports);
25
+ module.exports = __toCommonJS(index_exports);
26
26
 
27
27
  // src/tool/json-rpc-message.ts
28
28
  var import_v42 = require("zod/v4");
@@ -257,7 +257,7 @@ var MCPClientError = class extends (_b = AISDKError, _a = symbol, _b) {
257
257
  };
258
258
 
259
259
  // src/tool/mcp-stdio/create-child-process.ts
260
- import { spawn } from "node:child_process";
260
+ import { spawn } from "child_process";
261
261
 
262
262
  // src/tool/mcp-stdio/get-environment.ts
263
263
  function getEnvironment(customEnv) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/mcp",
3
- "version": "1.0.28",
3
+ "version": "1.0.30",
4
4
  "license": "Apache-2.0",
5
5
  "sideEffects": false,
6
6
  "main": "./dist/index.js",
@@ -34,13 +34,13 @@
34
34
  "dependencies": {
35
35
  "pkce-challenge": "^5.0.0",
36
36
  "@ai-sdk/provider": "3.0.8",
37
- "@ai-sdk/provider-utils": "4.0.20"
37
+ "@ai-sdk/provider-utils": "4.0.21"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/node": "20.17.24",
41
41
  "tsup": "^8",
42
42
  "typescript": "5.8.3",
43
- "vitest": "2.1.4",
43
+ "vitest": "^4.1.0",
44
44
  "zod": "3.25.76",
45
45
  "@ai-sdk/test-server": "1.0.3",
46
46
  "@vercel/ai-tsconfig": "0.0.0"
@@ -30,6 +30,7 @@ export class HttpMCPTransport implements MCPTransport {
30
30
  private resourceMetadataUrl?: URL;
31
31
  private sessionId?: string;
32
32
  private inboundSseConnection?: { close: () => void };
33
+ private redirectMode: RequestRedirect;
33
34
 
34
35
  // Inbound SSE resumption and reconnection state
35
36
  private lastInboundEventId?: string;
@@ -49,14 +50,17 @@ export class HttpMCPTransport implements MCPTransport {
49
50
  url,
50
51
  headers,
51
52
  authProvider,
53
+ redirect = 'follow',
52
54
  }: {
53
55
  url: string;
54
56
  headers?: Record<string, string>;
55
57
  authProvider?: OAuthClientProvider;
58
+ redirect?: 'follow' | 'error';
56
59
  }) {
57
60
  this.url = new URL(url);
58
61
  this.headers = headers;
59
62
  this.authProvider = authProvider;
63
+ this.redirectMode = redirect;
60
64
  }
61
65
 
62
66
  private async commonHeaders(
@@ -111,6 +115,7 @@ export class HttpMCPTransport implements MCPTransport {
111
115
  method: 'DELETE',
112
116
  headers,
113
117
  signal: this.abortController.signal,
118
+ redirect: this.redirectMode,
114
119
  }).catch(() => undefined);
115
120
  }
116
121
  } catch {}
@@ -132,6 +137,7 @@ export class HttpMCPTransport implements MCPTransport {
132
137
  headers,
133
138
  body: JSON.stringify(message),
134
139
  signal: this.abortController?.signal,
140
+ redirect: this.redirectMode,
135
141
  } satisfies RequestInit;
136
142
 
137
143
  const response = await fetch(this.url, init);
@@ -312,6 +318,7 @@ export class HttpMCPTransport implements MCPTransport {
312
318
  method: 'GET',
313
319
  headers,
314
320
  signal: this.abortController?.signal,
321
+ redirect: this.redirectMode,
315
322
  });
316
323
 
317
324
  const sessionId = response.headers.get('mcp-session-id');
@@ -26,6 +26,7 @@ export class SseMCPTransport implements MCPTransport {
26
26
  private headers?: Record<string, string>;
27
27
  private authProvider?: OAuthClientProvider;
28
28
  private resourceMetadataUrl?: URL;
29
+ private redirectMode: RequestRedirect;
29
30
 
30
31
  onclose?: () => void;
31
32
  onerror?: (error: unknown) => void;
@@ -35,14 +36,17 @@ export class SseMCPTransport implements MCPTransport {
35
36
  url,
36
37
  headers,
37
38
  authProvider,
39
+ redirect = 'follow',
38
40
  }: {
39
41
  url: string;
40
42
  headers?: Record<string, string>;
41
43
  authProvider?: OAuthClientProvider;
44
+ redirect?: 'follow' | 'error';
42
45
  }) {
43
46
  this.url = new URL(url);
44
47
  this.headers = headers;
45
48
  this.authProvider = authProvider;
49
+ this.redirectMode = redirect;
46
50
  }
47
51
 
48
52
  private async commonHeaders(
@@ -84,6 +88,7 @@ export class SseMCPTransport implements MCPTransport {
84
88
  const response = await fetch(this.url.href, {
85
89
  headers,
86
90
  signal: this.abortController?.signal,
91
+ redirect: this.redirectMode,
87
92
  });
88
93
 
89
94
  if (response.status === 401 && this.authProvider && !triedAuth) {
@@ -227,6 +232,7 @@ export class SseMCPTransport implements MCPTransport {
227
232
  headers,
228
233
  body: JSON.stringify(message),
229
234
  signal: this.abortController?.signal,
235
+ redirect: this.redirectMode,
230
236
  };
231
237
 
232
238
  const response = await fetch(endpoint, init);
@@ -58,6 +58,14 @@ export type MCPTransportConfig = {
58
58
  * An optional OAuth client provider to use for authentication for MCP servers.
59
59
  */
60
60
  authProvider?: OAuthClientProvider;
61
+
62
+ /**
63
+ * Controls how HTTP redirects are handled for transport requests.
64
+ * - `'follow'`: Follow redirects automatically (standard fetch behavior).
65
+ * - `'error'`: Reject any redirect response with an error.
66
+ * @default 'follow'
67
+ */
68
+ redirect?: 'follow' | 'error';
61
69
  };
62
70
 
63
71
  export function createMcpTransport(config: MCPTransportConfig): MCPTransport {