integrate-sdk 0.7.37 → 0.7.39
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/ai/anthropic.d.ts +67 -0
- package/dist/ai/anthropic.d.ts.map +1 -1
- package/dist/ai/anthropic.js +20 -0
- package/dist/ai/index.js +62 -0
- package/dist/ai/openai.d.ts +97 -0
- package/dist/ai/openai.d.ts.map +1 -1
- package/dist/ai/openai.js +42 -0
- package/dist/server.js +62 -0
- package/dist/src/ai/anthropic.d.ts +67 -0
- package/dist/src/ai/anthropic.d.ts.map +1 -1
- package/dist/src/ai/openai.d.ts +97 -0
- package/dist/src/ai/openai.d.ts.map +1 -1
- package/package.json +3 -1
package/dist/ai/anthropic.d.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import type { MCPClient } from "../client.js";
|
|
7
7
|
import type { MCPTool } from "../protocol/messages.js";
|
|
8
8
|
import { type AIToolsOptions } from "./utils.js";
|
|
9
|
+
import type Anthropic from "@anthropic-ai/sdk";
|
|
9
10
|
/**
|
|
10
11
|
* Anthropic tool definition
|
|
11
12
|
* Compatible with Anthropic's Claude API
|
|
@@ -179,4 +180,70 @@ export declare function handleAnthropicToolCalls(client: MCPClient<any>, message
|
|
|
179
180
|
* ```
|
|
180
181
|
*/
|
|
181
182
|
export declare function getAnthropicTools(client: MCPClient<any>, options?: AnthropicToolsOptions): Promise<AnthropicTool[]>;
|
|
183
|
+
/**
|
|
184
|
+
* Handle an entire Anthropic Message object
|
|
185
|
+
*
|
|
186
|
+
* This is a convenience function that extracts tool calls from a Message
|
|
187
|
+
* object, executes them, and returns the results formatted as MessageParam
|
|
188
|
+
* ready to be passed directly to the next API call.
|
|
189
|
+
*
|
|
190
|
+
* **Auto-extraction**: Provider tokens are automatically extracted from request headers
|
|
191
|
+
* or environment variables if not provided in options.
|
|
192
|
+
*
|
|
193
|
+
* @param client - The MCP client instance
|
|
194
|
+
* @param message - The complete Message object from Anthropic
|
|
195
|
+
* @param options - Optional configuration including provider tokens
|
|
196
|
+
* @returns Array with a single user message containing tool results, or empty array if no tool calls
|
|
197
|
+
*
|
|
198
|
+
* @example
|
|
199
|
+
* ```typescript
|
|
200
|
+
* import { serverClient } from '@/lib/integrate-server';
|
|
201
|
+
* import { getAnthropicTools, handleAnthropicMessage } from 'integrate-sdk/server';
|
|
202
|
+
* import Anthropic from '@anthropic-ai/sdk';
|
|
203
|
+
*
|
|
204
|
+
* const anthropic = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });
|
|
205
|
+
*
|
|
206
|
+
* export async function POST(req: Request) {
|
|
207
|
+
* const { messages } = await req.json();
|
|
208
|
+
*
|
|
209
|
+
* // Initial request with tools
|
|
210
|
+
* const message = await anthropic.messages.create({
|
|
211
|
+
* model: 'claude-3-5-sonnet-20241022',
|
|
212
|
+
* max_tokens: 1024,
|
|
213
|
+
* tools: await getAnthropicTools(serverClient),
|
|
214
|
+
* messages,
|
|
215
|
+
* });
|
|
216
|
+
*
|
|
217
|
+
* // If there are tool calls, handle them automatically
|
|
218
|
+
* if (message.stop_reason === 'tool_use') {
|
|
219
|
+
* const toolMessages = await handleAnthropicMessage(serverClient, message);
|
|
220
|
+
*
|
|
221
|
+
* // Continue conversation with tool results
|
|
222
|
+
* const finalMessage = await anthropic.messages.create({
|
|
223
|
+
* model: 'claude-3-5-sonnet-20241022',
|
|
224
|
+
* max_tokens: 1024,
|
|
225
|
+
* tools: await getAnthropicTools(serverClient),
|
|
226
|
+
* messages: [
|
|
227
|
+
* ...messages,
|
|
228
|
+
* { role: 'assistant', content: message.content },
|
|
229
|
+
* ...toolMessages,
|
|
230
|
+
* ],
|
|
231
|
+
* });
|
|
232
|
+
*
|
|
233
|
+
* return Response.json(finalMessage);
|
|
234
|
+
* }
|
|
235
|
+
*
|
|
236
|
+
* return Response.json(message);
|
|
237
|
+
* }
|
|
238
|
+
* ```
|
|
239
|
+
*
|
|
240
|
+
* @example
|
|
241
|
+
* ```typescript
|
|
242
|
+
* // Manual token override
|
|
243
|
+
* const toolMessages = await handleAnthropicMessage(serverClient, message, {
|
|
244
|
+
* providerTokens: { github: 'ghp_...', gmail: 'ya29...' }
|
|
245
|
+
* });
|
|
246
|
+
* ```
|
|
247
|
+
*/
|
|
248
|
+
export declare function handleAnthropicMessage(client: MCPClient<any>, message: Anthropic.Messages.Message, options?: AnthropicToolsOptions): Promise<Anthropic.Messages.MessageParam[]>;
|
|
182
249
|
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/ai/anthropic.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAkE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/ai/anthropic.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAkE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AACjH,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,cAAc;CAAI;AAEjE;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,aAAa,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,EACvB,QAAQ,CAAC,EAAE,qBAAqB,GAC/B,aAAa,CAUf;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,aAAa,EAAE,CAGjB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,EAAE,qBAAqB,EAC9B,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,cAAc,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAA,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAAC,EAC1D,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAkCrC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,aAAa,EAAE,CAAC,CAe1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,OAAO,EACnC,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CA4B5C"}
|
package/dist/ai/anthropic.js
CHANGED
|
@@ -4256,8 +4256,28 @@ async function getAnthropicTools(client, options) {
|
|
|
4256
4256
|
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
4257
4257
|
return convertMCPToolsToAnthropic(client, finalOptions);
|
|
4258
4258
|
}
|
|
4259
|
+
async function handleAnthropicMessage(client, message, options) {
|
|
4260
|
+
let providerTokens = options?.providerTokens;
|
|
4261
|
+
if (!providerTokens) {
|
|
4262
|
+
try {
|
|
4263
|
+
providerTokens = await getProviderTokens();
|
|
4264
|
+
} catch {}
|
|
4265
|
+
}
|
|
4266
|
+
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
4267
|
+
const toolResults = await handleAnthropicToolCalls(client, message.content, finalOptions);
|
|
4268
|
+
if (toolResults.length === 0) {
|
|
4269
|
+
return [];
|
|
4270
|
+
}
|
|
4271
|
+
return [
|
|
4272
|
+
{
|
|
4273
|
+
role: "user",
|
|
4274
|
+
content: toolResults
|
|
4275
|
+
}
|
|
4276
|
+
];
|
|
4277
|
+
}
|
|
4259
4278
|
export {
|
|
4260
4279
|
handleAnthropicToolCalls,
|
|
4280
|
+
handleAnthropicMessage,
|
|
4261
4281
|
getAnthropicTools,
|
|
4262
4282
|
executeAnthropicToolCall,
|
|
4263
4283
|
convertMCPToolsToAnthropic,
|
package/dist/ai/index.js
CHANGED
|
@@ -4256,6 +4256,25 @@ async function getAnthropicTools(client, options) {
|
|
|
4256
4256
|
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
4257
4257
|
return convertMCPToolsToAnthropic(client, finalOptions);
|
|
4258
4258
|
}
|
|
4259
|
+
async function handleAnthropicMessage(client, message, options) {
|
|
4260
|
+
let providerTokens = options?.providerTokens;
|
|
4261
|
+
if (!providerTokens) {
|
|
4262
|
+
try {
|
|
4263
|
+
providerTokens = await getProviderTokens();
|
|
4264
|
+
} catch {}
|
|
4265
|
+
}
|
|
4266
|
+
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
4267
|
+
const toolResults = await handleAnthropicToolCalls(client, message.content, finalOptions);
|
|
4268
|
+
if (toolResults.length === 0) {
|
|
4269
|
+
return [];
|
|
4270
|
+
}
|
|
4271
|
+
return [
|
|
4272
|
+
{
|
|
4273
|
+
role: "user",
|
|
4274
|
+
content: toolResults
|
|
4275
|
+
}
|
|
4276
|
+
];
|
|
4277
|
+
}
|
|
4259
4278
|
|
|
4260
4279
|
// cloudflare.ts
|
|
4261
4280
|
function convertMCPToolToCloudflare(mcpTool, _client, _options) {
|
|
@@ -4391,6 +4410,46 @@ async function getOpenAITools(client, options) {
|
|
|
4391
4410
|
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
4392
4411
|
return convertMCPToolsToOpenAI(client, finalOptions);
|
|
4393
4412
|
}
|
|
4413
|
+
async function handleOpenAIToolCalls(client, toolCalls, options) {
|
|
4414
|
+
const toolOutputs = [];
|
|
4415
|
+
for (const output of toolCalls) {
|
|
4416
|
+
if (output.type === "function_call") {
|
|
4417
|
+
const toolCall = {
|
|
4418
|
+
id: output.id ?? "",
|
|
4419
|
+
name: output.name,
|
|
4420
|
+
arguments: output.arguments
|
|
4421
|
+
};
|
|
4422
|
+
try {
|
|
4423
|
+
const result = await executeOpenAIToolCall(client, toolCall, options);
|
|
4424
|
+
toolOutputs.push({
|
|
4425
|
+
call_id: output.call_id ?? output.id ?? "",
|
|
4426
|
+
type: "function_call_output",
|
|
4427
|
+
output: result,
|
|
4428
|
+
status: "completed"
|
|
4429
|
+
});
|
|
4430
|
+
} catch (error) {
|
|
4431
|
+
toolOutputs.push({
|
|
4432
|
+
call_id: output.call_id ?? output.id ?? "",
|
|
4433
|
+
type: "function_call_output",
|
|
4434
|
+
output: error instanceof Error ? error.message : "Unknown error",
|
|
4435
|
+
status: "incomplete"
|
|
4436
|
+
});
|
|
4437
|
+
}
|
|
4438
|
+
}
|
|
4439
|
+
}
|
|
4440
|
+
return toolOutputs;
|
|
4441
|
+
}
|
|
4442
|
+
async function handleOpenAIResponse(client, response, options) {
|
|
4443
|
+
let providerTokens = options?.providerTokens;
|
|
4444
|
+
if (!providerTokens) {
|
|
4445
|
+
try {
|
|
4446
|
+
providerTokens = await getProviderTokens();
|
|
4447
|
+
} catch {}
|
|
4448
|
+
}
|
|
4449
|
+
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
4450
|
+
const functionCalls = response.output.filter((output) => output.type === "function_call");
|
|
4451
|
+
return handleOpenAIToolCalls(client, functionCalls, finalOptions);
|
|
4452
|
+
}
|
|
4394
4453
|
|
|
4395
4454
|
// openai-agents.ts
|
|
4396
4455
|
function convertMCPToolToOpenAIAgents(mcpTool, client, options) {
|
|
@@ -4536,7 +4595,10 @@ export {
|
|
|
4536
4595
|
tryGetProviderTokens,
|
|
4537
4596
|
jsonSchemaToZod,
|
|
4538
4597
|
jsonSchemaPropertyToZod,
|
|
4598
|
+
handleOpenAIToolCalls,
|
|
4599
|
+
handleOpenAIResponse,
|
|
4539
4600
|
handleAnthropicToolCalls,
|
|
4601
|
+
handleAnthropicMessage,
|
|
4540
4602
|
getVercelAITools,
|
|
4541
4603
|
getProviderTokens,
|
|
4542
4604
|
getProviderForTool,
|
package/dist/ai/openai.d.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import type { MCPClient } from "../client.js";
|
|
7
7
|
import type { MCPTool } from "../protocol/messages.js";
|
|
8
8
|
import { type AIToolsOptions } from "./utils.js";
|
|
9
|
+
import type { OpenAI } from "openai";
|
|
9
10
|
/**
|
|
10
11
|
* OpenAI function tool definition
|
|
11
12
|
* Compatible with OpenAI's Responses API format
|
|
@@ -124,4 +125,100 @@ export declare function executeOpenAIToolCall(client: MCPClient<any>, toolCall:
|
|
|
124
125
|
* ```
|
|
125
126
|
*/
|
|
126
127
|
export declare function getOpenAITools(client: MCPClient<any>, options?: OpenAIToolsOptions): Promise<OpenAITool[]>;
|
|
128
|
+
/**
|
|
129
|
+
* Handle multiple tool calls from OpenAI's response output
|
|
130
|
+
*
|
|
131
|
+
* This function processes all function_call items from the response output,
|
|
132
|
+
* executes each tool call, and returns formatted results for the next request.
|
|
133
|
+
*
|
|
134
|
+
* @param client - The MCP client instance
|
|
135
|
+
* @param toolCalls - Array of output items from OpenAI response (filters for function_call type)
|
|
136
|
+
* @param options - Optional configuration including provider tokens
|
|
137
|
+
* @returns Array of function call outputs to send back to OpenAI
|
|
138
|
+
*
|
|
139
|
+
* @example
|
|
140
|
+
* ```typescript
|
|
141
|
+
* // Handle tool calls from a response
|
|
142
|
+
* const response = await openai.responses.create({
|
|
143
|
+
* model: 'gpt-4o-2024-11-20',
|
|
144
|
+
* input: 'Create a GitHub issue',
|
|
145
|
+
* tools: await getOpenAITools(serverClient),
|
|
146
|
+
* });
|
|
147
|
+
*
|
|
148
|
+
* // Execute the tool calls and get outputs
|
|
149
|
+
* const toolOutputs = await handleOpenAIToolCalls(
|
|
150
|
+
* serverClient,
|
|
151
|
+
* response.output,
|
|
152
|
+
* { providerTokens }
|
|
153
|
+
* );
|
|
154
|
+
*
|
|
155
|
+
* // Continue the conversation with tool results
|
|
156
|
+
* const nextResponse = await openai.responses.create({
|
|
157
|
+
* model: 'gpt-4o-2024-11-20',
|
|
158
|
+
* input: toolOutputs,
|
|
159
|
+
* tools: await getOpenAITools(serverClient),
|
|
160
|
+
* });
|
|
161
|
+
* ```
|
|
162
|
+
*/
|
|
163
|
+
export declare function handleOpenAIToolCalls(client: MCPClient<any>, toolCalls: OpenAI.Responses.ResponseOutputItem[], options?: OpenAIToolsOptions): Promise<OpenAI.Responses.ResponseInputItem.FunctionCallOutput[]>;
|
|
164
|
+
/**
|
|
165
|
+
* Handle an entire OpenAI Response object
|
|
166
|
+
*
|
|
167
|
+
* This is a convenience function that extracts tool calls from a Response
|
|
168
|
+
* object and executes them. Use this when you want to process all tool
|
|
169
|
+
* calls from a response in one go.
|
|
170
|
+
*
|
|
171
|
+
* **Auto-extraction**: Provider tokens are automatically extracted from request headers
|
|
172
|
+
* or environment variables if not provided in options.
|
|
173
|
+
*
|
|
174
|
+
* @param client - The MCP client instance
|
|
175
|
+
* @param response - The complete Response object from OpenAI
|
|
176
|
+
* @param options - Optional configuration including provider tokens
|
|
177
|
+
* @returns Array of function call outputs to send back to OpenAI
|
|
178
|
+
*
|
|
179
|
+
* @example
|
|
180
|
+
* ```typescript
|
|
181
|
+
* import { serverClient } from '@/lib/integrate-server';
|
|
182
|
+
* import { getOpenAITools, handleOpenAIResponse } from 'integrate-sdk/server';
|
|
183
|
+
* import OpenAI from 'openai';
|
|
184
|
+
*
|
|
185
|
+
* const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
|
|
186
|
+
*
|
|
187
|
+
* export async function POST(req: Request) {
|
|
188
|
+
* const { messages } = await req.json();
|
|
189
|
+
*
|
|
190
|
+
* // Initial request with tools
|
|
191
|
+
* const response = await openai.responses.create({
|
|
192
|
+
* model: 'gpt-4o-2024-11-20',
|
|
193
|
+
* input: messages,
|
|
194
|
+
* tools: await getOpenAITools(serverClient),
|
|
195
|
+
* });
|
|
196
|
+
*
|
|
197
|
+
* // If there are tool calls, handle them automatically
|
|
198
|
+
* if (response.output.some(item => item.type === 'function_call')) {
|
|
199
|
+
* const toolOutputs = await handleOpenAIResponse(serverClient, response);
|
|
200
|
+
*
|
|
201
|
+
* // Continue conversation with tool results
|
|
202
|
+
* const finalResponse = await openai.responses.create({
|
|
203
|
+
* model: 'gpt-4o-2024-11-20',
|
|
204
|
+
* input: toolOutputs,
|
|
205
|
+
* tools: await getOpenAITools(serverClient),
|
|
206
|
+
* });
|
|
207
|
+
*
|
|
208
|
+
* return Response.json(finalResponse);
|
|
209
|
+
* }
|
|
210
|
+
*
|
|
211
|
+
* return Response.json(response);
|
|
212
|
+
* }
|
|
213
|
+
* ```
|
|
214
|
+
*
|
|
215
|
+
* @example
|
|
216
|
+
* ```typescript
|
|
217
|
+
* // Manual token override
|
|
218
|
+
* const toolOutputs = await handleOpenAIResponse(serverClient, response, {
|
|
219
|
+
* providerTokens: { github: 'ghp_...', gmail: 'ya29...' }
|
|
220
|
+
* });
|
|
221
|
+
* ```
|
|
222
|
+
*/
|
|
223
|
+
export declare function handleOpenAIResponse(client: MCPClient<any>, response: OpenAI.Responses.Response, options?: OpenAIToolsOptions): Promise<OpenAI.Responses.ResponseInputItem.FunctionCallOutput[]>;
|
|
127
224
|
//# sourceMappingURL=openai.d.ts.map
|
package/dist/ai/openai.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/ai/openai.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAkE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/ai/openai.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAkE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AACjH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE;QACV,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,GAAG,IAAI,CAAC;IACT,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,EACvB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,UAAU,CAUZ;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,UAAU,EAAE,CAGd;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,QAAQ,EAAE;IACR,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,EACD,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,UAAU,EAAE,CAAC,CAevB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,kBAAkB,EAAE,EAChD,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,CAAC,CA+BlE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EACnC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,CAAC,CAoBlE"}
|
package/dist/ai/openai.js
CHANGED
|
@@ -4233,7 +4233,49 @@ async function getOpenAITools(client, options) {
|
|
|
4233
4233
|
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
4234
4234
|
return convertMCPToolsToOpenAI(client, finalOptions);
|
|
4235
4235
|
}
|
|
4236
|
+
async function handleOpenAIToolCalls(client, toolCalls, options) {
|
|
4237
|
+
const toolOutputs = [];
|
|
4238
|
+
for (const output of toolCalls) {
|
|
4239
|
+
if (output.type === "function_call") {
|
|
4240
|
+
const toolCall = {
|
|
4241
|
+
id: output.id ?? "",
|
|
4242
|
+
name: output.name,
|
|
4243
|
+
arguments: output.arguments
|
|
4244
|
+
};
|
|
4245
|
+
try {
|
|
4246
|
+
const result = await executeOpenAIToolCall(client, toolCall, options);
|
|
4247
|
+
toolOutputs.push({
|
|
4248
|
+
call_id: output.call_id ?? output.id ?? "",
|
|
4249
|
+
type: "function_call_output",
|
|
4250
|
+
output: result,
|
|
4251
|
+
status: "completed"
|
|
4252
|
+
});
|
|
4253
|
+
} catch (error) {
|
|
4254
|
+
toolOutputs.push({
|
|
4255
|
+
call_id: output.call_id ?? output.id ?? "",
|
|
4256
|
+
type: "function_call_output",
|
|
4257
|
+
output: error instanceof Error ? error.message : "Unknown error",
|
|
4258
|
+
status: "incomplete"
|
|
4259
|
+
});
|
|
4260
|
+
}
|
|
4261
|
+
}
|
|
4262
|
+
}
|
|
4263
|
+
return toolOutputs;
|
|
4264
|
+
}
|
|
4265
|
+
async function handleOpenAIResponse(client, response, options) {
|
|
4266
|
+
let providerTokens = options?.providerTokens;
|
|
4267
|
+
if (!providerTokens) {
|
|
4268
|
+
try {
|
|
4269
|
+
providerTokens = await getProviderTokens();
|
|
4270
|
+
} catch {}
|
|
4271
|
+
}
|
|
4272
|
+
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
4273
|
+
const functionCalls = response.output.filter((output) => output.type === "function_call");
|
|
4274
|
+
return handleOpenAIToolCalls(client, functionCalls, finalOptions);
|
|
4275
|
+
}
|
|
4236
4276
|
export {
|
|
4277
|
+
handleOpenAIToolCalls,
|
|
4278
|
+
handleOpenAIResponse,
|
|
4237
4279
|
getOpenAITools,
|
|
4238
4280
|
executeOpenAIToolCall,
|
|
4239
4281
|
convertMCPToolsToOpenAI,
|
package/dist/server.js
CHANGED
|
@@ -6532,6 +6532,46 @@ async function getOpenAITools(client, options) {
|
|
|
6532
6532
|
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
6533
6533
|
return convertMCPToolsToOpenAI(client, finalOptions);
|
|
6534
6534
|
}
|
|
6535
|
+
async function handleOpenAIToolCalls(client, toolCalls, options) {
|
|
6536
|
+
const toolOutputs = [];
|
|
6537
|
+
for (const output of toolCalls) {
|
|
6538
|
+
if (output.type === "function_call") {
|
|
6539
|
+
const toolCall = {
|
|
6540
|
+
id: output.id ?? "",
|
|
6541
|
+
name: output.name,
|
|
6542
|
+
arguments: output.arguments
|
|
6543
|
+
};
|
|
6544
|
+
try {
|
|
6545
|
+
const result = await executeOpenAIToolCall(client, toolCall, options);
|
|
6546
|
+
toolOutputs.push({
|
|
6547
|
+
call_id: output.call_id ?? output.id ?? "",
|
|
6548
|
+
type: "function_call_output",
|
|
6549
|
+
output: result,
|
|
6550
|
+
status: "completed"
|
|
6551
|
+
});
|
|
6552
|
+
} catch (error) {
|
|
6553
|
+
toolOutputs.push({
|
|
6554
|
+
call_id: output.call_id ?? output.id ?? "",
|
|
6555
|
+
type: "function_call_output",
|
|
6556
|
+
output: error instanceof Error ? error.message : "Unknown error",
|
|
6557
|
+
status: "incomplete"
|
|
6558
|
+
});
|
|
6559
|
+
}
|
|
6560
|
+
}
|
|
6561
|
+
}
|
|
6562
|
+
return toolOutputs;
|
|
6563
|
+
}
|
|
6564
|
+
async function handleOpenAIResponse(client, response, options) {
|
|
6565
|
+
let providerTokens = options?.providerTokens;
|
|
6566
|
+
if (!providerTokens) {
|
|
6567
|
+
try {
|
|
6568
|
+
providerTokens = await getProviderTokens();
|
|
6569
|
+
} catch {}
|
|
6570
|
+
}
|
|
6571
|
+
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
6572
|
+
const functionCalls = response.output.filter((output) => output.type === "function_call");
|
|
6573
|
+
return handleOpenAIToolCalls(client, functionCalls, finalOptions);
|
|
6574
|
+
}
|
|
6535
6575
|
// src/ai/openai-agents.ts
|
|
6536
6576
|
function convertMCPToolToOpenAIAgents(mcpTool, client, options) {
|
|
6537
6577
|
return {
|
|
@@ -6612,6 +6652,25 @@ async function getAnthropicTools(client, options) {
|
|
|
6612
6652
|
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
6613
6653
|
return convertMCPToolsToAnthropic(client, finalOptions);
|
|
6614
6654
|
}
|
|
6655
|
+
async function handleAnthropicMessage(client, message, options) {
|
|
6656
|
+
let providerTokens = options?.providerTokens;
|
|
6657
|
+
if (!providerTokens) {
|
|
6658
|
+
try {
|
|
6659
|
+
providerTokens = await getProviderTokens();
|
|
6660
|
+
} catch {}
|
|
6661
|
+
}
|
|
6662
|
+
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
6663
|
+
const toolResults = await handleAnthropicToolCalls(client, message.content, finalOptions);
|
|
6664
|
+
if (toolResults.length === 0) {
|
|
6665
|
+
return [];
|
|
6666
|
+
}
|
|
6667
|
+
return [
|
|
6668
|
+
{
|
|
6669
|
+
role: "user",
|
|
6670
|
+
content: toolResults
|
|
6671
|
+
}
|
|
6672
|
+
];
|
|
6673
|
+
}
|
|
6615
6674
|
// src/ai/google.ts
|
|
6616
6675
|
function convertMCPToolToGoogle(mcpTool, _client, _options) {
|
|
6617
6676
|
return {
|
|
@@ -6963,7 +7022,10 @@ export {
|
|
|
6963
7022
|
svelteKitHandler,
|
|
6964
7023
|
jsonSchemaToZod,
|
|
6965
7024
|
jsonSchemaPropertyToZod,
|
|
7025
|
+
handleOpenAIToolCalls,
|
|
7026
|
+
handleOpenAIResponse,
|
|
6966
7027
|
handleAnthropicToolCalls,
|
|
7028
|
+
handleAnthropicMessage,
|
|
6967
7029
|
gmailIntegration,
|
|
6968
7030
|
githubIntegration,
|
|
6969
7031
|
getVercelAITools,
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import type { MCPClient } from "../client.js";
|
|
7
7
|
import type { MCPTool } from "../protocol/messages.js";
|
|
8
8
|
import { type AIToolsOptions } from "./utils.js";
|
|
9
|
+
import type Anthropic from "@anthropic-ai/sdk";
|
|
9
10
|
/**
|
|
10
11
|
* Anthropic tool definition
|
|
11
12
|
* Compatible with Anthropic's Claude API
|
|
@@ -179,4 +180,70 @@ export declare function handleAnthropicToolCalls(client: MCPClient<any>, message
|
|
|
179
180
|
* ```
|
|
180
181
|
*/
|
|
181
182
|
export declare function getAnthropicTools(client: MCPClient<any>, options?: AnthropicToolsOptions): Promise<AnthropicTool[]>;
|
|
183
|
+
/**
|
|
184
|
+
* Handle an entire Anthropic Message object
|
|
185
|
+
*
|
|
186
|
+
* This is a convenience function that extracts tool calls from a Message
|
|
187
|
+
* object, executes them, and returns the results formatted as MessageParam
|
|
188
|
+
* ready to be passed directly to the next API call.
|
|
189
|
+
*
|
|
190
|
+
* **Auto-extraction**: Provider tokens are automatically extracted from request headers
|
|
191
|
+
* or environment variables if not provided in options.
|
|
192
|
+
*
|
|
193
|
+
* @param client - The MCP client instance
|
|
194
|
+
* @param message - The complete Message object from Anthropic
|
|
195
|
+
* @param options - Optional configuration including provider tokens
|
|
196
|
+
* @returns Array with a single user message containing tool results, or empty array if no tool calls
|
|
197
|
+
*
|
|
198
|
+
* @example
|
|
199
|
+
* ```typescript
|
|
200
|
+
* import { serverClient } from '@/lib/integrate-server';
|
|
201
|
+
* import { getAnthropicTools, handleAnthropicMessage } from 'integrate-sdk/server';
|
|
202
|
+
* import Anthropic from '@anthropic-ai/sdk';
|
|
203
|
+
*
|
|
204
|
+
* const anthropic = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });
|
|
205
|
+
*
|
|
206
|
+
* export async function POST(req: Request) {
|
|
207
|
+
* const { messages } = await req.json();
|
|
208
|
+
*
|
|
209
|
+
* // Initial request with tools
|
|
210
|
+
* const message = await anthropic.messages.create({
|
|
211
|
+
* model: 'claude-3-5-sonnet-20241022',
|
|
212
|
+
* max_tokens: 1024,
|
|
213
|
+
* tools: await getAnthropicTools(serverClient),
|
|
214
|
+
* messages,
|
|
215
|
+
* });
|
|
216
|
+
*
|
|
217
|
+
* // If there are tool calls, handle them automatically
|
|
218
|
+
* if (message.stop_reason === 'tool_use') {
|
|
219
|
+
* const toolMessages = await handleAnthropicMessage(serverClient, message);
|
|
220
|
+
*
|
|
221
|
+
* // Continue conversation with tool results
|
|
222
|
+
* const finalMessage = await anthropic.messages.create({
|
|
223
|
+
* model: 'claude-3-5-sonnet-20241022',
|
|
224
|
+
* max_tokens: 1024,
|
|
225
|
+
* tools: await getAnthropicTools(serverClient),
|
|
226
|
+
* messages: [
|
|
227
|
+
* ...messages,
|
|
228
|
+
* { role: 'assistant', content: message.content },
|
|
229
|
+
* ...toolMessages,
|
|
230
|
+
* ],
|
|
231
|
+
* });
|
|
232
|
+
*
|
|
233
|
+
* return Response.json(finalMessage);
|
|
234
|
+
* }
|
|
235
|
+
*
|
|
236
|
+
* return Response.json(message);
|
|
237
|
+
* }
|
|
238
|
+
* ```
|
|
239
|
+
*
|
|
240
|
+
* @example
|
|
241
|
+
* ```typescript
|
|
242
|
+
* // Manual token override
|
|
243
|
+
* const toolMessages = await handleAnthropicMessage(serverClient, message, {
|
|
244
|
+
* providerTokens: { github: 'ghp_...', gmail: 'ya29...' }
|
|
245
|
+
* });
|
|
246
|
+
* ```
|
|
247
|
+
*/
|
|
248
|
+
export declare function handleAnthropicMessage(client: MCPClient<any>, message: Anthropic.Messages.Message, options?: AnthropicToolsOptions): Promise<Anthropic.Messages.MessageParam[]>;
|
|
182
249
|
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/ai/anthropic.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAkE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/ai/anthropic.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAkE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AACjH,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,cAAc;CAAI;AAEjE;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,aAAa,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,EACvB,QAAQ,CAAC,EAAE,qBAAqB,GAC/B,aAAa,CAUf;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,aAAa,EAAE,CAGjB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,EAAE,qBAAqB,EAC9B,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,cAAc,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAA,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAAC,EAC1D,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAkCrC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,aAAa,EAAE,CAAC,CAe1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,OAAO,EACnC,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CA4B5C"}
|
package/dist/src/ai/openai.d.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import type { MCPClient } from "../client.js";
|
|
7
7
|
import type { MCPTool } from "../protocol/messages.js";
|
|
8
8
|
import { type AIToolsOptions } from "./utils.js";
|
|
9
|
+
import type { OpenAI } from "openai";
|
|
9
10
|
/**
|
|
10
11
|
* OpenAI function tool definition
|
|
11
12
|
* Compatible with OpenAI's Responses API format
|
|
@@ -124,4 +125,100 @@ export declare function executeOpenAIToolCall(client: MCPClient<any>, toolCall:
|
|
|
124
125
|
* ```
|
|
125
126
|
*/
|
|
126
127
|
export declare function getOpenAITools(client: MCPClient<any>, options?: OpenAIToolsOptions): Promise<OpenAITool[]>;
|
|
128
|
+
/**
|
|
129
|
+
* Handle multiple tool calls from OpenAI's response output
|
|
130
|
+
*
|
|
131
|
+
* This function processes all function_call items from the response output,
|
|
132
|
+
* executes each tool call, and returns formatted results for the next request.
|
|
133
|
+
*
|
|
134
|
+
* @param client - The MCP client instance
|
|
135
|
+
* @param toolCalls - Array of output items from OpenAI response (filters for function_call type)
|
|
136
|
+
* @param options - Optional configuration including provider tokens
|
|
137
|
+
* @returns Array of function call outputs to send back to OpenAI
|
|
138
|
+
*
|
|
139
|
+
* @example
|
|
140
|
+
* ```typescript
|
|
141
|
+
* // Handle tool calls from a response
|
|
142
|
+
* const response = await openai.responses.create({
|
|
143
|
+
* model: 'gpt-4o-2024-11-20',
|
|
144
|
+
* input: 'Create a GitHub issue',
|
|
145
|
+
* tools: await getOpenAITools(serverClient),
|
|
146
|
+
* });
|
|
147
|
+
*
|
|
148
|
+
* // Execute the tool calls and get outputs
|
|
149
|
+
* const toolOutputs = await handleOpenAIToolCalls(
|
|
150
|
+
* serverClient,
|
|
151
|
+
* response.output,
|
|
152
|
+
* { providerTokens }
|
|
153
|
+
* );
|
|
154
|
+
*
|
|
155
|
+
* // Continue the conversation with tool results
|
|
156
|
+
* const nextResponse = await openai.responses.create({
|
|
157
|
+
* model: 'gpt-4o-2024-11-20',
|
|
158
|
+
* input: toolOutputs,
|
|
159
|
+
* tools: await getOpenAITools(serverClient),
|
|
160
|
+
* });
|
|
161
|
+
* ```
|
|
162
|
+
*/
|
|
163
|
+
export declare function handleOpenAIToolCalls(client: MCPClient<any>, toolCalls: OpenAI.Responses.ResponseOutputItem[], options?: OpenAIToolsOptions): Promise<OpenAI.Responses.ResponseInputItem.FunctionCallOutput[]>;
|
|
164
|
+
/**
|
|
165
|
+
* Handle an entire OpenAI Response object
|
|
166
|
+
*
|
|
167
|
+
* This is a convenience function that extracts tool calls from a Response
|
|
168
|
+
* object and executes them. Use this when you want to process all tool
|
|
169
|
+
* calls from a response in one go.
|
|
170
|
+
*
|
|
171
|
+
* **Auto-extraction**: Provider tokens are automatically extracted from request headers
|
|
172
|
+
* or environment variables if not provided in options.
|
|
173
|
+
*
|
|
174
|
+
* @param client - The MCP client instance
|
|
175
|
+
* @param response - The complete Response object from OpenAI
|
|
176
|
+
* @param options - Optional configuration including provider tokens
|
|
177
|
+
* @returns Array of function call outputs to send back to OpenAI
|
|
178
|
+
*
|
|
179
|
+
* @example
|
|
180
|
+
* ```typescript
|
|
181
|
+
* import { serverClient } from '@/lib/integrate-server';
|
|
182
|
+
* import { getOpenAITools, handleOpenAIResponse } from 'integrate-sdk/server';
|
|
183
|
+
* import OpenAI from 'openai';
|
|
184
|
+
*
|
|
185
|
+
* const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
|
|
186
|
+
*
|
|
187
|
+
* export async function POST(req: Request) {
|
|
188
|
+
* const { messages } = await req.json();
|
|
189
|
+
*
|
|
190
|
+
* // Initial request with tools
|
|
191
|
+
* const response = await openai.responses.create({
|
|
192
|
+
* model: 'gpt-4o-2024-11-20',
|
|
193
|
+
* input: messages,
|
|
194
|
+
* tools: await getOpenAITools(serverClient),
|
|
195
|
+
* });
|
|
196
|
+
*
|
|
197
|
+
* // If there are tool calls, handle them automatically
|
|
198
|
+
* if (response.output.some(item => item.type === 'function_call')) {
|
|
199
|
+
* const toolOutputs = await handleOpenAIResponse(serverClient, response);
|
|
200
|
+
*
|
|
201
|
+
* // Continue conversation with tool results
|
|
202
|
+
* const finalResponse = await openai.responses.create({
|
|
203
|
+
* model: 'gpt-4o-2024-11-20',
|
|
204
|
+
* input: toolOutputs,
|
|
205
|
+
* tools: await getOpenAITools(serverClient),
|
|
206
|
+
* });
|
|
207
|
+
*
|
|
208
|
+
* return Response.json(finalResponse);
|
|
209
|
+
* }
|
|
210
|
+
*
|
|
211
|
+
* return Response.json(response);
|
|
212
|
+
* }
|
|
213
|
+
* ```
|
|
214
|
+
*
|
|
215
|
+
* @example
|
|
216
|
+
* ```typescript
|
|
217
|
+
* // Manual token override
|
|
218
|
+
* const toolOutputs = await handleOpenAIResponse(serverClient, response, {
|
|
219
|
+
* providerTokens: { github: 'ghp_...', gmail: 'ya29...' }
|
|
220
|
+
* });
|
|
221
|
+
* ```
|
|
222
|
+
*/
|
|
223
|
+
export declare function handleOpenAIResponse(client: MCPClient<any>, response: OpenAI.Responses.Response, options?: OpenAIToolsOptions): Promise<OpenAI.Responses.ResponseInputItem.FunctionCallOutput[]>;
|
|
127
224
|
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/ai/openai.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAkE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/ai/openai.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAkE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AACjH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE;QACV,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,GAAG,IAAI,CAAC;IACT,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,EACvB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,UAAU,CAUZ;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,UAAU,EAAE,CAGd;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,QAAQ,EAAE;IACR,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,EACD,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,UAAU,EAAE,CAAC,CAevB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,kBAAkB,EAAE,EAChD,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,CAAC,CA+BlE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EACnC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,CAAC,CAoBlE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "integrate-sdk",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.39",
|
|
4
4
|
"description": "Type-safe 3rd party integration SDK for the Integrate MCP server",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -71,8 +71,10 @@
|
|
|
71
71
|
"zod": "^3.23.8"
|
|
72
72
|
},
|
|
73
73
|
"devDependencies": {
|
|
74
|
+
"@anthropic-ai/sdk": "^0.32.1",
|
|
74
75
|
"@types/bun": "latest",
|
|
75
76
|
"@types/react": "^18.3.0",
|
|
77
|
+
"openai": "^4.77.3",
|
|
76
78
|
"react": "^19.2.0",
|
|
77
79
|
"simple-git-hooks": "^2.13.1",
|
|
78
80
|
"typescript": "^5.3.3"
|