@ai-sdk/openai 3.0.0-beta.53 → 3.0.0-beta.55

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.
@@ -2559,6 +2559,19 @@ var openaiResponsesChunkSchema = lazySchema12(
2559
2559
  ])
2560
2560
  ).nullable(),
2561
2561
  status: z14.string()
2562
+ }),
2563
+ z14.object({
2564
+ type: z14.literal("mcp_call"),
2565
+ id: z14.string(),
2566
+ status: z14.string()
2567
+ }),
2568
+ z14.object({
2569
+ type: z14.literal("mcp_list_tools"),
2570
+ id: z14.string()
2571
+ }),
2572
+ z14.object({
2573
+ type: z14.literal("mcp_approval_request"),
2574
+ id: z14.string()
2562
2575
  })
2563
2576
  ])
2564
2577
  }),
@@ -2660,6 +2673,52 @@ var openaiResponsesChunkSchema = lazySchema12(
2660
2673
  type: z14.literal("computer_call"),
2661
2674
  id: z14.string(),
2662
2675
  status: z14.literal("completed")
2676
+ }),
2677
+ z14.object({
2678
+ type: z14.literal("mcp_call"),
2679
+ id: z14.string(),
2680
+ status: z14.string(),
2681
+ arguments: z14.string(),
2682
+ name: z14.string(),
2683
+ server_label: z14.string(),
2684
+ output: z14.string().nullish(),
2685
+ error: z14.union([
2686
+ z14.string(),
2687
+ z14.object({
2688
+ type: z14.string().optional(),
2689
+ code: z14.union([z14.number(), z14.string()]).optional(),
2690
+ message: z14.string().optional()
2691
+ }).loose()
2692
+ ]).nullish()
2693
+ }),
2694
+ z14.object({
2695
+ type: z14.literal("mcp_list_tools"),
2696
+ id: z14.string(),
2697
+ server_label: z14.string(),
2698
+ tools: z14.array(
2699
+ z14.object({
2700
+ name: z14.string(),
2701
+ description: z14.string().optional(),
2702
+ input_schema: z14.any(),
2703
+ annotations: z14.record(z14.string(), z14.unknown()).optional()
2704
+ })
2705
+ ),
2706
+ error: z14.union([
2707
+ z14.string(),
2708
+ z14.object({
2709
+ type: z14.string().optional(),
2710
+ code: z14.union([z14.number(), z14.string()]).optional(),
2711
+ message: z14.string().optional()
2712
+ }).loose()
2713
+ ]).optional()
2714
+ }),
2715
+ z14.object({
2716
+ type: z14.literal("mcp_approval_request"),
2717
+ id: z14.string(),
2718
+ server_label: z14.string(),
2719
+ name: z14.string(),
2720
+ arguments: z14.string(),
2721
+ approval_request_id: z14.string()
2663
2722
  })
2664
2723
  ])
2665
2724
  }),
@@ -2915,6 +2974,52 @@ var openaiResponsesResponseSchema = lazySchema12(
2915
2974
  text: z14.string()
2916
2975
  })
2917
2976
  )
2977
+ }),
2978
+ z14.object({
2979
+ type: z14.literal("mcp_call"),
2980
+ id: z14.string(),
2981
+ status: z14.string(),
2982
+ arguments: z14.string(),
2983
+ name: z14.string(),
2984
+ server_label: z14.string(),
2985
+ output: z14.string().nullish(),
2986
+ error: z14.union([
2987
+ z14.string(),
2988
+ z14.object({
2989
+ type: z14.string().optional(),
2990
+ code: z14.union([z14.number(), z14.string()]).optional(),
2991
+ message: z14.string().optional()
2992
+ }).loose()
2993
+ ]).nullish()
2994
+ }),
2995
+ z14.object({
2996
+ type: z14.literal("mcp_list_tools"),
2997
+ id: z14.string(),
2998
+ server_label: z14.string(),
2999
+ tools: z14.array(
3000
+ z14.object({
3001
+ name: z14.string(),
3002
+ description: z14.string().optional(),
3003
+ input_schema: z14.any(),
3004
+ annotations: z14.record(z14.string(), z14.unknown()).optional()
3005
+ })
3006
+ ),
3007
+ error: z14.union([
3008
+ z14.string(),
3009
+ z14.object({
3010
+ type: z14.string().optional(),
3011
+ code: z14.union([z14.number(), z14.string()]).optional(),
3012
+ message: z14.string().optional()
3013
+ }).loose()
3014
+ ]).optional()
3015
+ }),
3016
+ z14.object({
3017
+ type: z14.literal("mcp_approval_request"),
3018
+ id: z14.string(),
3019
+ server_label: z14.string(),
3020
+ name: z14.string(),
3021
+ arguments: z14.string(),
3022
+ approval_request_id: z14.string()
2918
3023
  })
