diff --git a/docs/guides/tools-connectors-mcp/responses/approvals-always-require-approval.cs b/docs/guides/tools-connectors-mcp/responses/approvals-always-require-approval.cs new file mode 100644 index 000000000..841132206 --- /dev/null +++ b/docs/guides/tools-connectors-mcp/responses/approvals-always-require-approval.cs @@ -0,0 +1,36 @@ +// SAMPLE: Generate response from remote MCP with approval through Responses API +// PAGE: https://platform.openai.com/docs/guides/tools-connectors-mcp#approvals +// GUIDANCE: Instructions to run this code: https://aka.ms/oai/net/start +#pragma warning disable OPENAI001 + +#:package OpenAI@2.* +#:property PublishAot=false + +using OpenAI.Responses; + +string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!; +OpenAIResponseClient client = new(model: "gpt-5", apiKey: key); + +ResponseCreationOptions options = new(); +options.Tools.Add(ResponseTool.CreateMcpTool( + serverLabel: "dmcp", + serverUri: new Uri("https://dmcp-server.deno.dev/sse"), + toolCallApprovalPolicy: new McpToolCallApprovalPolicy(GlobalMcpToolCallApprovalPolicy.AlwaysRequireApproval) +)); + +// STEP 1: Create response that requests tool call approval +OpenAIResponse response1 = (OpenAIResponse)client.CreateResponse([ + ResponseItem.CreateUserMessageItem([ + ResponseContentPart.CreateInputTextPart("Roll 2d4+1") + ]) +], options); + +McpToolCallApprovalRequestItem? approvalRequestItem = response1.OutputItems.Last() as McpToolCallApprovalRequestItem; + +// STEP 2: Approve the tool call request and get final response +options.PreviousResponseId = response1.Id; +OpenAIResponse response2 = (OpenAIResponse)client.CreateResponse([ + ResponseItem.CreateMcpApprovalResponseItem(approvalRequestItem!.Id, approved: true), +], options); + +Console.WriteLine(response2.GetOutputText()); \ No newline at end of file diff --git a/docs/guides/tools-connectors-mcp/responses/approvals-never-require-approval.cs b/docs/guides/tools-connectors-mcp/responses/approvals-never-require-approval.cs new file mode 100644 index 000000000..dd1a1b0bf --- /dev/null +++ b/docs/guides/tools-connectors-mcp/responses/approvals-never-require-approval.cs @@ -0,0 +1,28 @@ +// SAMPLE: Generate response from remote MCP with no approval through Responses API +// PAGE: https://platform.openai.com/docs/guides/tools-connectors-mcp#approvals +// GUIDANCE: Instructions to run this code: https://aka.ms/oai/net/start +#pragma warning disable OPENAI001 + +#:package OpenAI@2.* +#:property PublishAot=false + +using OpenAI.Responses; + +string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!; +OpenAIResponseClient client = new(model: "gpt-5", apiKey: key); + +ResponseCreationOptions options = new(); +options.Tools.Add(ResponseTool.CreateMcpTool( + serverLabel: "deepwiki", + serverUri: new Uri("https://mcp.deepwiki.com/mcp"), + allowedTools: new McpToolFilter() { ToolNames = { "ask_question", "read_wiki_structure" } }, + toolCallApprovalPolicy: new McpToolCallApprovalPolicy(GlobalMcpToolCallApprovalPolicy.NeverRequireApproval) +)); + +OpenAIResponse response = (OpenAIResponse)client.CreateResponse([ + ResponseItem.CreateUserMessageItem([ + ResponseContentPart.CreateInputTextPart("What transport protocols does the 2025-03-26 version of the MCP spec (modelcontextprotocol/modelcontextprotocol) support?") + ]) +], options); + +Console.WriteLine(response.GetOutputText()); \ No newline at end of file diff --git a/docs/guides/tools-connectors-mcp/responses/authentication.cs b/docs/guides/tools-connectors-mcp/responses/authentication.cs new file mode 100644 index 000000000..4b05af96e --- /dev/null +++ b/docs/guides/tools-connectors-mcp/responses/authentication.cs @@ -0,0 +1,28 @@ +// SAMPLE: Generate response from remote MCP through Responses API +// PAGE: https://platform.openai.com/docs/guides/tools-connectors-mcp#authentication +// GUIDANCE: Instructions to run this code: https://aka.ms/oai/net/start +#pragma warning disable OPENAI001 + +#:package OpenAI@2.* +#:property PublishAot=false + +using OpenAI.Responses; + +string authToken = Environment.GetEnvironmentVariable("STRIPE_OAUTH_ACCESS_TOKEN")!; +string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!; +OpenAIResponseClient client = new(model: "gpt-5", apiKey: key); + +ResponseCreationOptions options = new(); +options.Tools.Add(ResponseTool.CreateMcpTool( + serverLabel: "stripe", + serverUri: new Uri("https://mcp.stripe.com"), + authorizationToken: authToken +)); + +OpenAIResponse response = (OpenAIResponse)client.CreateResponse([ + ResponseItem.CreateUserMessageItem([ + ResponseContentPart.CreateInputTextPart("Create a payment link for $20") + ]) +], options); + +Console.WriteLine(response.GetOutputText()); \ No newline at end of file diff --git a/docs/guides/tools-connectors-mcp/responses/filtering-tools.cs b/docs/guides/tools-connectors-mcp/responses/filtering-tools.cs new file mode 100644 index 000000000..c87593f72 --- /dev/null +++ b/docs/guides/tools-connectors-mcp/responses/filtering-tools.cs @@ -0,0 +1,28 @@ +// SAMPLE: Generate response from a specific tool of a remote MCP through Responses API +// PAGE: https://platform.openai.com/docs/guides/tools-connectors-mcp#filtering-tools +// GUIDANCE: Instructions to run this code: https://aka.ms/oai/net/start +#pragma warning disable OPENAI001 + +#:package OpenAI@2.* +#:property PublishAot=false + +using OpenAI.Responses; + +string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!; +OpenAIResponseClient client = new(model: "gpt-5", apiKey: key); + +ResponseCreationOptions options = new(); +options.Tools.Add(ResponseTool.CreateMcpTool( + serverLabel: "dmcp", + serverUri: new Uri("https://dmcp-server.deno.dev/sse"), + allowedTools: new McpToolFilter() { ToolNames = { "roll" } }, + toolCallApprovalPolicy: new McpToolCallApprovalPolicy(GlobalMcpToolCallApprovalPolicy.NeverRequireApproval) +)); + +OpenAIResponse response = (OpenAIResponse)client.CreateResponse([ + ResponseItem.CreateUserMessageItem([ + ResponseContentPart.CreateInputTextPart("Roll 2d4+1") + ]) +], options); + +Console.WriteLine(response.GetOutputText()); \ No newline at end of file diff --git a/docs/guides/tools-connectors-mcp/responses/quickstart-remote-mcp.cs b/docs/guides/tools-connectors-mcp/responses/quickstart-remote-mcp.cs new file mode 100644 index 000000000..fe45027a0 --- /dev/null +++ b/docs/guides/tools-connectors-mcp/responses/quickstart-remote-mcp.cs @@ -0,0 +1,27 @@ +// SAMPLE: Generate response from remote MCP through Responses API +// PAGE: https://platform.openai.com/docs/guides/tools-connectors-mcp?quickstart-panels=remote-mcp#quickstart +// GUIDANCE: Instructions to run this code: https://aka.ms/oai/net/start +#pragma warning disable OPENAI001 + +#:package OpenAI@2.* +#:property PublishAot=false + +using OpenAI.Responses; + +string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!; +OpenAIResponseClient client = new(model: "gpt-5", apiKey: key); + +ResponseCreationOptions options = new(); +options.Tools.Add(ResponseTool.CreateMcpTool( + serverLabel: "dmcp", + serverUri: new Uri("https://dmcp-server.deno.dev/sse"), + toolCallApprovalPolicy: new McpToolCallApprovalPolicy(GlobalMcpToolCallApprovalPolicy.NeverRequireApproval) +)); + +OpenAIResponse response = (OpenAIResponse)client.CreateResponse([ + ResponseItem.CreateUserMessageItem([ + ResponseContentPart.CreateInputTextPart("Roll 2d4+1") + ]) +], options); + +Console.WriteLine(response.GetOutputText()); \ No newline at end of file