@ai-sdk/mcp 1.0.32 → 1.0.34
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 +13 -0
- package/dist/index.d.mts +6 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +19 -11
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +19 -11
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
- package/src/tool/mcp-http-transport.ts +10 -3
- package/src/tool/mcp-sse-transport.ts +9 -2
- package/src/tool/mcp-transport.ts +8 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-sdk/mcp",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.34",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -33,8 +33,8 @@
|
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"pkce-challenge": "^5.0.0",
|
|
36
|
-
"@ai-sdk/provider
|
|
37
|
-
"@ai-sdk/provider": "
|
|
36
|
+
"@ai-sdk/provider": "3.0.8",
|
|
37
|
+
"@ai-sdk/provider-utils": "4.0.23"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@types/node": "20.17.24",
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
EventSourceParserStream,
|
|
3
|
+
FetchFunction,
|
|
3
4
|
withUserAgentSuffix,
|
|
4
5
|
getRuntimeEnvironmentUserAgent,
|
|
5
6
|
} from '@ai-sdk/provider-utils';
|
|
@@ -31,6 +32,7 @@ export class HttpMCPTransport implements MCPTransport {
|
|
|
31
32
|
private sessionId?: string;
|
|
32
33
|
private inboundSseConnection?: { close: () => void };
|
|
33
34
|
private redirectMode: RequestRedirect;
|
|
35
|
+
private fetchFn: FetchFunction;
|
|
34
36
|
|
|
35
37
|
// Inbound SSE resumption and reconnection state
|
|
36
38
|
private lastInboundEventId?: string;
|
|
@@ -51,16 +53,19 @@ export class HttpMCPTransport implements MCPTransport {
|
|
|
51
53
|
headers,
|
|
52
54
|
authProvider,
|
|
53
55
|
redirect = 'follow',
|
|
56
|
+
fetch: fetchFn,
|
|
54
57
|
}: {
|
|
55
58
|
url: string;
|
|
56
59
|
headers?: Record<string, string>;
|
|
57
60
|
authProvider?: OAuthClientProvider;
|
|
58
61
|
redirect?: 'follow' | 'error';
|
|
62
|
+
fetch?: FetchFunction;
|
|
59
63
|
}) {
|
|
60
64
|
this.url = new URL(url);
|
|
61
65
|
this.headers = headers;
|
|
62
66
|
this.authProvider = authProvider;
|
|
63
67
|
this.redirectMode = redirect;
|
|
68
|
+
this.fetchFn = fetchFn ?? globalThis.fetch;
|
|
64
69
|
}
|
|
65
70
|
|
|
66
71
|
private async commonHeaders(
|
|
@@ -111,7 +116,7 @@ export class HttpMCPTransport implements MCPTransport {
|
|
|
111
116
|
!this.abortController.signal.aborted
|
|
112
117
|
) {
|
|
113
118
|
const headers = await this.commonHeaders({});
|
|
114
|
-
await
|
|
119
|
+
await this.fetchFn(this.url.href, {
|
|
115
120
|
method: 'DELETE',
|
|
116
121
|
headers,
|
|
117
122
|
signal: this.abortController.signal,
|
|
@@ -140,7 +145,7 @@ export class HttpMCPTransport implements MCPTransport {
|
|
|
140
145
|
redirect: this.redirectMode,
|
|
141
146
|
} satisfies RequestInit;
|
|
142
147
|
|
|
143
|
-
const response = await
|
|
148
|
+
const response = await this.fetchFn(this.url.href, init);
|
|
144
149
|
|
|
145
150
|
const sessionId = response.headers.get('mcp-session-id');
|
|
146
151
|
if (sessionId) {
|
|
@@ -153,6 +158,7 @@ export class HttpMCPTransport implements MCPTransport {
|
|
|
153
158
|
const result = await auth(this.authProvider, {
|
|
154
159
|
serverUrl: this.url,
|
|
155
160
|
resourceMetadataUrl: this.resourceMetadataUrl,
|
|
161
|
+
fetchFn: this.fetchFn,
|
|
156
162
|
});
|
|
157
163
|
if (result !== 'AUTHORIZED') {
|
|
158
164
|
const error = new UnauthorizedError();
|
|
@@ -314,7 +320,7 @@ export class HttpMCPTransport implements MCPTransport {
|
|
|
314
320
|
headers['last-event-id'] = resumeToken;
|
|
315
321
|
}
|
|
316
322
|
|
|
317
|
-
const response = await
|
|
323
|
+
const response = await this.fetchFn(this.url.href, {
|
|
318
324
|
method: 'GET',
|
|
319
325
|
headers,
|
|
320
326
|
signal: this.abortController?.signal,
|
|
@@ -332,6 +338,7 @@ export class HttpMCPTransport implements MCPTransport {
|
|
|
332
338
|
const result = await auth(this.authProvider, {
|
|
333
339
|
serverUrl: this.url,
|
|
334
340
|
resourceMetadataUrl: this.resourceMetadataUrl,
|
|
341
|
+
fetchFn: this.fetchFn,
|
|
335
342
|
});
|
|
336
343
|
if (result !== 'AUTHORIZED') {
|
|
337
344
|
const error = new UnauthorizedError();
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
EventSourceParserStream,
|
|
3
|
+
FetchFunction,
|
|
3
4
|
withUserAgentSuffix,
|
|
4
5
|
getRuntimeEnvironmentUserAgent,
|
|
5
6
|
} from '@ai-sdk/provider-utils';
|
|
@@ -27,6 +28,7 @@ export class SseMCPTransport implements MCPTransport {
|
|
|
27
28
|
private authProvider?: OAuthClientProvider;
|
|
28
29
|
private resourceMetadataUrl?: URL;
|
|
29
30
|
private redirectMode: RequestRedirect;
|
|
31
|
+
private fetchFn: FetchFunction;
|
|
30
32
|
|
|
31
33
|
onclose?: () => void;
|
|
32
34
|
onerror?: (error: unknown) => void;
|
|
@@ -37,16 +39,19 @@ export class SseMCPTransport implements MCPTransport {
|
|
|
37
39
|
headers,
|
|
38
40
|
authProvider,
|
|
39
41
|
redirect = 'follow',
|
|
42
|
+
fetch: fetchFn,
|
|
40
43
|
}: {
|
|
41
44
|
url: string;
|
|
42
45
|
headers?: Record<string, string>;
|
|
43
46
|
authProvider?: OAuthClientProvider;
|
|
44
47
|
redirect?: 'follow' | 'error';
|
|
48
|
+
fetch?: FetchFunction;
|
|
45
49
|
}) {
|
|
46
50
|
this.url = new URL(url);
|
|
47
51
|
this.headers = headers;
|
|
48
52
|
this.authProvider = authProvider;
|
|
49
53
|
this.redirectMode = redirect;
|
|
54
|
+
this.fetchFn = fetchFn ?? globalThis.fetch;
|
|
50
55
|
}
|
|
51
56
|
|
|
52
57
|
private async commonHeaders(
|
|
@@ -85,7 +90,7 @@ export class SseMCPTransport implements MCPTransport {
|
|
|
85
90
|
const headers = await this.commonHeaders({
|
|
86
91
|
Accept: 'text/event-stream',
|
|
87
92
|
});
|
|
88
|
-
const response = await
|
|
93
|
+
const response = await this.fetchFn(this.url.href, {
|
|
89
94
|
headers,
|
|
90
95
|
signal: this.abortController?.signal,
|
|
91
96
|
redirect: this.redirectMode,
|
|
@@ -97,6 +102,7 @@ export class SseMCPTransport implements MCPTransport {
|
|
|
97
102
|
const result = await auth(this.authProvider, {
|
|
98
103
|
serverUrl: this.url,
|
|
99
104
|
resourceMetadataUrl: this.resourceMetadataUrl,
|
|
105
|
+
fetchFn: this.fetchFn,
|
|
100
106
|
});
|
|
101
107
|
if (result !== 'AUTHORIZED') {
|
|
102
108
|
const error = new UnauthorizedError();
|
|
@@ -235,7 +241,7 @@ export class SseMCPTransport implements MCPTransport {
|
|
|
235
241
|
redirect: this.redirectMode,
|
|
236
242
|
};
|
|
237
243
|
|
|
238
|
-
const response = await
|
|
244
|
+
const response = await this.fetchFn(endpoint.href, init);
|
|
239
245
|
|
|
240
246
|
if (response.status === 401 && this.authProvider && !triedAuth) {
|
|
241
247
|
this.resourceMetadataUrl = extractResourceMetadataUrl(response);
|
|
@@ -243,6 +249,7 @@ export class SseMCPTransport implements MCPTransport {
|
|
|
243
249
|
const result = await auth(this.authProvider, {
|
|
244
250
|
serverUrl: this.url,
|
|
245
251
|
resourceMetadataUrl: this.resourceMetadataUrl,
|
|
252
|
+
fetchFn: this.fetchFn,
|
|
246
253
|
});
|
|
247
254
|
if (result !== 'AUTHORIZED') {
|
|
248
255
|
const error = new UnauthorizedError();
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { FetchFunction } from '@ai-sdk/provider-utils';
|
|
1
2
|
import { MCPClientError } from '../error/mcp-client-error';
|
|
2
3
|
import { JSONRPCMessage } from './json-rpc-message';
|
|
3
4
|
import { SseMCPTransport } from './mcp-sse-transport';
|
|
@@ -66,6 +67,13 @@ export type MCPTransportConfig = {
|
|
|
66
67
|
* @default 'follow'
|
|
67
68
|
*/
|
|
68
69
|
redirect?: 'follow' | 'error';
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Optional custom fetch implementation to use for HTTP requests.
|
|
73
|
+
* Useful for runtimes that need a request-local fetch.
|
|
74
|
+
* @default globalThis.fetch
|
|
75
|
+
*/
|
|
76
|
+
fetch?: FetchFunction;
|
|
69
77
|
};
|
|
70
78
|
|
|
71
79
|
export function createMcpTransport(config: MCPTransportConfig): MCPTransport {
|