integrate-sdk 0.7.37 → 0.7.40

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.
@@ -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;AAEjH;;;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"}
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"}
@@ -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,49 @@ 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
+ if (functionCalls.length === 0) {
4452
+ return response;
4453
+ }
4454
+ return handleOpenAIToolCalls(client, functionCalls, finalOptions);
4455
+ }
4394
4456
 
4395
4457
  // openai-agents.ts
4396
4458
  function convertMCPToolToOpenAIAgents(mcpTool, client, options) {
@@ -4536,7 +4598,10 @@ export {
4536
4598
  tryGetProviderTokens,
4537
4599
  jsonSchemaToZod,
4538
4600
  jsonSchemaPropertyToZod,
4601
+ handleOpenAIToolCalls,
4602
+ handleOpenAIResponse,
4539
4603
  handleAnthropicToolCalls,
4604
+ handleAnthropicMessage,
4540
4605
  getVercelAITools,
4541
4606
  getProviderTokens,
4542
4607
  getProviderForTool,
@@ -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,110 @@ 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: {
224
+ output: Array<{
225
+ type: string;
226
+ [key: string]: any;
227
+ }>;
228
+ }, options?: OpenAIToolsOptions): Promise<OpenAI.Responses.ResponseInputItem.FunctionCallOutput[] | {
229
+ output: Array<{
230
+ type: string;
231
+ [key: string]: any;
232
+ }>;
233
+ }>;
127
234
  //# 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;AAEjH;;;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"}
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;IAAE,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAA,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC,CAAA;CAAE,EAChE,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,GAAG;IAAE,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAA,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAyB3H"}
package/dist/ai/openai.js CHANGED
@@ -4233,7 +4233,52 @@ 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
+ if (functionCalls.length === 0) {
4275
+ return response;
4276
+ }
4277
+ return handleOpenAIToolCalls(client, functionCalls, finalOptions);
4278
+ }
4236
4279
  export {
4280
+ handleOpenAIToolCalls,
4281
+ handleOpenAIResponse,
4237
4282
  getOpenAITools,
4238
4283
  executeOpenAIToolCall,
4239
4284
  convertMCPToolsToOpenAI,
package/dist/server.js CHANGED
@@ -6532,6 +6532,49 @@ 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
+ if (functionCalls.length === 0) {
6574
+ return response;
6575
+ }
6576
+ return handleOpenAIToolCalls(client, functionCalls, finalOptions);
6577
+ }
6535
6578
  // src/ai/openai-agents.ts
6536
6579
  function convertMCPToolToOpenAIAgents(mcpTool, client, options) {
6537
6580
  return {
@@ -6612,6 +6655,25 @@ async function getAnthropicTools(client, options) {
6612
6655
  const finalOptions = providerTokens ? { ...options, providerTokens } : options;
6613
6656
  return convertMCPToolsToAnthropic(client, finalOptions);
6614
6657
  }
6658
+ async function handleAnthropicMessage(client, message, options) {
6659
+ let providerTokens = options?.providerTokens;
6660
+ if (!providerTokens) {
6661
+ try {
6662
+ providerTokens = await getProviderTokens();
6663
+ } catch {}
6664
+ }
6665
+ const finalOptions = providerTokens ? { ...options, providerTokens } : options;
6666
+ const toolResults = await handleAnthropicToolCalls(client, message.content, finalOptions);
6667
+ if (toolResults.length === 0) {
6668
+ return [];
6669
+ }
6670
+ return [
6671
+ {
6672
+ role: "user",
6673
+ content: toolResults
6674
+ }
6675
+ ];
6676
+ }
6615
6677
  // src/ai/google.ts
6616
6678
  function convertMCPToolToGoogle(mcpTool, _client, _options) {
6617
6679
  return {
@@ -6963,7 +7025,10 @@ export {
6963
7025
  svelteKitHandler,
6964
7026
  jsonSchemaToZod,
6965
7027
  jsonSchemaPropertyToZod,
7028
+ handleOpenAIToolCalls,
7029
+ handleOpenAIResponse,
6966
7030
  handleAnthropicToolCalls,
7031
+ handleAnthropicMessage,
6967
7032
  gmailIntegration,
6968
7033
  githubIntegration,
6969
7034
  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;AAEjH;;;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"}
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"}
@@ -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,110 @@ 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: {
224
+ output: Array<{
225
+ type: string;
226
+ [key: string]: any;
227
+ }>;
228
+ }, options?: OpenAIToolsOptions): Promise<OpenAI.Responses.ResponseInputItem.FunctionCallOutput[] | {
229
+ output: Array<{
230
+ type: string;
231
+ [key: string]: any;
232
+ }>;
233
+ }>;
127
234
  //# 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;AAEjH;;;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"}
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;IAAE,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAA,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC,CAAA;CAAE,EAChE,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,GAAG;IAAE,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAA,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAyB3H"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "integrate-sdk",
3
- "version": "0.7.37",
3
+ "version": "0.7.40",
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"