2919
3024
  ])
2920
3025
  ),
@@ -2937,12 +3042,16 @@ var TOP_LOGPROBS_MAX = 20;
2937
3042
  var openaiResponsesReasoningModelIds = [
2938
3043
  "o1",
2939
3044
  "o1-2024-12-17",
2940
- "o3-mini",
2941
- "o3-mini-2025-01-31",
2942
3045
  "o3",
2943
3046
  "o3-2025-04-16",
3047
+ "o3-deep-research",
3048
+ "o3-deep-research-2025-06-26",
3049
+ "o3-mini",
3050
+ "o3-mini-2025-01-31",
2944
3051
  "o4-mini",
2945
3052
  "o4-mini-2025-04-16",
3053
+ "o4-mini-deep-research",
3054
+ "o4-mini-deep-research-2025-06-26",
2946
3055
  "codex-mini-latest",
2947
3056
  "computer-use-preview",
2948
3057
  "gpt-5",
@@ -3296,6 +3405,97 @@ var imageGeneration = (args = {}) => {
3296
3405
  return imageGenerationToolFactory(args);
3297
3406
  };
3298
3407
 
3408
+ // src/tool/mcp.ts
3409
+ import {
3410
+ createProviderDefinedToolFactoryWithOutputSchema as createProviderDefinedToolFactoryWithOutputSchema7,
3411
+ lazySchema as lazySchema19,
3412
+ zodSchema as zodSchema19
3413
+ } from "@ai-sdk/provider-utils";
3414
+ import { z as z21 } from "zod/v4";
3415
+ var jsonValueSchema = z21.lazy(
3416
+ () => z21.union([
3417
+ z21.string(),
3418
+ z21.number(),
3419
+ z21.boolean(),
3420
+ z21.null(),
3421
+ z21.array(jsonValueSchema),
3422
+ z21.record(z21.string(), jsonValueSchema)
3423
+ ])
3424
+ );
3425
+ var mcpArgsSchema = lazySchema19(
3426
+ () => zodSchema19(
3427
+ z21.object({
3428
+ serverLabel: z21.string(),
3429
+ allowedTools: z21.union([
3430
+ z21.array(z21.string()),
3431
+ z21.object({
3432
+ readOnly: z21.boolean().optional(),
3433
+ toolNames: z21.array(z21.string()).optional()
3434
+ })
3435
+ ]).optional(),
3436
+ authorization: z21.string().optional(),
3437
+ connectorId: z21.string().optional(),
3438
+ headers: z21.record(z21.string(), z21.string()).optional(),
3439
+ // TODO: Integrate this MCP tool approval with our SDK's existing tool approval architecture
3440
+ // requireApproval: z
3441
+ // .union([
3442
+ // z.enum(['always', 'never']),
3443
+ // z.object({
3444
+ // readOnly: z.boolean().optional(),
3445
+ // toolNames: z.array(z.string()).optional(),
3446
+ // }),
3447
+ // ])
3448
+ // .optional(),
3449
+ serverDescription: z21.string().optional(),
3450
+ serverUrl: z21.string().optional()
3451
+ }).refine(
3452
+ (v) => v.serverUrl != null || v.connectorId != null,
3453
+ "One of serverUrl or connectorId must be provided."
3454
+ )
3455
+ )
3456
+ );
3457
+ var mcpInputSchema = lazySchema19(() => zodSchema19(z21.object({})));
3458
+ var mcpOutputSchema = lazySchema19(
3459
+ () => zodSchema19(
3460
+ z21.discriminatedUnion("type", [
3461
+ z21.object({
3462
+ type: z21.literal("call"),
3463
+ serverLabel: z21.string(),
3464
+ name: z21.string(),
3465
+ arguments: z21.string(),
3466
+ output: z21.string().nullable().optional(),
3467
+ error: z21.union([z21.string(), jsonValueSchema]).optional()
3468
+ }),
3469
+ z21.object({
3470
+ type: z21.literal("listTools"),
3471
+ serverLabel: z21.string(),
3472
+ tools: z21.array(
3473
+ z21.object({
3474
+ name: z21.string(),
3475
+ description: z21.string().optional(),
3476
+ inputSchema: jsonValueSchema,
3477
+ annotations: z21.record(z21.string(), jsonValueSchema).optional()
3478
+ })
3479
+ ),
3480
+ error: z21.union([z21.string(), jsonValueSchema]).optional()
3481
+ }),
3482
+ z21.object({
3483
+ type: z21.literal("approvalRequest"),
3484
+ serverLabel: z21.string(),
3485
+ name: z21.string(),
3486
+ arguments: z21.string(),
3487
+ approvalRequestId: z21.string()
3488
+ })
3489
+ ])
3490
+ )
3491
+ );
3492
+ var mcpToolFactory = createProviderDefinedToolFactoryWithOutputSchema7({
3493
+ id: "openai.mcp",
3494
+ name: "mcp",
3495
+ inputSchema: mcpInputSchema,
3496
+ outputSchema: mcpOutputSchema
3497
+ });
3498
+
3299
3499
  // src/responses/openai-responses-prepare-tools.ts
3300
3500
  import { validateTypes as validateTypes2 } from "@ai-sdk/provider-utils";
3301
3501
  async function prepareResponsesTools({
@@ -3404,6 +3604,36 @@ async function prepareResponsesTools({
3404
3604
  });
3405
3605
  break;
3406
3606
  }
3607
+ case "openai.mcp": {
3608
+ const args = await validateTypes2({
3609
+ value: tool.args,
3610
+ schema: mcpArgsSchema
3611
+ });
3612
+ openaiTools.push({
3613
+ type: "mcp",
3614
+ server_label: args.serverLabel,
3615
+ allowed_tools: Array.isArray(args.allowedTools) ? args.allowedTools : args.allowedTools ? {
3616
+ read_only: args.allowedTools.readOnly,
3617
+ tool_names: args.allowedTools.toolNames
3618
+ } : void 0,
3619
+ authorization: args.authorization,
3620
+ connector_id: args.connectorId,
3621
+ headers: args.headers,
3622
+ // require_approval:
3623
+ // typeof args.requireApproval === 'string'
3624
+ // ? args.requireApproval
3625
+ // : args.requireApproval
3626
+ // ? {
3627
+ // read_only: args.requireApproval.readOnly,
3628
+ // tool_names: args.requireApproval.toolNames,
3629
+ // }
3630
+ // : undefined,
3631
+ require_approval: "never",
3632
+ server_description: args.serverDescription,
3633
+ server_url: args.serverUrl
3634
+ });
3635
+ break;
3636
+ }
3407
3637
  }
3408
3638
  break;
3409
3639
  }
