# OpenAI Agents SDK

Wrap each OrcaRouter tool in a FunctionTool with its own JSON schema and run it from an Agents SDK agent, with the model served through OrcaRouter too.

|  |  |
| --- | --- |
| Kind | framework |
| Connects through | functions |
| Docs | <https://openai.github.io/openai-agents-python/tools/> |

## Install

1. Install the packages: `pip install openai-agents httpx`.
2. Set `ORCAROUTER_API_KEY` to an API key from your OrcaRouter console.
3. Load tools for a task with the helper below and pass them to your `Agent`.

## Code

### Load OrcaRouter tools

```python
# orcarouter_tools.py
import json
import os

import httpx
from agents import FunctionTool

BASE = "https://api.orcarouter.ai"
HEADERS = {"Authorization": f"Bearer {os.environ['ORCAROUTER_API_KEY']}"}


def _invoker(name):
    async def invoke(ctx, args: str) -> str:
        async with httpx.AsyncClient(timeout=120) as client:
            r = await client.post(f"{BASE}/v1/tools/{name}/run", json={"input": json.loads(args or "{}")}, headers=HEADERS)
        return r.text

    return invoke


def orcarouter_tools(query, limit=5):
    found = httpx.post(f"{BASE}/v1/tools/discover", json={"q": query, "limit": limit}, headers=HEADERS, timeout=30)
    found.raise_for_status()
    ids = ",".join(tool["id"] for tool in found.json()["data"]["results"])
    if not ids:
        return []
    fns = httpx.get(f"{BASE}/v1/tools/functions", params={"ids": ids, "format": "openai"}, headers=HEADERS, timeout=30)
    fns.raise_for_status()
    return [
        FunctionTool(
            name=spec["function"]["name"],
            description=spec["function"]["description"],
            params_json_schema=spec["function"]["parameters"],
            on_invoke_tool=_invoker(spec["function"]["name"]),
            strict_json_schema=False,
        )
        for spec in fns.json()["data"]["tools"]
    ]
```

### Run an agent on OrcaRouter

```python
import os

from agents import Agent, Runner, set_default_openai_api, set_default_openai_client, set_tracing_disabled
from openai import AsyncOpenAI
from orcarouter_tools import orcarouter_tools

set_default_openai_client(AsyncOpenAI(base_url="https://api.orcarouter.ai/v1", api_key=os.environ["ORCAROUTER_API_KEY"]))
set_default_openai_api("chat_completions")
set_tracing_disabled(True)

agent = Agent(
    name="Social researcher",
    instructions="Answer with figures from the tools.",
    model="openai/gpt-5-mini",
    tools=orcarouter_tools("tiktok user profile"),
)
result = Runner.run_sync(agent, "How many followers does @nasa have on TikTok?")
print(result.final_output)
```

## Recipes

- [Track competitor TikTok accounts](https://www.orcarouter.ai/tools/recipes/track-competitor-tiktok-accounts.md): Pull each competitor's TikTok profile, find its latest videos and read what viewers say, in three tool calls an agent can repeat every week.
- [Monitor brand mentions on the web and TikTok](https://www.orcarouter.ai/tools/recipes/monitor-brand-mentions.md): Search the web and TikTok for your brand, then read the comments under the posts that mention it: a daily brand check an agent can run on its own.
- [Enrich a lead list](https://www.orcarouter.ai/tools/recipes/enrich-a-lead-list.md): Turn a list of company domains into firmographics, a contact's work email and a recent news hook, with one API key.

## Related integrations

- [LangChain](https://www.orcarouter.ai/tools/integrations/langchain.md): Load OrcaRouter tools as LangChain tools from the functions export and give them to any LangChain agent; each call runs the tool through OrcaRouter.
- [CrewAI](https://www.orcarouter.ai/tools/integrations/crewai.md): Give a CrewAI agent the OrcaRouter tool catalog through MCPServerAdapter, so it can find and run tools while it works on a task.
- [Vercel AI SDK](https://www.orcarouter.ai/tools/integrations/vercel-ai-sdk.md): Turn OrcaRouter tools into AI SDK tools with jsonSchema() and let generateText call them over several steps.

---

Markdown version of https://www.orcarouter.ai/tools/integrations/openai-agents-sdk
