integrate-sdk 0.6.9 → 0.7.1
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/dist/adapters/auto-routes.js +36 -2
- package/dist/adapters/base-handler.js +36 -2
- package/dist/adapters/nextjs.js +149 -98
- package/dist/adapters/node.js +36 -2
- package/dist/adapters/solid-start.js +236 -158
- package/dist/adapters/svelte-kit.js +236 -158
- package/dist/index.js +258 -157
- package/dist/oauth.js +40 -1
- package/dist/server.js +258 -158
- package/dist/src/adapters/base-handler.d.ts +34 -0
- package/dist/src/adapters/base-handler.d.ts.map +1 -1
- package/dist/src/adapters/nextjs.d.ts +26 -0
- package/dist/src/adapters/nextjs.d.ts.map +1 -1
- package/dist/src/client.d.ts +6 -0
- package/dist/src/client.d.ts.map +1 -1
- package/dist/src/config/types.d.ts +18 -0
- package/dist/src/config/types.d.ts.map +1 -1
- package/dist/src/server.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -11,8 +11,6 @@ var __export = (target, all) => {
|
|
|
11
11
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
12
12
|
|
|
13
13
|
// src/adapters/base-handler.ts
|
|
14
|
-
var MCP_SERVER_URL = "https://mcp.integrate.dev/api/v1/mcp";
|
|
15
|
-
|
|
16
14
|
class OAuthHandler {
|
|
17
15
|
config;
|
|
18
16
|
serverUrl;
|
|
@@ -139,7 +137,43 @@ class OAuthHandler {
|
|
|
139
137
|
const data = await response.json();
|
|
140
138
|
return data;
|
|
141
139
|
}
|
|
140
|
+
async handleToolCall(request, authHeader) {
|
|
141
|
+
const url = new URL("/tools/call", this.serverUrl);
|
|
142
|
+
const headers = this.getHeaders({
|
|
143
|
+
"Content-Type": "application/json"
|
|
144
|
+
});
|
|
145
|
+
if (authHeader && authHeader.startsWith("Bearer ")) {
|
|
146
|
+
headers["Authorization"] = authHeader;
|
|
147
|
+
}
|
|
148
|
+
const jsonRpcRequest = {
|
|
149
|
+
jsonrpc: "2.0",
|
|
150
|
+
id: Date.now() + Math.random(),
|
|
151
|
+
method: "tools/call",
|
|
152
|
+
params: {
|
|
153
|
+
name: request.name,
|
|
154
|
+
arguments: request.arguments || {}
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
const response = await fetch(url.toString(), {
|
|
158
|
+
method: "POST",
|
|
159
|
+
headers,
|
|
160
|
+
body: JSON.stringify(jsonRpcRequest)
|
|
161
|
+
});
|
|
162
|
+
if (!response.ok) {
|
|
163
|
+
const error = await response.text();
|
|
164
|
+
throw new Error(`MCP server failed to execute tool call: ${error}`);
|
|
165
|
+
}
|
|
166
|
+
const jsonRpcResponse = await response.json();
|
|
167
|
+
if (jsonRpcResponse.error) {
|
|
168
|
+
const error = new Error(jsonRpcResponse.error.message || "Tool call failed");
|
|
169
|
+
error.code = jsonRpcResponse.error.code;
|
|
170
|
+
error.data = jsonRpcResponse.error.data;
|
|
171
|
+
throw error;
|
|
172
|
+
}
|
|
173
|
+
return jsonRpcResponse.result;
|
|
174
|
+
}
|
|
142
175
|
}
|
|
176
|
+
var MCP_SERVER_URL = "https://mcp.integrate.dev/api/v1/mcp";
|
|
143
177
|
|
|
144
178
|
// src/adapters/auto-routes.ts
|
|
145
179
|
var globalOAuthConfig = null;
|
|
@@ -11,8 +11,6 @@ var __export = (target, all) => {
|
|
|
11
11
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
12
12
|
|
|
13
13
|
// src/adapters/base-handler.ts
|
|
14
|
-
var MCP_SERVER_URL = "https://mcp.integrate.dev/api/v1/mcp";
|
|
15
|
-
|
|
16
14
|
class OAuthHandler {
|
|
17
15
|
config;
|
|
18
16
|
serverUrl;
|
|
@@ -139,7 +137,43 @@ class OAuthHandler {
|
|
|
139
137
|
const data = await response.json();
|
|
140
138
|
return data;
|
|
141
139
|
}
|
|
140
|
+
async handleToolCall(request, authHeader) {
|
|
141
|
+
const url = new URL("/tools/call", this.serverUrl);
|
|
142
|
+
const headers = this.getHeaders({
|
|
143
|
+
"Content-Type": "application/json"
|
|
144
|
+
});
|
|
145
|
+
if (authHeader && authHeader.startsWith("Bearer ")) {
|
|
146
|
+
headers["Authorization"] = authHeader;
|
|
147
|
+
}
|
|
148
|
+
const jsonRpcRequest = {
|
|
149
|
+
jsonrpc: "2.0",
|
|
150
|
+
id: Date.now() + Math.random(),
|
|
151
|
+
method: "tools/call",
|
|
152
|
+
params: {
|
|
153
|
+
name: request.name,
|
|
154
|
+
arguments: request.arguments || {}
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
const response = await fetch(url.toString(), {
|
|
158
|
+
method: "POST",
|
|
159
|
+
headers,
|
|
160
|
+
body: JSON.stringify(jsonRpcRequest)
|
|
161
|
+
});
|
|
162
|
+
if (!response.ok) {
|
|
163
|
+
const error = await response.text();
|
|
164
|
+
throw new Error(`MCP server failed to execute tool call: ${error}`);
|
|
165
|
+
}
|
|
166
|
+
const jsonRpcResponse = await response.json();
|
|
167
|
+
if (jsonRpcResponse.error) {
|
|
168
|
+
const error = new Error(jsonRpcResponse.error.message || "Tool call failed");
|
|
169
|
+
error.code = jsonRpcResponse.error.code;
|
|
170
|
+
error.data = jsonRpcResponse.error.data;
|
|
171
|
+
throw error;
|
|
172
|
+
}
|
|
173
|
+
return jsonRpcResponse.result;
|
|
174
|
+
}
|
|
142
175
|
}
|
|
176
|
+
var MCP_SERVER_URL = "https://mcp.integrate.dev/api/v1/mcp";
|
|
143
177
|
export {
|
|
144
178
|
OAuthHandler
|
|
145
179
|
};
|
package/dist/adapters/nextjs.js
CHANGED
|
@@ -10,105 +10,7 @@ var __export = (target, all) => {
|
|
|
10
10
|
};
|
|
11
11
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
12
12
|
|
|
13
|
-
// src/oauth/pkce.ts
|
|
14
|
-
var exports_pkce = {};
|
|
15
|
-
__export(exports_pkce, {
|
|
16
|
-
parseState: () => parseState,
|
|
17
|
-
generateStateWithReturnUrl: () => generateStateWithReturnUrl,
|
|
18
|
-
generateState: () => generateState,
|
|
19
|
-
generateCodeVerifier: () => generateCodeVerifier,
|
|
20
|
-
generateCodeChallenge: () => generateCodeChallenge
|
|
21
|
-
});
|
|
22
|
-
function generateCodeVerifier() {
|
|
23
|
-
const array = new Uint8Array(32);
|
|
24
|
-
if (typeof crypto !== "undefined" && crypto.getRandomValues) {
|
|
25
|
-
crypto.getRandomValues(array);
|
|
26
|
-
} else if (typeof globalThis !== "undefined" && globalThis.crypto) {
|
|
27
|
-
globalThis.crypto.getRandomValues(array);
|
|
28
|
-
} else {
|
|
29
|
-
throw new Error("crypto.getRandomValues is not available. Please use Node.js 19+ or a modern browser.");
|
|
30
|
-
}
|
|
31
|
-
return base64UrlEncode(array);
|
|
32
|
-
}
|
|
33
|
-
async function generateCodeChallenge(verifier) {
|
|
34
|
-
const encoder = new TextEncoder;
|
|
35
|
-
const data = encoder.encode(verifier);
|
|
36
|
-
let hashBuffer;
|
|
37
|
-
if (typeof crypto !== "undefined" && crypto.subtle) {
|
|
38
|
-
hashBuffer = await crypto.subtle.digest("SHA-256", data);
|
|
39
|
-
} else if (typeof globalThis !== "undefined" && globalThis.crypto?.subtle) {
|
|
40
|
-
hashBuffer = await globalThis.crypto.subtle.digest("SHA-256", data);
|
|
41
|
-
} else {
|
|
42
|
-
throw new Error("crypto.subtle.digest is not available. Please use Node.js 19+ or a modern browser.");
|
|
43
|
-
}
|
|
44
|
-
return base64UrlEncode(new Uint8Array(hashBuffer));
|
|
45
|
-
}
|
|
46
|
-
function generateState() {
|
|
47
|
-
const array = new Uint8Array(16);
|
|
48
|
-
if (typeof crypto !== "undefined" && crypto.getRandomValues) {
|
|
49
|
-
crypto.getRandomValues(array);
|
|
50
|
-
} else if (typeof globalThis !== "undefined" && globalThis.crypto) {
|
|
51
|
-
globalThis.crypto.getRandomValues(array);
|
|
52
|
-
} else {
|
|
53
|
-
throw new Error("crypto.getRandomValues is not available. Please use Node.js 19+ or a modern browser.");
|
|
54
|
-
}
|
|
55
|
-
return base64UrlEncode(array);
|
|
56
|
-
}
|
|
57
|
-
function generateStateWithReturnUrl(returnUrl) {
|
|
58
|
-
const csrf = generateState();
|
|
59
|
-
const stateData = returnUrl ? { csrf, returnUrl } : { csrf };
|
|
60
|
-
const encoder = new TextEncoder;
|
|
61
|
-
const jsonBytes = encoder.encode(JSON.stringify(stateData));
|
|
62
|
-
return base64UrlEncode(jsonBytes);
|
|
63
|
-
}
|
|
64
|
-
function parseState(state) {
|
|
65
|
-
try {
|
|
66
|
-
const decoded = base64UrlDecode(state);
|
|
67
|
-
const parsed = JSON.parse(decoded);
|
|
68
|
-
if (typeof parsed === "string") {
|
|
69
|
-
return { csrf: parsed };
|
|
70
|
-
} else if (parsed && typeof parsed === "object") {
|
|
71
|
-
return {
|
|
72
|
-
csrf: parsed.csrf || state,
|
|
73
|
-
returnUrl: parsed.returnUrl
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
return { csrf: state };
|
|
77
|
-
} catch {
|
|
78
|
-
return { csrf: state };
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
function base64UrlEncode(array) {
|
|
82
|
-
let base64 = "";
|
|
83
|
-
if (typeof Buffer !== "undefined") {
|
|
84
|
-
base64 = Buffer.from(array).toString("base64");
|
|
85
|
-
} else {
|
|
86
|
-
const binary = String.fromCharCode(...array);
|
|
87
|
-
base64 = btoa(binary);
|
|
88
|
-
}
|
|
89
|
-
return base64.replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
|
|
90
|
-
}
|
|
91
|
-
function base64UrlDecode(str) {
|
|
92
|
-
let base64 = str.replace(/-/g, "+").replace(/_/g, "/");
|
|
93
|
-
while (base64.length % 4 !== 0) {
|
|
94
|
-
base64 += "=";
|
|
95
|
-
}
|
|
96
|
-
if (typeof Buffer !== "undefined") {
|
|
97
|
-
return Buffer.from(base64, "base64").toString("utf-8");
|
|
98
|
-
} else {
|
|
99
|
-
const binary = atob(base64);
|
|
100
|
-
const bytes = new Uint8Array(binary.length);
|
|
101
|
-
for (let i = 0;i < binary.length; i++) {
|
|
102
|
-
bytes[i] = binary.charCodeAt(i);
|
|
103
|
-
}
|
|
104
|
-
const decoder = new TextDecoder;
|
|
105
|
-
return decoder.decode(bytes);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
13
|
// src/adapters/base-handler.ts
|
|
110
|
-
var MCP_SERVER_URL = "https://mcp.integrate.dev/api/v1/mcp";
|
|
111
|
-
|
|
112
14
|
class OAuthHandler {
|
|
113
15
|
config;
|
|
114
16
|
serverUrl;
|
|
@@ -235,6 +137,138 @@ class OAuthHandler {
|
|
|
235
137
|
const data = await response.json();
|
|
236
138
|
return data;
|
|
237
139
|
}
|
|
140
|
+
async handleToolCall(request, authHeader) {
|
|
141
|
+
const url = new URL("/tools/call", this.serverUrl);
|
|
142
|
+
const headers = this.getHeaders({
|
|
143
|
+
"Content-Type": "application/json"
|
|
144
|
+
});
|
|
145
|
+
if (authHeader && authHeader.startsWith("Bearer ")) {
|
|
146
|
+
headers["Authorization"] = authHeader;
|
|
147
|
+
}
|
|
148
|
+
const jsonRpcRequest = {
|
|
149
|
+
jsonrpc: "2.0",
|
|
150
|
+
id: Date.now() + Math.random(),
|
|
151
|
+
method: "tools/call",
|
|
152
|
+
params: {
|
|
153
|
+
name: request.name,
|
|
154
|
+
arguments: request.arguments || {}
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
const response = await fetch(url.toString(), {
|
|
158
|
+
method: "POST",
|
|
159
|
+
headers,
|
|
160
|
+
body: JSON.stringify(jsonRpcRequest)
|
|
161
|
+
});
|
|
162
|
+
if (!response.ok) {
|
|
163
|
+
const error = await response.text();
|
|
164
|
+
throw new Error(`MCP server failed to execute tool call: ${error}`);
|
|
165
|
+
}
|
|
166
|
+
const jsonRpcResponse = await response.json();
|
|
167
|
+
if (jsonRpcResponse.error) {
|
|
168
|
+
const error = new Error(jsonRpcResponse.error.message || "Tool call failed");
|
|
169
|
+
error.code = jsonRpcResponse.error.code;
|
|
170
|
+
error.data = jsonRpcResponse.error.data;
|
|
171
|
+
throw error;
|
|
172
|
+
}
|
|
173
|
+
return jsonRpcResponse.result;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
var MCP_SERVER_URL = "https://mcp.integrate.dev/api/v1/mcp";
|
|
177
|
+
|
|
178
|
+
// src/oauth/pkce.ts
|
|
179
|
+
var exports_pkce = {};
|
|
180
|
+
__export(exports_pkce, {
|
|
181
|
+
parseState: () => parseState,
|
|
182
|
+
generateStateWithReturnUrl: () => generateStateWithReturnUrl,
|
|
183
|
+
generateState: () => generateState,
|
|
184
|
+
generateCodeVerifier: () => generateCodeVerifier,
|
|
185
|
+
generateCodeChallenge: () => generateCodeChallenge
|
|
186
|
+
});
|
|
187
|
+
function generateCodeVerifier() {
|
|
188
|
+
const array = new Uint8Array(32);
|
|
189
|
+
if (typeof crypto !== "undefined" && crypto.getRandomValues) {
|
|
190
|
+
crypto.getRandomValues(array);
|
|
191
|
+
} else if (typeof globalThis !== "undefined" && globalThis.crypto) {
|
|
192
|
+
globalThis.crypto.getRandomValues(array);
|
|
193
|
+
} else {
|
|
194
|
+
throw new Error("crypto.getRandomValues is not available. Please use Node.js 19+ or a modern browser.");
|
|
195
|
+
}
|
|
196
|
+
return base64UrlEncode(array);
|
|
197
|
+
}
|
|
198
|
+
async function generateCodeChallenge(verifier) {
|
|
199
|
+
const encoder = new TextEncoder;
|
|
200
|
+
const data = encoder.encode(verifier);
|
|
201
|
+
let hashBuffer;
|
|
202
|
+
if (typeof crypto !== "undefined" && crypto.subtle) {
|
|
203
|
+
hashBuffer = await crypto.subtle.digest("SHA-256", data);
|
|
204
|
+
} else if (typeof globalThis !== "undefined" && globalThis.crypto?.subtle) {
|
|
205
|
+
hashBuffer = await globalThis.crypto.subtle.digest("SHA-256", data);
|
|
206
|
+
} else {
|
|
207
|
+
throw new Error("crypto.subtle.digest is not available. Please use Node.js 19+ or a modern browser.");
|
|
208
|
+
}
|
|
209
|
+
return base64UrlEncode(new Uint8Array(hashBuffer));
|
|
210
|
+
}
|
|
211
|
+
function generateState() {
|
|
212
|
+
const array = new Uint8Array(16);
|
|
213
|
+
if (typeof crypto !== "undefined" && crypto.getRandomValues) {
|
|
214
|
+
crypto.getRandomValues(array);
|
|
215
|
+
} else if (typeof globalThis !== "undefined" && globalThis.crypto) {
|
|
216
|
+
globalThis.crypto.getRandomValues(array);
|
|
217
|
+
} else {
|
|
218
|
+
throw new Error("crypto.getRandomValues is not available. Please use Node.js 19+ or a modern browser.");
|
|
219
|
+
}
|
|
220
|
+
return base64UrlEncode(array);
|
|
221
|
+
}
|
|
222
|
+
function generateStateWithReturnUrl(returnUrl) {
|
|
223
|
+
const csrf = generateState();
|
|
224
|
+
const stateData = returnUrl ? { csrf, returnUrl } : { csrf };
|
|
225
|
+
const encoder = new TextEncoder;
|
|
226
|
+
const jsonBytes = encoder.encode(JSON.stringify(stateData));
|
|
227
|
+
return base64UrlEncode(jsonBytes);
|
|
228
|
+
}
|
|
229
|
+
function parseState(state) {
|
|
230
|
+
try {
|
|
231
|
+
const decoded = base64UrlDecode(state);
|
|
232
|
+
const parsed = JSON.parse(decoded);
|
|
233
|
+
if (typeof parsed === "string") {
|
|
234
|
+
return { csrf: parsed };
|
|
235
|
+
} else if (parsed && typeof parsed === "object") {
|
|
236
|
+
return {
|
|
237
|
+
csrf: parsed.csrf || state,
|
|
238
|
+
returnUrl: parsed.returnUrl
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
return { csrf: state };
|
|
242
|
+
} catch {
|
|
243
|
+
return { csrf: state };
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
function base64UrlEncode(array) {
|
|
247
|
+
let base64 = "";
|
|
248
|
+
if (typeof Buffer !== "undefined") {
|
|
249
|
+
base64 = Buffer.from(array).toString("base64");
|
|
250
|
+
} else {
|
|
251
|
+
const binary = String.fromCharCode(...array);
|
|
252
|
+
base64 = btoa(binary);
|
|
253
|
+
}
|
|
254
|
+
return base64.replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
|
|
255
|
+
}
|
|
256
|
+
function base64UrlDecode(str) {
|
|
257
|
+
let base64 = str.replace(/-/g, "+").replace(/_/g, "/");
|
|
258
|
+
while (base64.length % 4 !== 0) {
|
|
259
|
+
base64 += "=";
|
|
260
|
+
}
|
|
261
|
+
if (typeof Buffer !== "undefined") {
|
|
262
|
+
return Buffer.from(base64, "base64").toString("utf-8");
|
|
263
|
+
} else {
|
|
264
|
+
const binary = atob(base64);
|
|
265
|
+
const bytes = new Uint8Array(binary.length);
|
|
266
|
+
for (let i = 0;i < binary.length; i++) {
|
|
267
|
+
bytes[i] = binary.charCodeAt(i);
|
|
268
|
+
}
|
|
269
|
+
const decoder = new TextDecoder;
|
|
270
|
+
return decoder.decode(bytes);
|
|
271
|
+
}
|
|
238
272
|
}
|
|
239
273
|
|
|
240
274
|
// src/adapters/nextjs.ts
|
|
@@ -312,6 +346,9 @@ function createNextOAuthHandler(config) {
|
|
|
312
346
|
if (action === "disconnect") {
|
|
313
347
|
return handlers.disconnect(req);
|
|
314
348
|
}
|
|
349
|
+
if (action === "mcp") {
|
|
350
|
+
return handlers.mcp(req);
|
|
351
|
+
}
|
|
315
352
|
return Response.json({ error: `Unknown action: ${action}` }, { status: 404 });
|
|
316
353
|
},
|
|
317
354
|
async GET(req, context) {
|
|
@@ -324,6 +361,17 @@ function createNextOAuthHandler(config) {
|
|
|
324
361
|
}
|
|
325
362
|
};
|
|
326
363
|
},
|
|
364
|
+
async mcp(req) {
|
|
365
|
+
try {
|
|
366
|
+
const body = await req.json();
|
|
367
|
+
const authHeader = req.headers.get("authorization");
|
|
368
|
+
const result = await handler.handleToolCall(body, authHeader);
|
|
369
|
+
return Response.json(result);
|
|
370
|
+
} catch (error) {
|
|
371
|
+
console.error("[MCP Tool Call] Error:", error);
|
|
372
|
+
return Response.json({ error: error.message || "Failed to execute tool call" }, { status: error.statusCode || 500 });
|
|
373
|
+
}
|
|
374
|
+
},
|
|
327
375
|
toNextJsHandler(redirectConfig) {
|
|
328
376
|
const defaultRedirectUrl = redirectConfig?.redirectUrl || "/";
|
|
329
377
|
const errorRedirectUrl = redirectConfig?.errorRedirectUrl || "/auth-error";
|
|
@@ -344,6 +392,9 @@ function createNextOAuthHandler(config) {
|
|
|
344
392
|
}
|
|
345
393
|
return Response.json({ error: `Unknown action: ${action}` }, { status: 404 });
|
|
346
394
|
}
|
|
395
|
+
if (segments.length === 1 && segments[0] === "mcp") {
|
|
396
|
+
return handlers.mcp(req);
|
|
397
|
+
}
|
|
347
398
|
return Response.json({ error: `Invalid route: /${segments.join("/")}` }, { status: 404 });
|
|
348
399
|
},
|
|
349
400
|
async GET(req, context) {
|
package/dist/adapters/node.js
CHANGED
|
@@ -11,8 +11,6 @@ var __export = (target, all) => {
|
|
|
11
11
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
12
12
|
|
|
13
13
|
// src/adapters/base-handler.ts
|
|
14
|
-
var MCP_SERVER_URL = "https://mcp.integrate.dev/api/v1/mcp";
|
|
15
|
-
|
|
16
14
|
class OAuthHandler {
|
|
17
15
|
config;
|
|
18
16
|
serverUrl;
|
|
@@ -139,7 +137,43 @@ class OAuthHandler {
|
|
|
139
137
|
const data = await response.json();
|
|
140
138
|
return data;
|
|
141
139
|
}
|
|
140
|
+
async handleToolCall(request, authHeader) {
|
|
141
|
+
const url = new URL("/tools/call", this.serverUrl);
|
|
142
|
+
const headers = this.getHeaders({
|
|
143
|
+
"Content-Type": "application/json"
|
|
144
|
+
});
|
|
145
|
+
if (authHeader && authHeader.startsWith("Bearer ")) {
|
|
146
|
+
headers["Authorization"] = authHeader;
|
|
147
|
+
}
|
|
148
|
+
const jsonRpcRequest = {
|
|
149
|
+
jsonrpc: "2.0",
|
|
150
|
+
id: Date.now() + Math.random(),
|
|
151
|
+
method: "tools/call",
|
|
152
|
+
params: {
|
|
153
|
+
name: request.name,
|
|
154
|
+
arguments: request.arguments || {}
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
const response = await fetch(url.toString(), {
|
|
158
|
+
method: "POST",
|
|
159
|
+
headers,
|
|
160
|
+
body: JSON.stringify(jsonRpcRequest)
|
|
161
|
+
});
|
|
162
|
+
if (!response.ok) {
|
|
163
|
+
const error = await response.text();
|
|
164
|
+
throw new Error(`MCP server failed to execute tool call: ${error}`);
|
|
165
|
+
}
|
|
166
|
+
const jsonRpcResponse = await response.json();
|
|
167
|
+
if (jsonRpcResponse.error) {
|
|
168
|
+
const error = new Error(jsonRpcResponse.error.message || "Tool call failed");
|
|
169
|
+
error.code = jsonRpcResponse.error.code;
|
|
170
|
+
error.data = jsonRpcResponse.error.data;
|
|
171
|
+
throw error;
|
|
172
|
+
}
|
|
173
|
+
return jsonRpcResponse.result;
|
|
174
|
+
}
|
|
142
175
|
}
|
|
176
|
+
var MCP_SERVER_URL = "https://mcp.integrate.dev/api/v1/mcp";
|
|
143
177
|
|
|
144
178
|
// src/adapters/node.ts
|
|
145
179
|
function fromNodeHeaders(nodeHeaders) {
|