Stock Option Chain (Calls & Puts by Strike and Expiry)
omnial/get-stock-option-chain
Given a stock ticker, returns its options chain: call and put contracts grouped by expiration date, each with strike price, last trade, bid/ask, volume, and open interest. An unrecognized symbol returns an empty result rather than an error.
Price
Up to $0.0137 per call; you pay what the call used
You pay the price shown. If a call turns out to cost more than its quote, you pay the actual price, capped at twice the quote. No monthly minimum. Top-ups start at $5.00.
Data source
Data from Nasdaq.
Use it
Your AI assistant does the work: it finds this tool, shows you the price first, runs it, and you are charged when the run finishes. There is nothing to set up for this tool in particular.
Connect once and your AI can find and run this tool, and any other it needs.
For developers: the calls your assistant makes
// 1. search: find the tool
omnial_search({ query: "what you need" })
// 2. inspect: price and input schema
omnial_inspect({ tool: "omnial/get-stock-option-chain" })
// 3. learn: read the usage guide at runtime
omnial_learn({ tool: "omnial/get-stock-option-chain" })
// 4. run: price the exact call first, then run it
omnial_execute({ tool: "omnial/get-stock-option-chain", input: { /* see input_schema */ }, dry_run: true })
omnial_execute({ tool: "omnial/get-stock-option-chain", input: { /* ... */ } })
// 5. settle: the call is charged when it finishes, nothing to doNot connected yet? Point your MCP client at https://mcp.eden-engine.com/mcp, then copy a config for your client.
Pricing
Every charge this tool can incur.
| Charge | Price |
|---|---|
Per call | $0.0137 |
- Updated
- Oct 27, 2026
Input and output schemas
Input schema
{
"type": "object",
"required": [
"symbol"
],
"properties": {
"limit": {
"type": "integer",
"description": "Max records to return."
},
"symbol": {
"type": "string",
"description": "Stock symbol (e.g. AAPL)."
},
"asset_class": {
"type": "string",
"description": "Asset class: stocks, etf."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"chain": {
"type": "object",
"properties": {
"table": {
"type": "object",
"properties": {
"asOf": {
"type": [
"string",
"null"
],
"description": "As-of label for the table. Usually null; may carry a timestamp string on other calls."
},
"contracts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"c_Ask": {
"type": [
"string",
"null"
],
"description": "Call ask price, formatted like `c_Last`."
},
"c_Bid": {
"type": [
"string",
"null"
],
"description": "Call bid price, formatted like `c_Last`."
},
"p_Ask": {
"type": [
"string",
"null"
],
"description": "Put ask price, formatted like `c_Last`."
},
"p_Bid": {
"type": [
"string",
"null"
],
"description": "Put bid price, formatted like `c_Last`."
},
"c_Last": {
"type": [
"string",
"null"
],
"description": "Call last-traded price, e.g. '116.64', or the literal string '--' when there was no trade to report. Null on a separator row."
},
"p_Last": {
"type": [
"string",
"null"
],
"description": "Put last-traded price, formatted like `c_Last`."
},
"strike": {
"type": [
"string",
"null"
],
"description": "Strike price as a formatted numeric string, e.g. '205.00'. Null on a group-header separator row."
},
"c_Change": {
"type": [
"string",
"null"
],
"description": "Call price change, formatted like `c_Last`."
},
"c_Volume": {
"type": [
"string",
"null"
],
"description": "Call trading volume as a numeric string, formatted like `c_Last`."
},
"c_colour": {
"type": "boolean",
"description": "The endpoint's own moneyness/highlight flag for the call side of this strike -- meaning not documented by the vendor beyond true/false."
},
"p_Change": {
"type": [
"string",
"null"
],
"description": "Put price change, formatted like `c_Last`."
},
"p_Volume": {
"type": [
"string",
"null"
],
"description": "Put trading volume as a numeric string, formatted like `c_Last`."
},
"p_colour": {
"type": "boolean",
"description": "The endpoint's own moneyness/highlight flag for the put side of this strike -- meaning not documented by the vendor beyond true/false."
},
"expiryDate": {
"type": [
"string",
"null"
],
"description": "Short expiry label, e.g. 'Sep 9'. Null on a group-header separator row."
},
"expirygroup": {
"type": "string",
"description": "Empty string on a real contract row; a date heading like 'September 9, 2026' on a group-header separator row."
},
"c_Openinterest": {
"type": [
"string",
"null"
],
"description": "Call open interest as a numeric string, formatted like `c_Last`."
},
"p_Openinterest": {
"type": [
"string",
"null"
],
"description": "Put open interest as a numeric string, formatted like `c_Last`."
}
},
"additionalProperties": true
},
"description": "One entry per strike/expiry combination. A row whose call and put fields are all null and whose `expirygroup` carries a date heading (e.g. 'September 9, 2026') is a group-header separator row marking the start of a new expiration date, not a real contract -- filter on `expiryDate` being non-null to get only real contract rows."
}
},
"additionalProperties": true
},
"lastTrade": {
"type": "string",
"description": "Human-readable last-trade summary line for the underlying stock, e.g. 'LAST TRADE: $319.97 (AS OF SEP 3, 2026)' -- not a structured price field."
},
"totalRecord": {
"type": "number",
"description": "Total number of contract rows available, e.g. 1592."
}
},
"additionalProperties": true
}
},
"additionalProperties": true
},
"status": {
"type": "string",
"description": "Typically 'success'."
}
},
"description": "The option-chain record. Empty ({}) on a symbol the endpoint does not recognize.",
"additionalProperties": true
}