@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.
- package/CHANGELOG.md +14 -0
- package/dist/index.d.mts +7 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +19 -10
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +16 -7
- package/dist/index.mjs.map +1 -1
- package/dist/mcp-stdio/index.js +3 -3
- package/dist/mcp-stdio/index.mjs +1 -1
- package/package.json +3 -3
- package/src/tool/mcp-http-transport.ts +7 -0
- package/src/tool/mcp-sse-transport.ts +6 -0
- package/src/tool/mcp-transport.ts +8 -0
package/dist/mcp-stdio/index.js
CHANGED
|
@@ -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
|
|
22
|
-
__export(
|
|
21
|
+
var index_exports = {};
|
|
22
|
+
__export(index_exports, {
|
|
23
23
|
Experimental_StdioMCPTransport: () => StdioMCPTransport
|
|
24
24
|
});
|
|
25
|
-
module.exports = __toCommonJS(
|
|
25
|
+
module.exports = __toCommonJS(index_exports);
|
|
26
26
|
|
|
27
27
|
// src/tool/json-rpc-message.ts
|
|
28
28
|
var import_v42 = require("zod/v4");
|
package/dist/mcp-stdio/index.mjs
CHANGED
|
@@ -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 "
|
|
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.
|
|
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.
|
|
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": "
|
|
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 {
|