11# run like this: uv run --exact -q --env-file .env agent.py
22# /// script
33# dependencies = [
4- # "openai-agents",
4+ # "openai-agents @ git+https://github.com/openai/openai-agents-python.git@refs/pull/2034/head ",
55# "httpx",
66# "mcp",
77# "elastic-opentelemetry",
1616# This must precede any other imports you want to instrument!
1717auto_instrumentation .initialize ()
1818
19+ import argparse
1920import asyncio
2021import os
2122from datetime import datetime , timedelta
2223
2324from agents import (
2425 Agent ,
26+ HostedMCPTool ,
2527 OpenAIProvider ,
2628 RunConfig ,
2729 Runner ,
2830 Tool ,
2931)
3032from agents .mcp import MCPServerStreamableHttp , MCPUtil
33+ from openai .types .responses .tool_param import Mcp
3134
3235
33- async def run_agent (tools : list [Tool ]):
34- model_name = os .getenv ("AGENT_MODEL" , "gpt-5-nano" )
35- model = OpenAIProvider (use_responses = False ).get_model (model_name )
36+ async def run_agent (tools : list [Tool ], model_name : str , use_responses : bool ):
37+ model = OpenAIProvider (use_responses = use_responses ).get_model (model_name )
3638 agent = Agent (
3739 name = "flight-search-agent" ,
3840 model = model ,
@@ -49,18 +51,39 @@ async def run_agent(tools: list[Tool]):
4951
5052
5153async def main ():
54+ parser = argparse .ArgumentParser (description = "MCP-enabled flight search agent" )
55+ parser .add_argument ("--use-responses-api" , action = "store_true" , help = "Use Responses API instead of Agents" )
56+ args = parser .parse_args ()
57+
58+ model_name = os .getenv ("AGENT_MODEL" , "gpt-5-nano" )
59+ mcp_url = os .getenv ("MCP_URL" , "https://mcp.kiwi.com" )
60+ mcp_headers = dict (h .split ("=" , 1 ) for h in os .getenv ("MCP_HEADERS" , "" ).split ("," ) if h )
61+
62+ if args .use_responses_api :
63+ # Server-side MCP via Responses API
64+ tools = [
65+ HostedMCPTool (
66+ tool_config = Mcp (
67+ type = "mcp" ,
68+ server_url = mcp_url ,
69+ server_label = "kiwi-flights" ,
70+ headers = mcp_headers ,
71+ require_approval = "never" ,
72+ )
73+ )
74+ ]
75+ await run_agent (tools , model_name , use_responses = True )
76+ return
77+
78+ # Client-side MCP orchestration
5279 async with MCPServerStreamableHttp (
53- {
54- "url" : os .getenv ("MCP_URL" , "https://mcp.kiwi.com" ),
55- "headers" : dict (h .split ("=" , 1 ) for h in os .getenv ("MCP_HEADERS" , "" ).split ("," ) if h ),
56- "timeout" : 30.0 ,
57- },
80+ {"url" : mcp_url , "headers" : mcp_headers , "timeout" : 30.0 },
5881 client_session_timeout_seconds = 60.0 ,
5982 ) as server :
6083 tools = await server .list_tools ()
6184 util = MCPUtil ()
6285 tools = [util .to_function_tool (tool , server , False ) for tool in tools ]
63- await run_agent (tools )
86+ await run_agent (tools , model_name , use_responses = False )
6487
6588
6689if __name__ == "__main__" :
0 commit comments