"github.com/volcengine/volcengine-go-sdk/service/arkruntime"
"github.com/volcengine/volcengine-go-sdk/service/arkruntime/model/responses"
fmt.Println("non stream")
client := arkruntime.NewClientWithApiKey(os.Getenv("ARK_API_KEY"))
ctx := context.Background()
fmt.Println("----- round 1 message -----")
serverDescription := "test desc"
inputMessage := &responses.ItemInputMessage{
Role: responses.MessageRole_user,
Content: []*responses.ContentItem{
Union: &responses.ContentItem_Text{
Text: &responses.ContentItemText{
Type: responses.ContentItemType_input_text,
Text: "查一下 mark3labs/mcp-go 这个仓库的结构",
createResponsesReq := &responses.ResponsesRequest{
Model: "doubao-seed-2-1-pro-260628",
Input: &responses.ResponsesInput{
Union: &responses.ResponsesInput_ListValue{
ListValue: &responses.InputItemList{ListValue: []*responses.InputItem{{
Union: &responses.InputItem_InputMessage{
InputMessage: inputMessage,
Tools: []*responses.ResponsesTool{
Union: &responses.ResponsesTool_ToolMcp{
ToolMcp: &responses.ToolMcp{
Type: responses.ToolType_mcp,
ServerLabel: "deepwiki",
ServerDescription: &serverDescription,
ServerUrl: "https://mcp.deepwiki.com/mcp",
resp, err := client.CreateResponses(ctx, createResponsesReq, arkruntime.WithCustomHeader("ark-beta-mcp", "true"))
fmt.Printf("stream error: %v\n", err)
var approvalRequestId string
fmt.Printf("response: %v\n", resp)
approvalRequestId = resp.Output[len(resp.Output)-1].GetFunctionMcpApprovalRequest().GetId()
fmt.Println("-----round 2---------")
createResponsesReq2 := &responses.ResponsesRequest{
Model: "doubao-seed-2-1-pro-260628",
Input: &responses.ResponsesInput{
Union: &responses.ResponsesInput_ListValue{
ListValue: &responses.InputItemList{ListValue: []*responses.InputItem{{
Union: &responses.InputItem_McpApprovalResponse{
McpApprovalResponse: &responses.ItemFunctionMcpApprovalResponse{
Type: responses.ItemType_mcp_approval_response,
ApprovalRequestId: approvalRequestId,
Tools: []*responses.ResponsesTool{
Union: &responses.ResponsesTool_ToolMcp{
ToolMcp: &responses.ToolMcp{
Type: responses.ToolType_mcp,
ServerLabel: "deepwiki",
ServerDescription: &serverDescription,
ServerUrl: "https://mcp.deepwiki.com/mcp",
PreviousResponseId: &responseId,
resp2, err := client.CreateResponses(ctx, createResponsesReq2, arkruntime.WithCustomHeader("ark-beta-mcp", "true"))
fmt.Printf("stream error: %v\n", err)
fmt.Printf("response: %v\n", resp2)
fmt.Println("----- round 3 never require approval -----")
createResponsesReq3 := &responses.ResponsesRequest{
Model: "doubao-seed-2-1-pro-260628",
Input: &responses.ResponsesInput{
Union: &responses.ResponsesInput_ListValue{
ListValue: &responses.InputItemList{ListValue: []*responses.InputItem{{
Union: &responses.InputItem_InputMessage{
InputMessage: inputMessage,
Tools: []*responses.ResponsesTool{
Union: &responses.ResponsesTool_ToolMcp{
ToolMcp: &responses.ToolMcp{
Type: responses.ToolType_mcp,
ServerLabel: "deepwiki",
ServerDescription: &serverDescription,
ServerUrl: "https://mcp.deepwiki.com/mcp",
RequireApproval: &responses.McpRequireApproval{
Union: &responses.McpRequireApproval_Mode{
Mode: responses.ApprovalMode_never,
resp3, err := client.CreateResponses(ctx, createResponsesReq3, arkruntime.WithCustomHeader("ark-beta-mcp", "true"))
fmt.Printf("response: %v\n", resp3)
client := arkruntime.NewClientWithApiKey(os.Getenv("ARK_API_KEY"))
ctx := context.Background()
fmt.Println("----- round 1 message -----")
serverDescription := "test desc"
inputMessage := &responses.ItemInputMessage{
Role: responses.MessageRole_user,
Content: []*responses.ContentItem{
Union: &responses.ContentItem_Text{
Text: &responses.ContentItemText{
Type: responses.ContentItemType_input_text,
Text: "查一下 mark3labs/mcp-go 这个仓库的结构",
createResponsesReq := &responses.ResponsesRequest{
Model: "doubao-seed-2-1-pro-260628",
Input: &responses.ResponsesInput{
Union: &responses.ResponsesInput_ListValue{
ListValue: &responses.InputItemList{ListValue: []*responses.InputItem{{
Union: &responses.InputItem_InputMessage{
InputMessage: inputMessage,
Tools: []*responses.ResponsesTool{
Union: &responses.ResponsesTool_ToolMcp{
ToolMcp: &responses.ToolMcp{
Type: responses.ToolType_mcp,
ServerLabel: "deepwiki",
ServerDescription: &serverDescription,
ServerUrl: "https://mcp.deepwiki.com/mcp",
resp, err := client.CreateResponsesStream(ctx, createResponsesReq, arkruntime.WithCustomHeader("ark-beta-mcp", "true"))
fmt.Printf("stream error: %v\n", err)
var approvalRequestId string
event, err := resp.Recv()
fmt.Printf("stream error: %v\n", err)
if responseEvent := event.GetResponse(); responseEvent != nil {
responseId = responseEvent.GetResponse().GetId()
if event.GetItem().GetItem().GetFunctionMcpApprovalRequest() != nil {
approvalRequestId = event.GetItem().GetItem().GetFunctionMcpApprovalRequest().GetId()
fmt.Println("-----round 2---------")
createResponsesReq2 := &responses.ResponsesRequest{
Model: "doubao-seed-2-1-pro-260628",
Input: &responses.ResponsesInput{
Union: &responses.ResponsesInput_ListValue{
ListValue: &responses.InputItemList{ListValue: []*responses.InputItem{{
Union: &responses.InputItem_McpApprovalResponse{
McpApprovalResponse: &responses.ItemFunctionMcpApprovalResponse{
Type: responses.ItemType_mcp_approval_response,
ApprovalRequestId: approvalRequestId,
Tools: []*responses.ResponsesTool{
Union: &responses.ResponsesTool_ToolMcp{
ToolMcp: &responses.ToolMcp{
Type: responses.ToolType_mcp,
ServerLabel: "deepwiki",
ServerDescription: &serverDescription,
ServerUrl: "https://mcp.deepwiki.com/mcp",
PreviousResponseId: &responseId,
resp2, err := client.CreateResponsesStream(ctx, createResponsesReq2, arkruntime.WithCustomHeader("ark-beta-mcp", "true"))
fmt.Printf("stream error: %v\n", err)
event, err := resp2.Recv()
fmt.Printf("stream error: %v\n", err)
fmt.Println("----- round 3 never require approval -----")
createResponsesReq3 := &responses.ResponsesRequest{
Model: "doubao-seed-2-1-pro-260628",
Input: &responses.ResponsesInput{
Union: &responses.ResponsesInput_ListValue{
ListValue: &responses.InputItemList{ListValue: []*responses.InputItem{{
Union: &responses.InputItem_InputMessage{
InputMessage: inputMessage,
Tools: []*responses.ResponsesTool{
Union: &responses.ResponsesTool_ToolMcp{
ToolMcp: &responses.ToolMcp{
Type: responses.ToolType_mcp,
ServerLabel: "deepwiki",
ServerDescription: &serverDescription,
ServerUrl: "https://mcp.deepwiki.com/mcp",
RequireApproval: &responses.McpRequireApproval{
Union: &responses.McpRequireApproval_Mode{
Mode: responses.ApprovalMode_never,
resp3, err := client.CreateResponsesStream(ctx, createResponsesReq3, arkruntime.WithCustomHeader("ark-beta-mcp", "true"))
fmt.Printf("stream error: %v\n", err)
event, err := resp3.Recv()
fmt.Printf("stream error: %v\n", err)
func handleEvent(event *responses.Event) {
switch event.GetEventType() {
case responses.EventType_response_reasoning_summary_text_delta.String():
print(event.GetReasoningText().GetDelta())
case responses.EventType_response_reasoning_summary_text_done.String():
fmt.Printf("\naggregated reasoning text: %s\n", event.GetReasoningText().GetText())
case responses.EventType_response_output_text_delta.String():
print(event.GetText().GetDelta())
case responses.EventType_response_output_text_done.String():
fmt.Printf("\naggregated output text: %s\n", event.GetText().GetText())
case responses.EventType_response_output_item_done.String():
if event.GetItem().GetItem().GetFunctionMcpApprovalRequest() != nil {
fmt.Printf("\nmcp call: %s; arguments %s\n", event.GetItem().GetItem().GetFunctionMcpApprovalRequest().GetName(), event.GetItem().GetItem().GetFunctionMcpApprovalRequest().GetArguments())
case responses.EventType_response_mcp_call_arguments_delta.String():
fmt.Printf("\nmcp call arguments: %s\n", event.GetResponseMcpCallArgumentsDelta().GetDelta())
case responses.EventType_response_mcp_call_completed.String():
fmt.Printf("\nmcp call completed.\n")
case responses.EventType_response_mcp_list_tools_in_progress.String():
fmt.Printf("\nlisting mcp tools.\n")
case responses.EventType_response_mcp_list_tools_completed.String():
fmt.Printf("\nDone listing mcp tools.\n")