Skip to main content

OpenAI Agents

Connect Unizo MCP to OpenAI Agents SDK with built-in MCP server support.

Overview​

OpenAI Agents SDK includes native MCP support via MCPServerStreamableHttp, enabling direct integration with Unizo's MCP server for unified access to all the categories.

Prerequisites​

Before setting up the MCP integration, you'll need:

  • Unizo API Key: Used for authentication (found in the Unizo Console)
  • Python 3.10+: Required for OpenAI Agents SDK
  • OpenAI API Key: For the underlying LLM

Installation​

pip install openai-agents

Or with uv:

uv add openai-agents

Authentication​

Step 1: Generate a Service Key​

Use your Unizo API key to generate a service key for MCP authentication:

curl --location 'https://api.unizo.ai/api/v1/serviceKeys' \
--header "apiKey: {unizo_api_key}" \
--header "Content-Type: application/json" \
--data '{
"name": "MCP OpenAI Agents Integration",
"subOrganization": {
"name": "{YOUR_CUSTOMER_NAME}",
"externalKey": "{YOUR_CUSTOMER_UNIQUE_IDENTIFIER}"
},
"integration": {
"target": {
"categorySelectors": [
{
"type": "TICKETING"
}
]
}
}
}'

Required Parameters:

ParameterDescription
apiKeyYour Unizo API key (found in the Unizo Console)
nameDescriptive name for the integration (e.g., "MCP OpenAI Agents Integration")
subOrganization.nameYour organization name (e.g., "Acme Inc")
subOrganization.externalKeyUnique identifier (UUID format recommended)

Response:

{
"state": "ACTIVE",
"displayId": "{UNIZO_SERVICE_KEY}",
...
}

Important: Save the displayId from the response this is your service key for authenticating with the MCP server.

Step 2: Configure Environment Variables​

Create a .env file in your project root:

UNIZO_SERVICE_KEY=your_service_key_from_displayId
OPENAI_API_KEY=your_openai_api_key

Quick Start​

Connect to Unizo MCP and use tools with OpenAI agents:

import os
import asyncio
from agents import Agent, Runner
from agents.mcp import MCPServerStreamableHttp

async def main():
# Create MCP server connection for Unizo
async with MCPServerStreamableHttp(
name="Unizo MCP Server",
params={
"url": "https://api.unizo.ai/mcp",
"headers": {
"servicekey": os.getenv('UNIZO_SERVICE_KEY'),
"x-mcp-scopes": "ticketing"
},
"timeout": 10,
},
) as server:
# Create agent with Unizo MCP tools
agent = Agent(
name="unizo-assistant",
instructions="Use the Unizo MCP tools to answer questions about integrations and ticketing.",
mcp_servers=[server],
)
# Run agent with Unizo tools
result = await Runner.run(agent, "List all available ticketing connectors")
print(result.final_output)

# Run the async main function
if __name__ == "__main__":
asyncio.run(main())

You can enable multiple scopes by separating them with commas:

"x-mcp-scopes": "platform,ticketing,vms,observability,infra"

Advanced Configuration​

Connection Options​

async with MCPServerStreamableHttp(
name="Unizo MCP Server",
params={
"url": "https://api.unizo.ai/mcp",
"headers": {
"servicekey": os.getenv('UNIZO_SERVICE_KEY'),
"x-mcp-scopes": "platform,ticketing"
},
"timeout": 30, # Request timeout in seconds
},
cache_tools_list=True, # Cache available tools for performance
max_retry_attempts=3, # Retry failed requests
) as server:
# Your agent code here

Multi-Turn Conversation​

import os
import asyncio
from dotenv import load_dotenv
from agents import Agent, Runner
from agents.mcp import MCPServerStreamableHttp

load_dotenv()

async def main():
async with MCPServerStreamableHttp(
name="Unizo MCP Server",
params={
"url": "https://api.unizo.ai/mcp",
"headers": {
"servicekey": os.getenv('UNIZO_SERVICE_KEY'),
"x-mcp-scopes": "ticketing"
},
},
) as server:
agent = Agent(
name="unizo-assistant",
instructions="You are a helpful assistant with access to Unizo ticketing tools.",
mcp_servers=[server],
)
# First query
result = await Runner.run(agent, "List all Jira integrations")
print("First response:", result.final_output)

# Continue conversation with context
result = await Runner.run(
agent,
"Create a ticket in the first integration",
context=result.context
)
print("Second response:", result.final_output)

if __name__ == "__main__":
asyncio.run(main())

Example Use Cases​

List Available Integrations​

result = await Runner.run(agent, "List all available integrations")

Create a Jira Ticket​

result = await Runner.run(
agent,
"Create a Jira ticket with title 'Bug: Login page not loading' and priority high"
)

Search Tickets​

result = await Runner.run(
agent,
"Search for all open tickets assigned to me"
)