@@ -3424,7 +3654,7 @@ async function prepareResponsesTools({
3424
3654
  case "tool":
3425
3655
  return {
3426
3656
  tools: openaiTools,
3427
- toolChoice: toolChoice.toolName === "code_interpreter" || toolChoice.toolName === "file_search" || toolChoice.toolName === "image_generation" || toolChoice.toolName === "web_search_preview" || toolChoice.toolName === "web_search" ? { type: toolChoice.toolName } : { type: "function", name: toolChoice.toolName },
3657
+ toolChoice: toolChoice.toolName === "code_interpreter" || toolChoice.toolName === "file_search" || toolChoice.toolName === "image_generation" || toolChoice.toolName === "web_search_preview" || toolChoice.toolName === "web_search" || toolChoice.toolName === "mcp" ? { type: toolChoice.toolName } : { type: "function", name: toolChoice.toolName },
3428
3658
  toolWarnings
3429
3659
  };
3430
3660
  default: {
@@ -3854,6 +4084,80 @@ var OpenAIResponsesLanguageModel = class {
3854
4084
  });
3855
4085
  break;
3856
4086
  }
4087
+ case "mcp_call": {
4088
+ content.push({
4089
+ type: "tool-call",
4090
+ toolCallId: part.id,
4091
+ toolName: "mcp",
4092
+ input: JSON.stringify({}),
4093
+ providerExecuted: true
4094
+ });
4095
+ content.push({
4096
+ type: "tool-result",
4097
+ toolCallId: part.id,
4098
+ toolName: "mcp",
4099
+ result: {
4100
+ type: "call",
4101
+ serverLabel: part.server_label,
4102
+ name: part.name,
4103
+ arguments: part.arguments,
4104
+ ...part.output != null ? { output: part.output } : {},
4105
+ ...part.error != null ? { error: part.error } : {}
4106
+ }
4107
+ });
4108
+ break;
4109
+ }
4110
+ case "mcp_list_tools": {
4111
+ content.push({
4112
+ type: "tool-call",
4113
+ toolCallId: part.id,
4114
+ toolName: "mcp",
4115
+ input: JSON.stringify({}),
4116
+ providerExecuted: true
4117
+ });
4118
+ content.push({
4119
+ type: "tool-result",
4120
+ toolCallId: part.id,
4121
+ toolName: "mcp",
4122
+ result: {
4123
+ type: "listTools",
4124
+ serverLabel: part.server_label,
4125
+ tools: part.tools.map((t) => {
4126
+ var _a2, _b2;
4127
+ return {
4128
+ name: t.name,
4129
+ description: (_a2 = t.description) != null ? _a2 : void 0,
4130
+ inputSchema: t.input_schema,
4131
+ annotations: (_b2 = t.annotations) != null ? _b2 : void 0
4132
+ };
4133
+ }),
4134
+ ...part.error != null ? { error: part.error } : {}
4135
+ }
4136
+ });
4137
+ break;
4138
+ }
4139
+ case "mcp_approval_request": {
4140
+ content.push({
4141
+ type: "tool-call",
4142
+ toolCallId: part.id,
4143
+ toolName: "mcp",
4144
+ input: JSON.stringify({}),
4145
+ providerExecuted: true
4146
+ });
4147
+ content.push({
4148
+ type: "tool-result",
4149
+ toolCallId: part.id,
4150
+ toolName: "mcp",
4151
+ result: {
4152
+ type: "approvalRequest",
4153
+ serverLabel: part.server_label,
4154
+ name: part.name,
4155
+ arguments: part.arguments,
4156
+ approvalRequestId: part.approval_request_id
4157
+ }
4158
+ });
4159
+ break;
4160
+ }
3857
4161
  case "computer_call": {
3858
4162
  content.push({
3859
4163
  type: "tool-call",
@@ -4088,6 +4392,14 @@ var OpenAIResponsesLanguageModel = class {
4088
4392
  input: "{}",
4089
4393
  providerExecuted: true
4090
4394
  });
4395
+ } else if (value.item.type === "mcp_call" || value.item.type === "mcp_list_tools" || value.item.type === "mcp_approval_request") {
4396
+ controller.enqueue({
4397
+ type: "tool-call",
4398
+ toolCallId: value.item.id,
4399
+ toolName: "mcp",
4400
+ input: "{}",
4401
+ providerExecuted: true
4402
+ });
4091
4403
  } else if (value.item.type === "message") {
4092
4404
  controller.enqueue({
4093
4405
  type: "text-start",
@@ -4199,6 +4511,56 @@ var OpenAIResponsesLanguageModel = class {
4199
4511
  result: value.item.result
4200
4512
  }
4201
4513
  });
4514
+ } else if (value.item.type === "mcp_call") {
4515
+ ongoingToolCalls[value.output_index] = void 0;
4516
+ controller.enqueue({
4517
+ type: "tool-result",
4518
+ toolCallId: value.item.id,
4519
+ toolName: "mcp",
4520
+ result: {
4521
+ type: "call",
4522
+ serverLabel: value.item.server_label,
4523
+ name: value.item.name,
4524
+ arguments: value.item.arguments,
4525
+ ...value.item.output != null ? { output: value.item.output } : {},
4526
+ ...value.item.error != null ? { error: value.item.error } : {}
4527
+ }
4528
+ });
4529
+ } else if (value.item.type === "mcp_list_tools") {
4530
+ ongoingToolCalls[value.output_index] = void 0;
4531
+ controller.enqueue({
4532
+ type: "tool-result",
4533
+ toolCallId: value.item.id,
4534
+ toolName: "mcp",
4535
+ result: {
4536
+ type: "listTools",
4537
+ serverLabel: value.item.server_label,
4538
+ tools: value.item.tools.map((t) => {
4539
+ var _a2, _b2;
4540
+ return {
4541
+ name: t.name,
4542
+ description: (_a2 = t.description) != null ? _a2 : void 0,
4543
+ inputSchema: t.input_schema,
4544
+ annotations: (_b2 = t.annotations) != null ? _b2 : void 0
4545
+ };
4546
+ }),
4547
+ ...value.item.error != null ? { error: value.item.error } : {}
4548
+ }
4549
+ });
4550
+ } else if (value.item.type === "mcp_approval_request") {
4551
+ ongoingToolCalls[value.output_index] = void 0;
4552
+ controller.enqueue({
4553
+ type: "tool-result",
4554
+ toolCallId: value.item.id,
4555
+ toolName: "mcp",
4556
+ result: {
4557
+ type: "approvalRequest",
4558
+ serverLabel: value.item.server_label,
4559
+ name: value.item.name,
4560
+ arguments: value.item.arguments,
4561
+ approvalRequestId: value.item.approval_request_id
4562
+ }
4563
+ });
4202
4564
  } else if (value.item.type === "local_shell_call") {
4203
4565
  ongoingToolCalls[value.output_index] = void 0;
4204
4566
  controller.enqueue({