콘텐츠로 이동

MCP 응답 처리

test.py

test.py
import os
from dotenv import load_dotenv
from openai import OpenAI

load_dotenv()
client = OpenAI()

input_message = "현재 삼성전자 주가 알려줘"

response = client.responses.create(
    input=input_message,
    prompt = { 
        "id": os.environ["PROMPT_ID"]
    },
    tools=[
        {
        "type": "mcp",
        "server_label": "my_mcp",
        "server_url": "https://openai-agent-school.onrender.com/mcp",
        "allowed_tools": [
            "get_stock_price"
        ],
        "require_approval": "always"
        }
    ],

)

# 응답 텍스트 출력
print(response.output_text)

# MCP 수락 요청 처리
follow_up_input = []
for output in response.output:
    if output.type == "mcp_approval_request":
        print("\n[MCP 수락 요청]")
        print(f"- server_label: {output.server_label}")
        print(f"- name: {output.name}")
        print(f"- arguments: {output.arguments}")
        approve_input = input("승인하시겠습니까? (y/n): ")
        approve = approve_input.strip().lower() == 'y'
        follow_up_input.append({
            "type": "mcp_approval_response",
            "approval_request_id": output.id,
            "approve": approve
        })
        print("-" * 20)

# MCP 수락 요청 처리가 있으면 API 재호출
if follow_up_input:
    response = client.responses.create(
        input=follow_up_input,
        previous_response_id=response.id,
        prompt = { 
            "id": os.environ["PROMPT_ID"]
        },
        tools=[
            {
            "type": "mcp",
            "server_label": "my_mcp",
            "server_url": "https://openai-agent-school.onrender.com/mcp",
            "allowed_tools": [
                "get_stock_price"
            ],
            "require_approval": "always"
            }
        ],
    )
    print(response.output_text)
test.py
import os
from dotenv import load_dotenv
from openai import OpenAI

load_dotenv()
client = OpenAI()

input_message = "현재 삼성전자 주가 알려줘"

response = client.responses.create(
    input=input_message,
    stream=True,
    prompt = { 
        "id": os.environ["PROMPT_ID"]
    },
    tools=[
        {
        "type": "mcp",
        "server_label": "my_mcp",
        "server_url": "https://openai-agent-school.onrender.com/mcp",
        "allowed_tools": [
            "get_stock_price"
        ],
        "require_approval": "always"
        }
    ],
)

# 스트림 응답 처리
follow_up_input = []
for event in response:
    if event.type == "response.output_text.delta":
        print(event.delta, end="", flush=True)
    elif event.type == "response.completed":
        previous_response_id = event.response.id
    elif event.type == "response.output_item.done":
        if event.item.type == "mcp_approval_request":
            print("\n[MCP 수락 요청]")
            print(f"- server_label: {event.item.server_label}")
            print(f"- name: {event.item.name}")
            print(f"- arguments: {event.item.arguments}")
            approve_input = input("승인하시겠습니까? (y/n): ")
            approve = approve_input.strip().lower() == 'y'
            follow_up_input.append({
                "type": "mcp_approval_response",
                "approval_request_id": event.item.id,
                "approve": approve
            })
            print("-" * 20)

# MCP 수락 요청 처리가 있으면 API 재호출
if follow_up_input:
    response = client.responses.create(
        input=follow_up_input,
        previous_response_id=previous_response_id,
        stream=True,
        prompt = { 
            "id": os.environ["PROMPT_ID"]
        },
        tools=[
            {
            "type": "mcp",
            "server_label": "my_mcp",
            "server_url": "https://openai-agent-school.onrender.com/mcp",
            "allowed_tools": [
                "get_stock_price"
            ],
            "require_approval": "always"
            }
        ],
    )

    for event in response:
        if event.type == "response.output_text.delta":
            print(event.delta, end="", flush=True)
        # elif event.type == "response.completed":
        #     previous_response_id = event.response.id