Skip to content

Commit 7197911

Browse files
authored
Add code samples for MCP tooling (#694)
* Add MCP tools * Update summary of code samples * Update code sample for always require approval * Add the MCP auth scenario
1 parent 77eb55f commit 7197911

File tree

5 files changed

+147
-0
lines changed

5 files changed

+147
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// SAMPLE: Generate response from remote MCP with approval through Responses API
2+
// PAGE: https://platform.openai.com/docs/guides/tools-connectors-mcp#approvals
3+
// GUIDANCE: Instructions to run this code: https://aka.ms/oai/net/start
4+
#pragma warning disable OPENAI001
5+
6+
#:package OpenAI@2.*
7+
#:property PublishAot=false
8+
9+
using OpenAI.Responses;
10+
11+
string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!;
12+
OpenAIResponseClient client = new(model: "gpt-5", apiKey: key);
13+
14+
ResponseCreationOptions options = new();
15+
options.Tools.Add(ResponseTool.CreateMcpTool(
16+
serverLabel: "dmcp",
17+
serverUri: new Uri("https://dmcp-server.deno.dev/sse"),
18+
toolCallApprovalPolicy: new McpToolCallApprovalPolicy(GlobalMcpToolCallApprovalPolicy.AlwaysRequireApproval)
19+
));
20+
21+
// STEP 1: Create response that requests tool call approval
22+
OpenAIResponse response1 = (OpenAIResponse)client.CreateResponse([
23+
ResponseItem.CreateUserMessageItem([
24+
ResponseContentPart.CreateInputTextPart("Roll 2d4+1")
25+
])
26+
], options);
27+
28+
McpToolCallApprovalRequestItem? approvalRequestItem = response1.OutputItems.Last() as McpToolCallApprovalRequestItem;
29+
30+
// STEP 2: Approve the tool call request and get final response
31+
options.PreviousResponseId = response1.Id;
32+
OpenAIResponse response2 = (OpenAIResponse)client.CreateResponse([
33+
ResponseItem.CreateMcpApprovalResponseItem(approvalRequestItem!.Id, approved: true),
34+
], options);
35+
36+
Console.WriteLine(response2.GetOutputText());
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// SAMPLE: Generate response from remote MCP with no approval through Responses API
2+
// PAGE: https://platform.openai.com/docs/guides/tools-connectors-mcp#approvals
3+
// GUIDANCE: Instructions to run this code: https://aka.ms/oai/net/start
4+
#pragma warning disable OPENAI001
5+
6+
#:package OpenAI@2.*
7+
#:property PublishAot=false
8+
9+
using OpenAI.Responses;
10+
11+
string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!;
12+
OpenAIResponseClient client = new(model: "gpt-5", apiKey: key);
13+
14+
ResponseCreationOptions options = new();
15+
options.Tools.Add(ResponseTool.CreateMcpTool(
16+
serverLabel: "deepwiki",
17+
serverUri: new Uri("https://mcp.deepwiki.com/mcp"),
18+
allowedTools: new McpToolFilter() { ToolNames = { "ask_question", "read_wiki_structure" } },
19+
toolCallApprovalPolicy: new McpToolCallApprovalPolicy(GlobalMcpToolCallApprovalPolicy.NeverRequireApproval)
20+
));
21+
22+
OpenAIResponse response = (OpenAIResponse)client.CreateResponse([
23+
ResponseItem.CreateUserMessageItem([
24+
ResponseContentPart.CreateInputTextPart("What transport protocols does the 2025-03-26 version of the MCP spec (modelcontextprotocol/modelcontextprotocol) support?")
25+
])
26+
], options);
27+
28+
Console.WriteLine(response.GetOutputText());
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// SAMPLE: Generate response from remote MCP through Responses API
2+
// PAGE: https://platform.openai.com/docs/guides/tools-connectors-mcp#authentication
3+
// GUIDANCE: Instructions to run this code: https://aka.ms/oai/net/start
4+
#pragma warning disable OPENAI001
5+
6+
#:package OpenAI@2.*
7+
#:property PublishAot=false
8+
9+
using OpenAI.Responses;
10+
11+
string authToken = Environment.GetEnvironmentVariable("STRIPE_OAUTH_ACCESS_TOKEN")!;
12+
string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!;
13+
OpenAIResponseClient client = new(model: "gpt-5", apiKey: key);
14+
15+
ResponseCreationOptions options = new();
16+
options.Tools.Add(ResponseTool.CreateMcpTool(
17+
serverLabel: "stripe",
18+
serverUri: new Uri("https://mcp.stripe.com"),
19+
authorizationToken: authToken
20+
));
21+
22+
OpenAIResponse response = (OpenAIResponse)client.CreateResponse([
23+
ResponseItem.CreateUserMessageItem([
24+
ResponseContentPart.CreateInputTextPart("Create a payment link for $20")
25+
])
26+
], options);
27+
28+
Console.WriteLine(response.GetOutputText());
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// SAMPLE: Generate response from a specific tool of a remote MCP through Responses API
2+
// PAGE: https://platform.openai.com/docs/guides/tools-connectors-mcp#filtering-tools
3+
// GUIDANCE: Instructions to run this code: https://aka.ms/oai/net/start
4+
#pragma warning disable OPENAI001
5+
6+
#:package OpenAI@2.*
7+
#:property PublishAot=false
8+
9+
using OpenAI.Responses;
10+
11+
string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!;
12+
OpenAIResponseClient client = new(model: "gpt-5", apiKey: key);
13+
14+
ResponseCreationOptions options = new();
15+
options.Tools.Add(ResponseTool.CreateMcpTool(
16+
serverLabel: "dmcp",
17+
serverUri: new Uri("https://dmcp-server.deno.dev/sse"),
18+
allowedTools: new McpToolFilter() { ToolNames = { "roll" } },
19+
toolCallApprovalPolicy: new McpToolCallApprovalPolicy(GlobalMcpToolCallApprovalPolicy.NeverRequireApproval)
20+
));
21+
22+
OpenAIResponse response = (OpenAIResponse)client.CreateResponse([
23+
ResponseItem.CreateUserMessageItem([
24+
ResponseContentPart.CreateInputTextPart("Roll 2d4+1")
25+
])
26+
], options);
27+
28+
Console.WriteLine(response.GetOutputText());
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// SAMPLE: Generate response from remote MCP through Responses API
2+
// PAGE: https://platform.openai.com/docs/guides/tools-connectors-mcp?quickstart-panels=remote-mcp#quickstart
3+
// GUIDANCE: Instructions to run this code: https://aka.ms/oai/net/start
4+
#pragma warning disable OPENAI001
5+
6+
#:package OpenAI@2.*
7+
#:property PublishAot=false
8+
9+
using OpenAI.Responses;
10+
11+
string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!;
12+
OpenAIResponseClient client = new(model: "gpt-5", apiKey: key);
13+
14+
ResponseCreationOptions options = new();
15+
options.Tools.Add(ResponseTool.CreateMcpTool(
16+
serverLabel: "dmcp",
17+
serverUri: new Uri("https://dmcp-server.deno.dev/sse"),
18+
toolCallApprovalPolicy: new McpToolCallApprovalPolicy(GlobalMcpToolCallApprovalPolicy.NeverRequireApproval)
19+
));
20+
21+
OpenAIResponse response = (OpenAIResponse)client.CreateResponse([
22+
ResponseItem.CreateUserMessageItem([
23+
ResponseContentPart.CreateInputTextPart("Roll 2d4+1")
24+
])
25+
], options);
26+
27+
Console.WriteLine(response.GetOutputText());

0 commit comments

Comments
 (0)