# How to integrate Polygon MCP with OpenAI Agents SDK

```json
{
  "title": "How to integrate Polygon MCP with OpenAI Agents SDK",
  "toolkit": "Polygon",
  "toolkit_slug": "polygon",
  "framework": "OpenAI Agents SDK",
  "framework_slug": "open-ai-agents-sdk",
  "url": "https://composio.dev/toolkits/polygon/framework/open-ai-agents-sdk",
  "markdown_url": "https://composio.dev/toolkits/polygon/framework/open-ai-agents-sdk.md",
  "updated_at": "2026-05-12T10:22:22.686Z"
}
```

## Introduction

This guide walks you through connecting Polygon to the OpenAI Agents SDK using the Composio tool router. By the end, you'll have a working Polygon agent that can show the latest closing price for btc-usd, list all stock tickers traded on nasdaq, get the crypto rsi for eth over 14 days through natural language commands.
This guide will help you understand how to give your OpenAI Agents SDK agent real control over a Polygon account through Composio's Polygon MCP server.
Before we dive in, let's take a quick look at the key ideas and tools involved.

## Also integrate Polygon with

- [Claude Agent SDK](https://composio.dev/toolkits/polygon/framework/claude-agents-sdk)
- [Claude Code](https://composio.dev/toolkits/polygon/framework/claude-code)
- [Claude Cowork](https://composio.dev/toolkits/polygon/framework/claude-cowork)
- [Codex](https://composio.dev/toolkits/polygon/framework/codex)
- [OpenClaw](https://composio.dev/toolkits/polygon/framework/openclaw)
- [Hermes](https://composio.dev/toolkits/polygon/framework/hermes-agent)
- [CLI](https://composio.dev/toolkits/polygon/framework/cli)
- [Google ADK](https://composio.dev/toolkits/polygon/framework/google-adk)
- [LangChain](https://composio.dev/toolkits/polygon/framework/langchain)
- [Vercel AI SDK](https://composio.dev/toolkits/polygon/framework/ai-sdk)
- [Mastra AI](https://composio.dev/toolkits/polygon/framework/mastra-ai)
- [LlamaIndex](https://composio.dev/toolkits/polygon/framework/llama-index)
- [CrewAI](https://composio.dev/toolkits/polygon/framework/crew-ai)

## TL;DR

Here's what you'll learn:
- Get and set up your OpenAI and Composio API keys
- Install the necessary dependencies
- Initialize Composio and create a Tool Router session for Polygon
- Configure an AI agent that can use Polygon as a tool
- Run a live chat session where you can ask the agent to perform Polygon operations

## What is OpenAI Agents SDK?

The OpenAI Agents SDK is a lightweight framework for building AI agents that can use tools and maintain conversation state. It provides a simple interface for creating agents with hosted MCP tool support.
Key features include:
- Hosted MCP Tools: Connect to external services through hosted MCP endpoints
- SQLite Sessions: Persist conversation history across interactions
- Simple API: Clean interface with Agent, Runner, and tool configuration
- Streaming Support: Real-time response streaming for interactive applications

## What is the Polygon MCP server, and what's possible with it?

The Polygon MCP server is an implementation of the Model Context Protocol that connects your AI agent and assistants like Claude, Cursor, etc directly to your Polygon account. It provides structured and secure access to real-time and historical financial market data, so your agent can retrieve market status, analyze price indicators, track dividends, and monitor crypto and stock tickers on your behalf.
- Market status and holiday tracking: Instantly check if U.S. exchanges are open or closed and retrieve upcoming market holidays or early closures to plan trading activities.
- Comprehensive ticker retrieval: Ask your agent to fetch all available ticker symbols across asset classes, including stocks, crypto, forex, and options, filtered by market or exchange.
- Crypto technical analysis: Have your agent calculate moving averages (EMA, SMA), MACD, and RSI indicators for specific cryptocurrencies to support informed trading decisions.
- Daily and historical price fetching: Let your agent retrieve daily open/close prices, previous day’s close, or detailed price history for cryptocurrencies and stocks with just a prompt.
- Dividend data extraction: Effortlessly access up-to-date corporate dividend information for stocks, enabling portfolio reviews and income analysis.

## Supported Tools

| Tool slug | Name | Description |
|---|---|---|
| `POLYGON_GET10_K_SECTIONS` | Get 10-K Filing Sections | Tool to retrieve 10-K filing sections from the SEC. Use when you need to access specific sections of 10-K filings such as business descriptions, risk factors, or financial statements. |
| `POLYGON_GET_AGGREGATES` | Get Aggregates | Tool to fetch custom aggregate OHLCV bars for a stock. Use when you need historical price and volume data aggregated by custom intervals over a date range. |
| `POLYGON_GET_ALL_TICKERS` | Get All Tickers | Tool to retrieve all ticker symbols across asset classes. Use when you need to filter by market or exchange and paginate through results. Without filters, result sets can be extremely large — always narrow queries using `market`, `search`, `ticker`, or `exchange`. |
| `POLYGON_GET_CONDITION_CODES` | Get Condition Codes | Tool to retrieve a unified list of trade and quote condition codes and their definitions. Use when needing to decode condition identifiers after fetching market data. |
| `POLYGON_GET_CRYPTO_AGGREGATES` | Get Crypto Aggregates | Tool to retrieve aggregate bars for a cryptocurrency over a time range. Use when you need to fetch historical bars aggregated by specific time intervals. |
| `POLYGON_GET_CRYPTO_ALL_TICKERS` | Get Crypto All Tickers Snapshot | Tool to retrieve snapshots for all cryptocurrency tickers. Use when you need a full-market crypto snapshot of the latest values. |
| `POLYGON_GET_CRYPTO_EMA` | Get Crypto EMA | Tool to calculate Exponential Moving Average (EMA) technical indicator for a crypto ticker. Use when you need trend analysis or moving average calculations for cryptocurrency pairs. |
| `POLYGON_GET_CRYPTO_GROUPED_DAILY` | Get Crypto Grouped Daily | Tool to retrieve daily grouped bars for all cryptocurrencies on a specified date. Use when you need a comprehensive end-of-day summary across all crypto tickers. |
| `POLYGON_GET_CRYPTO_LAST_TRADE` | Get Crypto Last Trade | Tool to retrieve the last trade for a specified cryptocurrency pair. Use when you need the most recent trade details after specifying both symbols. |
| `POLYGON_GET_CRYPTO_MACD` | Get Crypto MACD | Tool to calculate Moving Average Convergence/Divergence (MACD) technical indicator for a crypto ticker. Use when you need momentum analysis, trend identification, or trading signal generation for cryptocurrency pairs. |
| `POLYGON_GET_CRYPTO_OPEN_CLOSE` | Get Crypto Open/Close | Tool to fetch daily open and close prices for a given crypto pair on a specified date. Use after specifying both currency symbols and the date. |
| `POLYGON_GET_CRYPTO_PREV_CLOSE` | Get Crypto Previous Close | Tool to retrieve previous day’s close for a crypto ticker. Use when you need the last closing price of a cryptocurrency before analysis or trading. |
| `POLYGON_GET_CRYPTO_RSI` | Get Crypto RSI | Tool to calculate the Relative Strength Index (RSI) for a cryptocurrency ticker. Use when you need to analyze momentum or identify overbought/oversold conditions for crypto assets. |
| `POLYGON_GET_CRYPTO_SMA` | Get Crypto SMA | Tool to calculate Simple Moving Average (SMA) technical indicator for a cryptocurrency ticker. Use when you need trend analysis, support/resistance levels, or trading signal generation for crypto pairs. |
| `POLYGON_GET_CRYPTO_TICKER_BOOK` | Get Crypto Ticker Book | Tool to retrieve the full L2 order book for a crypto ticker. Use when you need a snapshot of combined bids and asks for market depth analysis. |
| `POLYGON_GET_CRYPTO_TRADES` | Get Crypto Trades | Tool to fetch historical trade data for a cryptocurrency ticker. Use when you need tick-level trades within a time range. |
| `POLYGON_GET_DIVIDENDS` | Get Dividends | Tool to retrieve dividend data for stocks. Use when you need corporate dividend information for specific tickers. |
| `POLYGON_GET_ECONOMY_INFLATION` | Get Economy Inflation Indicators | Tool to retrieve key indicators of realized inflation including CPI and PCE price indexes. Use when analyzing inflation trends, economic conditions, or historical price changes in the U.S. economy. |
| `POLYGON_GET_EMA` | Get Exponential Moving Average | Tool to retrieve the Exponential Moving Average for a stock ticker. Use when you need EMA values across a specific timespan with optional underlying data. |
| `POLYGON_GET_FILING` | Get SEC Filing | Tool to retrieve SEC filing details by filing ID. Use when you need detailed information about a specific SEC filing. |
| `POLYGON_GET_FILING_FILE` | Get SEC Filing File | Tool to retrieve information about a specific SEC filing file. Use when you need to get metadata and download URL for a particular file within an SEC filing. |
| `POLYGON_GET_FOREX_AGGREGATES` | Get Forex Aggregates | Tool to retrieve aggregate bars for a forex pair over a date range. Use when you need custom OHLC bars for forex currency pairs within specified time span. |
| `POLYGON_GET_FOREX_EMA` | Get Forex EMA | Tool to calculate Exponential Moving Average (EMA) technical indicator for a forex pair. Use when you need trend analysis or moving average calculations for currency pairs. |
| `POLYGON_GET_FOREX_GROUPED_DAILY` | Get Forex Grouped Daily Bars | Tool to retrieve daily grouped OHLC bars for all forex currency pairs on a specified date. Use when you need aggregated forex data after confirming the date parameter. |
| `POLYGON_GET_FOREX_HISTORICAL_QUOTES` | Get Forex Historical Quotes | Tool to retrieve historical forex quotes for a currency pair over a time range. Use when you need bid/ask quotes for an FX ticker between timestamps or dates. Use after confirming the forex ticker symbol. |
| `POLYGON_GET_FOREX_LOCALES` | Get Forex Locales | Tool to list locales supported by Polygon's forex asset class. Use when you need available locale codes for regional filtering in FX endpoints. |
| `POLYGON_GET_FOREX_MACD` | Get Forex MACD | Tool to calculate Moving Average Convergence/Divergence (MACD) technical indicator for a forex pair. Use when you need momentum analysis, trend identification, or trading signal generation for currency pairs. |
| `POLYGON_GET_FOREX_PREV_CLOSE` | Get Forex Previous Close | Tool to retrieve previous day's close for a forex ticker. Use when you need the last closing price of a forex currency pair before analysis or trading. |
| `POLYGON_GET_FOREX_REAL_TIME_CURRENCY_CONVERSION` | Get Forex Real-Time Currency Conversion | Tool to convert amounts between currency pairs using real-time forex rates. Use when you need to perform currency conversions with the latest market rates. |
| `POLYGON_GET_FOREX_RSI` | Get Forex RSI | Tool to calculate the Relative Strength Index (RSI) technical indicator for a forex pair. Use when you need momentum analysis or want to identify overbought/oversold conditions for currency pairs. |
| `POLYGON_GET_FOREX_SMA` | Get Forex SMA | Tool to calculate Simple Moving Average (SMA) technical indicator for a forex pair. Use when you need trend analysis or moving average calculations for currency pairs. |
| `POLYGON_GET_FOREX_SNAPSHOT_LOSERS` | Get Forex Snapshot Losers | Tool to retrieve the current snapshot of the top losers in the forex market. Use when you need up-to-date information on the worst-performing forex pairs. |
| `POLYGON_GET_FUTURES_AGGREGATES` | Get Futures Aggregates | Tool to retrieve historical OHLCV aggregates for a futures contract. Use when you need aggregated price and volume data for a futures contract over specified time windows. |
| `POLYGON_GET_FUTURES_PRODUCTS` | Get Futures Products | Tool to retrieve a comprehensive list of futures products with advanced filtering. Use when you need to filter futures listings by date, sector, exchange, or type. |
| `POLYGON_GET_FUTURES_PRODUCT_SCHEDULES` | Get Futures Product Schedules | Tool to retrieve trading schedules for a futures product. Use when you need daily trading session schedules for a given product code. |
| `POLYGON_GET_FUTURES_QUOTES` | Get Futures Quotes | Tool to retrieve real-time quote data for a specified futures contract ticker. Use after confirming the exact futures ticker identifier (e.g., 'GCJ5'). |
| `POLYGON_GET_FUTURES_SCHEDULES` | Get Futures Schedules | Tool to retrieve futures trading schedules. Use when you need trading schedules for all futures contracts on a specific date. |
| `POLYGON_GET_FUTURES_TRADES` | Get Futures Trades | Tool to retrieve tick-level trade data for a specified futures contract. Use when you need detailed trade data over a time range. |
| `POLYGON_GET_HISTORIC_FOREX_TICKS` | Get Historic Forex Ticks | Tool to get historic ticks for a currency pair on a specific date. Use when you need historical forex tick-level data (ask/bid prices with timestamps) for a given day. |
| `POLYGON_GET_INFLATION_EXPECTATIONS` | Get Inflation Expectations | Tool to retrieve inflation expectations data from the Federal Reserve based on Treasury yields and Cleveland Fed models. Use when analyzing expected future inflation rates across multiple time horizons (1-year, 5-year, 10-year, 30-year). |
| `POLYGON_GET_IPO_DATA` | Get IPO Data | Tool to retrieve comprehensive information on Initial Public Offerings (IPOs), including upcoming and historical events. Use when analyzing IPO listing data by date range, ticker, or identifier. |
| `POLYGON_GET_MACD` | Get MACD | Tool to retrieve the Moving Average Convergence/Divergence (MACD) for a stock ticker. Use when you need momentum analysis or signal generation over a specified timeframe. |
| `POLYGON_GET_MARKET_HOLIDAYS` | Get Upcoming Market Holidays | Tool to retrieve upcoming market holidays and half-day closures. Use when you need to look up upcoming exchange holidays and early closures. |
| `POLYGON_GET_MARKET_STATUS` | Get Market Status | Tool to retrieve current market status. Use when you need to know if U.S. exchanges are open, closed, or on holiday. |
| `POLYGON_GET_META_CONDITIONS_BY_TICKTYPE` | Get Meta Conditions By Ticktype | Tool to retrieve condition code mappings for a specific tick type (trades or quotes). Use when you need to decode numeric condition codes into human-readable labels for market data interpretation. |
| `POLYGON_GET_NEWS` | Get News | Tool to retrieve recent news articles related to a ticker. Use when you need to fetch financial news after identifying a ticker symbol. |
| `POLYGON_GET_OPEN_CLOSE` | Get Stock Open/Close | Tool to fetch daily open and close prices for a stock on a specific date. Use when you need daily OHLC with pre/post-market prices. |
| `POLYGON_GET_OPTION_CHAIN_SNAPSHOT` | Get Option Chain Snapshot | Tool to fetch a real-time snapshot of all option contracts for an underlying asset. Use after selecting the underlying ticker to retrieve live option chain data. |
| `POLYGON_GET_OPTIONS_CONTRACT_OVERVIEW` | Get Options Contract Overview | Tool to retrieve comprehensive details about a specific options contract including contract type, exercise style, expiration date, strike price, and underlying ticker. Use when you need specifications for options contract analysis or strategy development. |
| `POLYGON_GET_OPTIONS_CUSTOM_BARS` | Get Options Custom Bars | Tool to retrieve historical OHLC and volume data for options contracts over custom date ranges with configurable time windows. Use when you need aggregate bars for options price analysis or strategy development. |
| `POLYGON_GET_OPTIONS_EMA` | Get Options EMA | Tool to calculate Exponential Moving Average (EMA) technical indicator for an options ticker. Use when you need trend analysis or moving average calculations for options contracts. |
| `POLYGON_GET_OPTIONS_MACD` | Get Options MACD | Tool to calculate Moving Average Convergence/Divergence (MACD) technical indicator for an options ticker. Use when you need momentum analysis, trend identification, or trading signal generation for options contracts. |
| `POLYGON_GET_OPTION_SNAPSHOT` | Get Option Snapshot | Tool to retrieve a real-time snapshot for a single option contract. Use when you need up-to-the-minute quotes, trades, greeks, and metrics for a specified option contract. |
| `POLYGON_GET_OPTIONS_RSI` | Get Options RSI | Tool to calculate Relative Strength Index (RSI) technical indicator for an options ticker. Use when you need momentum analysis or want to identify overbought/oversold conditions for options contracts. |
| `POLYGON_GET_OPTIONS_SMA` | Get Options SMA | Tool to calculate Simple Moving Average (SMA) technical indicator for an options ticker. Use when you need trend analysis or smoothed price data for options contracts. |
| `POLYGON_GET_PREVIOUS_CLOSE` | Get Previous Close | Tool to get previous trading day’s OHLC and volume for a stock. Use when you need the last day’s open, high, low, close, and volume for a given ticker. |
| `POLYGON_GET_REFERENCE_EXCHANGES` | Get reference exchanges | Tool to retrieve supported exchanges and their details. Use when you need a list of exchanges filtered by asset class or locale. |
| `POLYGON_GET_REFERENCE_MARKETS` | Get reference markets | Tool to retrieve all supported markets from Polygon.io. Use when you need a list of available market types. |
| `POLYGON_GET_REFERENCE_TYPES` | Get Reference Ticker Types | Tool to retrieve all ticker types supported by Polygon. Use when you need to understand the different ticker classifications available across asset classes and markets. |
| `POLYGON_GET_RELATED_COMPANIES` | Get Related Companies | Tool to get a list of related companies for a ticker symbol based on various similarity metrics. Use when you need to find companies related to a specific ticker. |
| `POLYGON_GET_RISK_CATEGORIES` | Get Risk Categories | Tool to retrieve risk factor taxonomy categories from SEC 10-K filings. Use when you need to explore or filter risk classifications by taxonomy version or category level. |
| `POLYGON_GET_RSI` | Get RSI | Tool to retrieve the Relative Strength Index (RSI) for a stock ticker. Use after confirming ticker symbol and timespan to analyze momentum over a period. |
| `POLYGON_GET_SHORT_INTEREST` | Get Short Interest | Tool to retrieve bi-monthly aggregated short interest data for stocks reported to FINRA. Use when analyzing sentiment, identifying potential short squeezes, or researching short positions. |
| `POLYGON_GET_SHORT_VOLUME` | Get Short Volume | Tool to retrieve short volume data for stocks. Use when analyzing short selling activity, market sentiment, or detecting abnormal short-selling patterns. |
| `POLYGON_GET_SMA` | Get Simple Moving Average | Tool to retrieve the Simple Moving Average (SMA) for any ticker (stocks, forex, crypto). Use when you need SMA values over a specified timespan with optional underlying data. |
| `POLYGON_GET_SNAPSHOT_ALL_TICKERS` | Get All Stock Tickers Snapshot | Tool to retrieve the current market snapshot for all stock tickers. Use when you need real-time OHLCV, trades, and quotes across the entire US stock market in one call. |
| `POLYGON_GET_SNAPSHOT_LOSERS` | Get Stock Snapshot Losers | Tool to retrieve the current snapshot of the top losers in the U.S. stock market. Use when you need up-to-date information on the worst-performing stocks. |
| `POLYGON_GET_SNAPSHOT_SINGLE_TICKER` | Get Stock Snapshot Ticker | Tool to retrieve the current snapshot of a specific stock ticker. Use when you need the most recent market snapshot after specifying the ticker symbol. |
| `POLYGON_GET_SPLITS` | Get Stock Splits | Tool to retrieve stock split events. Use when you need corporate stock split data filtered by ticker or date range. Example: "Get splits for AAPL between 2021-01-01 and 2021-12-31". |
| `POLYGON_GET_STOCK_FINANCIALS` | Get Stock Financials | Tool to retrieve historical financial data for a stock ticker from SEC filings. Use when analyzing company financials, comparing quarters, or examining financial trends. |
| `POLYGON_GET_STOCK_FLOAT` | Get Stock Float | Tool to retrieve stock float data showing the number and percentage of publicly tradable shares. Use when you need information about the free float of stocks. |
| `POLYGON_GET_STOCKS_BALANCE_SHEETS` | Get Stocks Balance Sheets | Tool to retrieve point-in-time balance sheet data including assets, liabilities, and equity from company SEC filings. Use when analyzing financial position with quarterly and annual history. |
| `POLYGON_GET_STOCKS_CASH_FLOW_STATEMENTS` | Get Stocks Cash Flow Statements | Tool to retrieve historical cash flow statement data from company SEC filings across quarterly, annual, and TTM frequencies. Use when analyzing cash generation, operating activities, investing activities, or financing activities. |
| `POLYGON_GET_STOCKS_CUSTOM_BARS` | Get Stocks Custom Bars | Tool to retrieve aggregated historical OHLC and volume data for a stock over custom date ranges with configurable time windows. Use when you need aggregate bars for stock price analysis, backtesting, or charting. |
| `POLYGON_GET_STOCKS_DAILY_MARKET_SUMMARY` | Get Stocks Daily Market Summary | Tool to retrieve daily OHLC, volume, and VWAP data for all U.S. stocks on a specified trading date. Use when you need to get grouped daily aggregate bars for all US stocks for a specific date. |
| `POLYGON_GET_STOCK_SPLITS_BY_TICKER` | Get Stock Splits by Ticker | Tool to retrieve historical stock splits for a specific ticker symbol. Use when you need split history including ex-dates, payment dates, and split ratios for a particular stock. |
| `POLYGON_GET_TECHNICAL_INDICATOR_SMA` | Get Simple Moving Average (SMA) | Tool to fetch Simple Moving Average (SMA) for a given stock ticker. Use when you need historical SMA data after confirming ticker, timespan, and window size. |
| `POLYGON_GET_TICKER_COMPANY_DETAILS` | Get Ticker Company Details | Tool to retrieve detailed company information for a stock ticker. Use when you need company fundamentals like CEO, industry, sector, market cap, and headquarters information. |
| `POLYGON_GET_TICKER_DETAILS` | Get Ticker Details | Tool to retrieve detailed information for a ticker. Use when you need an overview of a ticker including company info, market data, and identifiers. |
| `POLYGON_GET_TICKER_DETAILS_VX` | Get Ticker Details (vX) | Tool to retrieve comprehensive details for a specific ticker symbol using Polygon's vX API. Use when you need detailed information about a company including identifiers, market data, and corporate details. |
| `POLYGON_GET_TICKER_EVENTS` | Get Ticker Events | Tool to retrieve corporate events for a specific ticker. Use when you need the timeline of corporate actions for a given ticker. |
| `POLYGON_GET_TICKER_TYPES` | Get Ticker Types | Tool to retrieve all ticker types supported by Polygon.io. Use after authenticating to explore ticker categories. |
| `POLYGON_GET_TREASURY_YIELDS` | Get Treasury Yields | Tool to retrieve historical U.S. Treasury yield data for standard timeframes from 1-month to 30-year maturities. Use when analyzing interest rates, yield curves, or economic indicators. Data available daily back to 1962. |
| `POLYGON_GET_V1_META_CRYPTO_EXCHANGES` | Get V1 Meta Crypto Exchanges | Tool to retrieve a list of cryptocurrency exchanges using the legacy v1 API. Use when you need the complete list of crypto exchanges supported. |
| `POLYGON_LAST_QUOTE_FOR_A_SYMBOL` | Last Quote for a Symbol | Tool to retrieve the last quote tick for a given stock symbol. Use when you need the most recent bid/ask prices, sizes, and exchange information for a stock. |
| `POLYGON_LAST_TRADE_FOR_A_CURRENCY_PAIR` | Last Trade for a Currency Pair | Tool to retrieve the last trade tick for a currency pair in the forex market. Use when you need the most recent trade price, exchange, and timestamp for a specific currency pair. |
| `POLYGON_LIST_FILING_FILES` | List SEC Filing Files | Tool to retrieve files associated with an SEC filing. Use when you need to list all files (documents, exhibits, etc.) attached to a specific SEC filing by its filing ID. |
| `POLYGON_LIST_OPTIONS_CONTRACTS` | List Options Contracts | Tool to list and filter options contracts by underlying ticker, type, expiration, strike, and more. Use when you need to enumerate an options chain or find specific contracts matching criteria. |
| `POLYGON_LIST_SEC_FILINGS` | List SEC Filings | Tool to retrieve SEC filings from Polygon. Use when you need to query 10-K or 10-Q filings by company, date range, or other criteria. |

## Supported Triggers

None listed.

## Creating MCP Server - Stand-alone vs Composio SDK

The Polygon MCP server is an implementation of the Model Context Protocol that connects your AI agent to Polygon. It provides structured and secure access so your agent can perform Polygon operations on your behalf through a secure, permission-based interface.
With Composio's managed implementation, you don't have to create your own developer app. For production, if you're building an end product, we recommend using your own credentials. The managed server helps you prototype fast and go from 0-1 faster.

## Step-by-step Guide

### 1. Prerequisites

Before starting, make sure you have:
- Composio API Key and OpenAI API Key
- Primary know-how of OpenAI Agents SDK
- A live Polygon project
- Some knowledge of Python or Typescript

### 1. Getting API Keys for OpenAI and Composio

OpenAI API Key
- Go to the [OpenAI dashboard](https://platform.openai.com/settings/organization/api-keys) and create an API key. You'll need credits to use the models, or you can connect to another model provider.
- Keep the API key safe.
Composio API Key
- Log in to the [Composio dashboard](https://dashboard.composio.dev?utm_source=toolkits&utm_medium=framework_docs).
- Go to Settings and copy your API key.

### 2. Install dependencies

Install the Composio SDK and the OpenAI Agents SDK.
```python
pip install composio_openai_agents openai-agents python-dotenv
```

```typescript
npm install @composio/openai-agents @openai/agents dotenv
```

### 3. Set up environment variables

Create a .env file and add your OpenAI and Composio API keys.
```bash
OPENAI_API_KEY=sk-...your-api-key
COMPOSIO_API_KEY=your-api-key
USER_ID=composio_user@gmail.com
```

### 4. Import dependencies

What's happening:
- You're importing all necessary libraries.
- The Composio and OpenAIAgentsProvider classes are imported to connect your OpenAI agent to Composio tools like Polygon.
```python
import asyncio
import os
from dotenv import load_dotenv

from composio import Composio
from composio_openai_agents import OpenAIAgentsProvider
from agents import Agent, Runner, HostedMCPTool, SQLiteSession
```

```typescript
import 'dotenv/config';
import { Composio } from '@composio/core';
import { OpenAIAgentsProvider } from '@composio/openai-agents';
import { Agent, hostedMcpTool, run, OpenAIConversationsSession } from '@openai/agents';
import * as readline from 'readline';
```

### 5. Set up the Composio instance

No description provided.
```python
load_dotenv()

api_key = os.getenv("COMPOSIO_API_KEY")
user_id = os.getenv("USER_ID")

if not api_key:
    raise RuntimeError("COMPOSIO_API_KEY is not set. Create a .env file with COMPOSIO_API_KEY=your_key")

# Initialize Composio
composio = Composio(api_key=api_key, provider=OpenAIAgentsProvider())
```

```typescript
dotenv.config();

const composioApiKey = process.env.COMPOSIO_API_KEY;
const userId = process.env.USER_ID;

if (!composioApiKey) {
  throw new Error('COMPOSIO_API_KEY is not set. Create a .env file with COMPOSIO_API_KEY=your_key');
}
if (!userId) {
  throw new Error('USER_ID is not set');
}

// Initialize Composio
const composio = new Composio({
  apiKey: composioApiKey,
  provider: new OpenAIAgentsProvider(),
});
```

### 6. Create a Tool Router session

What is happening:
- You give the Tool Router the user id and the toolkits you want available. Here, it is only polygon.
- The router checks the user's Polygon connection and prepares the MCP endpoint.
- The returned session.mcp.url is the MCP URL that your agent will use to access Polygon.
- This approach keeps things lightweight and lets the agent request Polygon tools only when needed during the conversation.
```python
# Create a Polygon Tool Router session
session = composio.create(
    user_id=user_id,
    toolkits=["polygon"]
)

mcp_url = session.mcp.url
```

```typescript
// Create Tool Router session for Polygon
const session = await composio.create(userId as string, {
  toolkits: ['polygon'],
});
const mcpUrl = session.mcp.url;
```

### 7. Configure the agent

No description provided.
```python
# Configure agent with MCP tool
agent = Agent(
    name="Assistant",
    model="gpt-5",
    instructions=(
        "You are a helpful assistant that can access Polygon. "
        "Help users perform Polygon operations through natural language."
    ),
    tools=[
        HostedMCPTool(
            tool_config={
                "type": "mcp",
                "server_label": "tool_router",
                "server_url": mcp_url,
                "headers": {"x-api-key": api_key},
                "require_approval": "never",
            }
        )
    ],
)
```

```typescript
// Configure agent with MCP tool
const agent = new Agent({
  name: 'Assistant',
  model: 'gpt-5',
  instructions:
    'You are a helpful assistant that can access Polygon. Help users perform Polygon operations through natural language.',
  tools: [
    hostedMcpTool({
      serverLabel: 'tool_router',
      serverUrl: mcpUrl,
      headers: { 'x-api-key': composioApiKey },
      requireApproval: 'never',
    }),
  ],
});
```

### 8. Start chat loop and handle conversation

No description provided.
```python
print("\nComposio Tool Router session created.")

chat_session = SQLiteSession("conversation_openai_toolrouter")

print("\nChat started. Type your requests below.")
print("Commands: 'exit', 'quit', or 'q' to end\n")

async def main():
    try:
        result = await Runner.run(
            agent,
            "What can you help me with?",
            session=chat_session
        )
        print(f"Assistant: {result.final_output}\n")
    except Exception as e:
        print(f"Error: {e}\n")

    while True:
        user_input = input("You: ").strip()
        if user_input.lower() in {"exit", "quit", "q"}:
            print("Goodbye!")
            break

        result = await Runner.run(
            agent,
            user_input,
            session=chat_session
        )
        print(f"Assistant: {result.final_output}\n")

asyncio.run(main())
```

```typescript
// Keep conversation state across turns
const conversationSession = new OpenAIConversationsSession();

// Simple CLI
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
  prompt: 'You: ',
});

console.log('\nComposio Tool Router session created.');
console.log('\nChat started. Type your requests below.');
console.log("Commands: 'exit', 'quit', or 'q' to end\n");

try {
  const first = await run(agent, 'What can you help me with?', { session: conversationSession });
  console.log(`Assistant: ${first.finalOutput}\n`);
} catch (e) {
  console.error('Error:', e instanceof Error ? e.message : e, '\n');
}

rl.prompt();

rl.on('line', async (userInput) => {
  const text = userInput.trim();

  if (['exit', 'quit', 'q'].includes(text.toLowerCase())) {
    console.log('Goodbye!');
    rl.close();
    process.exit(0);
  }

  if (!text) {
    rl.prompt();
    return;
  }

  try {
    const result = await run(agent, text, { session: conversationSession });
    console.log(`\nAssistant: ${result.finalOutput}\n`);
  } catch (e) {
    console.error('Error:', e instanceof Error ? e.message : e, '\n');
  }

  rl.prompt();
});

rl.on('close', () => {
  console.log('\n👋 Session ended.');
  process.exit(0);
});
```

## Complete Code

```python
import asyncio
import os
from dotenv import load_dotenv

from composio import Composio
from composio_openai_agents import OpenAIAgentsProvider
from agents import Agent, Runner, HostedMCPTool, SQLiteSession

load_dotenv()

api_key = os.getenv("COMPOSIO_API_KEY")
user_id = os.getenv("USER_ID")

if not api_key:
    raise RuntimeError("COMPOSIO_API_KEY is not set. Create a .env file with COMPOSIO_API_KEY=your_key")

# Initialize Composio
composio = Composio(api_key=api_key, provider=OpenAIAgentsProvider())

# Create Tool Router session
session = composio.create(
    user_id=user_id,
    toolkits=["polygon"]
)
mcp_url = session.mcp.url

# Configure agent with MCP tool
agent = Agent(
    name="Assistant",
    model="gpt-5",
    instructions=(
        "You are a helpful assistant that can access Polygon. "
        "Help users perform Polygon operations through natural language."
    ),
    tools=[
        HostedMCPTool(
            tool_config={
                "type": "mcp",
                "server_label": "tool_router",
                "server_url": mcp_url,
                "headers": {"x-api-key": api_key},
                "require_approval": "never",
            }
        )
    ],
)

print("\nComposio Tool Router session created.")

chat_session = SQLiteSession("conversation_openai_toolrouter")

print("\nChat started. Type your requests below.")
print("Commands: 'exit', 'quit', or 'q' to end\n")

async def main():
    try:
        result = await Runner.run(
            agent,
            "What can you help me with?",
            session=chat_session
        )
        print(f"Assistant: {result.final_output}\n")
    except Exception as e:
        print(f"Error: {e}\n")

    while True:
        user_input = input("You: ").strip()
        if user_input.lower() in {"exit", "quit", "q"}:
            print("Goodbye!")
            break

        result = await Runner.run(
            agent,
            user_input,
            session=chat_session
        )
        print(f"Assistant: {result.final_output}\n")

asyncio.run(main())
```

```typescript
import 'dotenv/config';
import { Composio } from '@composio/core';
import { OpenAIAgentsProvider } from '@composio/openai-agents';
import { Agent, hostedMcpTool, run, OpenAIConversationsSession } from '@openai/agents';
import * as readline from 'readline';

const composioApiKey = process.env.COMPOSIO_API_KEY;
const userId = process.env.USER_ID;

if (!composioApiKey) {
  throw new Error('COMPOSIO_API_KEY is not set. Create a .env file with COMPOSIO_API_KEY=your_key');
}
if (!userId) {
  throw new Error('USER_ID is not set');
}

// Initialize Composio
const composio = new Composio({
  apiKey: composioApiKey,
  provider: new OpenAIAgentsProvider(),
});

async function main() {
  // Create Tool Router session
  const session = await composio.create(userId as string, {
    toolkits: ['polygon'],
  });
  const mcpUrl = session.mcp.url;

  // Configure agent with MCP tool
  const agent = new Agent({
    name: 'Assistant',
    model: 'gpt-5',
    instructions:
      'You are a helpful assistant that can access Polygon. Help users perform Polygon operations through natural language.',
    tools: [
      hostedMcpTool({
        serverLabel: 'tool_router',
        serverUrl: mcpUrl,
        headers: { 'x-api-key': composioApiKey },
        requireApproval: 'never',
      }),
    ],
  });

  // Keep conversation state across turns
  const conversationSession = new OpenAIConversationsSession();

  // Simple CLI
  const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
    prompt: 'You: ',
  });

  console.log('\nComposio Tool Router session created.');
  console.log('\nChat started. Type your requests below.');
  console.log("Commands: 'exit', 'quit', or 'q' to end\n");

  try {
    const first = await run(agent, 'What can you help me with?', { session: conversationSession });
    console.log(`Assistant: ${first.finalOutput}\n`);
  } catch (e) {
    console.error('Error:', e instanceof Error ? e.message : e, '\n');
  }

  rl.prompt();

  rl.on('line', async (userInput) => {
    const text = userInput.trim();

    if (['exit', 'quit', 'q'].includes(text.toLowerCase())) {
      console.log('Goodbye!');
      rl.close();
      process.exit(0);
    }

    if (!text) {
      rl.prompt();
      return;
    }

    try {
      const result = await run(agent, text, { session: conversationSession });
      console.log(`\nAssistant: ${result.finalOutput}\n`);
    } catch (e) {
      console.error('Error:', e instanceof Error ? e.message : e, '\n');
    }

    rl.prompt();
  });

  rl.on('close', () => {
    console.log('\nSession ended.');
    process.exit(0);
  });
}

main().catch((err) => {
  console.error('Fatal error:', err);
  process.exit(1);
});
```

## Conclusion

This was a starter code for integrating Polygon MCP with OpenAI Agents SDK to build a functional AI agent that can interact with Polygon.
Key features:
- Hosted MCP tool integration through Composio's Tool Router
- SQLite session persistence for conversation history
- Simple async chat loop for interactive testing
You can extend this by adding more toolkits, implementing custom business logic, or building a web interface around the agent.

## How to build Polygon MCP Agent with another framework

- [Claude Agent SDK](https://composio.dev/toolkits/polygon/framework/claude-agents-sdk)
- [Claude Code](https://composio.dev/toolkits/polygon/framework/claude-code)
- [Claude Cowork](https://composio.dev/toolkits/polygon/framework/claude-cowork)
- [Codex](https://composio.dev/toolkits/polygon/framework/codex)
- [OpenClaw](https://composio.dev/toolkits/polygon/framework/openclaw)
- [Hermes](https://composio.dev/toolkits/polygon/framework/hermes-agent)
- [CLI](https://composio.dev/toolkits/polygon/framework/cli)
- [Google ADK](https://composio.dev/toolkits/polygon/framework/google-adk)
- [LangChain](https://composio.dev/toolkits/polygon/framework/langchain)
- [Vercel AI SDK](https://composio.dev/toolkits/polygon/framework/ai-sdk)
- [Mastra AI](https://composio.dev/toolkits/polygon/framework/mastra-ai)
- [LlamaIndex](https://composio.dev/toolkits/polygon/framework/llama-index)
- [CrewAI](https://composio.dev/toolkits/polygon/framework/crew-ai)

## Related Toolkits

- [Stripe](https://composio.dev/toolkits/stripe) - Stripe is a global online payments platform offering APIs for managing payments, customers, and subscriptions. Trusted by businesses for secure, efficient, and scalable payment processing worldwide.
- [Alpha vantage](https://composio.dev/toolkits/alpha_vantage) - Alpha Vantage is a financial data platform offering real-time and historical stock market APIs. Get instant, reliable access to equities, forex, and technical analysis data for smarter trading decisions.
- [Altoviz](https://composio.dev/toolkits/altoviz) - Altoviz is a cloud-based billing and invoicing platform for businesses. It streamlines online payments, expense tracking, and customizable invoice management.
- [Benzinga](https://composio.dev/toolkits/benzinga) - Benzinga provides real-time financial news and data APIs for market coverage. It helps you track breaking news and actionable market insights instantly.
- [Brex](https://composio.dev/toolkits/brex) - Brex provides corporate credit cards and spend management tailored for startups and tech businesses. It helps optimize company cash flow, streamline accounting, and accelerate business growth.
- [Chaser](https://composio.dev/toolkits/chaser) - Chaser is accounts receivable automation software that sends invoice reminders and helps businesses get paid faster. It streamlines the collections process to save time and improve cash flow.
- [Clientary](https://composio.dev/toolkits/clientary) - Clientary is a platform for managing clients, invoices, projects, proposals, and more. It streamlines client work and saves you serious admin time.
- [Coinbase](https://composio.dev/toolkits/coinbase) - Coinbase is a platform for buying, selling, and storing cryptocurrency. It makes exchanging and managing crypto simple and secure for everyone.
- [Coinranking](https://composio.dev/toolkits/coinranking) - Coinranking is a comprehensive cryptocurrency market data platform offering access to real-time coin prices, market caps, and historical data. Get accurate, up-to-date stats for thousands of digital assets in one place.
- [Coupa](https://composio.dev/toolkits/coupa) - Coupa is a business spend management platform for procurement, invoicing, and expenses. It helps organizations streamline purchasing, control costs, and gain complete visibility over financial operations.
- [CurrencyScoop](https://composio.dev/toolkits/currencyscoop) - CurrencyScoop is a developer-friendly API for real-time and historical currency exchange rates. Easily access fiat and crypto data for smart, up-to-date financial applications.
- [Daffy](https://composio.dev/toolkits/daffy) - Daffy is a modern charitable giving platform with a donor-advised fund. Easily set aside funds, grow them tax-free, and donate to over 1.7 million U.S. charities.
- [Eagle doc](https://composio.dev/toolkits/eagle_doc) - Eagle doc is an AI-powered OCR API for invoices and receipts. It delivers fast, reliable, and accurate document data extraction for seamless automation.
- [Elorus](https://composio.dev/toolkits/elorus) - Elorus is an online invoicing and time-tracking software for freelancers and small businesses. Easily manage finances, bill clients, and track work in one place.
- [Eodhd apis](https://composio.dev/toolkits/eodhd_apis) - Eodhd apis delivers comprehensive financial data, including live and historical stock prices, via robust APIs. Easily access reliable, up-to-date market insights to power your apps, dashboards, and analytics.
- [Fidel api](https://composio.dev/toolkits/fidel_api) - Fidel api is a secure platform for linking payment cards to web and mobile apps. It enables real-time card transaction monitoring and event-based automation for businesses.
- [Finage](https://composio.dev/toolkits/finage) - Finage is a secure API platform delivering real-time and historical financial data for stocks, forex, crypto, indices, and commodities. It empowers developers and businesses to access, analyze, and act on market data instantly.
- [Finmei](https://composio.dev/toolkits/finmei) - Finmei is an invoicing tool that simplifies billing, invoice management, and expense tracking. Ideal for automating and organizing your business finances in one place.
- [Fixer](https://composio.dev/toolkits/fixer) - Fixer is a currency data API offering real-time and historical exchange rates for 170 currencies. Instantly access accurate, up-to-date forex data for your applications and workflows.
- [Fixer io](https://composio.dev/toolkits/fixer_io) - Fixer.io is a lightweight API for real-time and historical foreign exchange rates. It makes global currency conversion fast, accurate, and hassle-free.

## Frequently Asked Questions

### What are the differences in Tool Router MCP and Polygon MCP?

With a standalone Polygon MCP server, the agents and LLMs can only access a fixed set of Polygon tools tied to that server. However, with the Composio Tool Router, agents can dynamically load tools from Polygon and many other apps based on the task at hand, all through a single MCP endpoint.

### Can I use Tool Router MCP with OpenAI Agents SDK?

Yes, you can. OpenAI Agents SDK fully supports MCP integration. You get structured tool calling, message history handling, and model orchestration while Tool Router takes care of discovering and serving the right Polygon tools.

### Can I manage the permissions and scopes for Polygon while using Tool Router?

Yes, absolutely. You can configure which Polygon scopes and actions are allowed when connecting your account to Composio. You can also bring your own OAuth credentials or API configuration so you keep full control over what the agent can do.

### How safe is my data with Composio Tool Router?

All sensitive data such as tokens, keys, and configuration is fully encrypted at rest and in transit. Composio is SOC 2 Type 2 compliant and follows strict security practices so your Polygon data and credentials are handled as safely as possible.

---
[See all toolkits](https://composio.dev/toolkits) · [Composio docs](https://docs.composio.dev/llms.txt)
