The Odds Gap
What this MCP does
Retrieves sports betting lines, futures, player props, past results, arbitrage and middle opportunities, and performs odds, hedge, payout, and implied-probability calculations.
Tools
Input schema
{'type': 'object', 'required': [], 'properties': {'game': {'type': 'string', 'description': "The game in plain words, for example 'Lions at Bears' or 'Yankees tonight'."}, 'text': {'type': 'string', 'description': "The reader's words."}, 'books': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The books this person actually has. Omit for the default set.'}, 'stake': {'type': 'number', 'description': 'A total stake to split.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['ok', 'answer', 'page', 'responsible_gambling'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the tool produced an answer.'}, 'card': {'type': 'object', 'description': 'The same answer, structured, when there is one.'}, 'page': {'type': 'string', 'description': 'The matching page on theoddsgap.com.'}, 'tool': {'type': ['string', 'null']}, 'as_of': {'type': ['string', 'null'], 'description': 'When the prices were scanned, Eastern Time.'}, 'stale': {'type': 'boolean', 'description': 'True when that scan is older than usual for our hourly snapshot.'}, 'answer': {'type': 'string', 'description': 'The answer in plain sentences.'}, 'options': {'type': 'array', 'items': {'type': 'string'}, 'description': 'When the question could mean more than one thing: whole questions to ask again with.'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'state_note': {'type': 'string', 'description': 'Where to check what is legal for you.'}, 'decline_kind': {'enum': ['data', 'advice', 'record'], 'type': 'string', 'description': 'Set when the question is one we do not answer, and which kind.'}, 'free_left_today': {'type': ['integer', 'null']}, 'responsible_gambling': {'type': 'string'}}}
Input schema
{'type': 'object', 'required': ['question'], 'properties': {'question': {'type': 'string', 'maxLength': 400, 'description': "One whole question, for example 'where is the best price on the Lions moneyline' or 'hedge my Ravens ticket at +240 for $50'."}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['ok', 'answer', 'page', 'responsible_gambling'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the tool produced an answer.'}, 'card': {'type': 'object', 'description': 'The same answer, structured, when there is one.'}, 'page': {'type': 'string', 'description': 'The matching page on theoddsgap.com.'}, 'tool': {'type': ['string', 'null']}, 'as_of': {'type': ['string', 'null'], 'description': 'When the prices were scanned, Eastern Time.'}, 'stale': {'type': 'boolean', 'description': 'True when that scan is older than usual for our hourly snapshot.'}, 'answer': {'type': 'string', 'description': 'The answer in plain sentences.'}, 'options': {'type': 'array', 'items': {'type': 'string'}, 'description': 'When the question could mean more than one thing: whole questions to ask again with.'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'state_note': {'type': 'string', 'description': 'Where to check what is legal for you.'}, 'decline_kind': {'enum': ['data', 'advice', 'record'], 'type': 'string', 'description': 'Set when the question is one we do not answer, and which kind.'}, 'free_left_today': {'type': ['integer', 'null']}, 'responsible_gambling': {'type': 'string'}}}
Input schema
{'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string', 'description': "The reader's words, with their numbers."}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['ok', 'answer', 'page', 'responsible_gambling'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the tool produced an answer.'}, 'card': {'type': 'object', 'description': 'The same answer, structured, when there is one.'}, 'page': {'type': 'string', 'description': 'The matching page on theoddsgap.com.'}, 'tool': {'type': ['string', 'null']}, 'as_of': {'type': ['string', 'null'], 'description': 'When the prices were scanned, Eastern Time.'}, 'stale': {'type': 'boolean', 'description': 'True when that scan is older than usual for our hourly snapshot.'}, 'answer': {'type': 'string', 'description': 'The answer in plain sentences.'}, 'options': {'type': 'array', 'items': {'type': 'string'}, 'description': 'When the question could mean more than one thing: whole questions to ask again with.'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'state_note': {'type': 'string', 'description': 'Where to check what is legal for you.'}, 'decline_kind': {'enum': ['data', 'advice', 'record'], 'type': 'string', 'description': 'Set when the question is one we do not answer, and which kind.'}, 'free_left_today': {'type': ['integer', 'null']}, 'responsible_gambling': {'type': 'string'}}}
Input schema
{'type': 'object', 'required': [], 'properties': {'team': {'type': 'string', 'description': 'One entrant, if they named one.'}, 'text': {'type': 'string', 'description': "The person's own words. This is what names the market, because a futures market has no id anybody would ever say out loud."}, 'books': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The books this person actually has. Omit for the default set.'}, 'market': {'type': 'string', 'description': 'A market phrase, if it is separable from the rest of the sentence.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['ok', 'answer', 'page', 'responsible_gambling'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the tool produced an answer.'}, 'card': {'type': 'object', 'description': 'The same answer, structured, when there is one.'}, 'page': {'type': 'string', 'description': 'The matching page on theoddsgap.com.'}, 'tool': {'type': ['string', 'null']}, 'as_of': {'type': ['string', 'null'], 'description': 'When the prices were scanned, Eastern Time.'}, 'stale': {'type': 'boolean', 'description': 'True when that scan is older than usual for our hourly snapshot.'}, 'answer': {'type': 'string', 'description': 'The answer in plain sentences.'}, 'options': {'type': 'array', 'items': {'type': 'string'}, 'description': 'When the question could mean more than one thing: whole questions to ask again with.'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'state_note': {'type': 'string', 'description': 'Where to check what is legal for you.'}, 'decline_kind': {'enum': ['data', 'advice', 'record'], 'type': 'string', 'description': 'Set when the question is one we do not answer, and which kind.'}, 'free_left_today': {'type': ['integer', 'null']}, 'responsible_gambling': {'type': 'string'}}}
Input schema
{'type': 'object', 'required': ['game'], 'properties': {'game': {'type': 'string', 'description': "The game in plain words, for example 'Lions at Bears' or 'Yankees tonight'."}, 'line': {'type': 'number', 'description': 'The spread or total the bet is at. Omit for a moneyline, or to use the consensus line.'}, 'side': {'enum': ['home', 'away', 'over', 'under'], 'type': 'string', 'description': 'home or away for a moneyline or spread; over or under for a total.'}, 'books': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The books this person actually has. Omit for the default set.'}, 'market': {'enum': ['ml', 'spread', 'total'], 'type': 'string', 'description': 'ml, spread or total.'}, 'favored': {'type': 'boolean', 'description': 'Who the market favors, as a price.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['ok', 'answer', 'page', 'responsible_gambling'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the tool produced an answer.'}, 'card': {'type': 'object', 'description': 'The same answer, structured, when there is one.'}, 'page': {'type': 'string', 'description': 'The matching page on theoddsgap.com.'}, 'tool': {'type': ['string', 'null']}, 'as_of': {'type': ['string', 'null'], 'description': 'When the prices were scanned, Eastern Time.'}, 'stale': {'type': 'boolean', 'description': 'True when that scan is older than usual for our hourly snapshot.'}, 'answer': {'type': 'string', 'description': 'The answer in plain sentences.'}, 'options': {'type': 'array', 'items': {'type': 'string'}, 'description': 'When the question could mean more than one thing: whole questions to ask again with.'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'state_note': {'type': 'string', 'description': 'Where to check what is legal for you.'}, 'decline_kind': {'enum': ['data', 'advice', 'record'], 'type': 'string', 'description': 'Set when the question is one we do not answer, and which kind.'}, 'free_left_today': {'type': ['integer', 'null']}, 'responsible_gambling': {'type': 'string'}}}
Input schema
{'type': 'object', 'required': [], 'properties': {'game': {'type': 'string', 'description': "The game in plain words, for example 'Lions at Bears' or 'Yankees tonight'."}, 'text': {'type': 'string', 'description': "The reader's words."}, 'books': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The books this person actually has. Omit for the default set.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['ok', 'answer', 'page', 'responsible_gambling'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the tool produced an answer.'}, 'card': {'type': 'object', 'description': 'The same answer, structured, when there is one.'}, 'page': {'type': 'string', 'description': 'The matching page on theoddsgap.com.'}, 'tool': {'type': ['string', 'null']}, 'as_of': {'type': ['string', 'null'], 'description': 'When the prices were scanned, Eastern Time.'}, 'stale': {'type': 'boolean', 'description': 'True when that scan is older than usual for our hourly snapshot.'}, 'answer': {'type': 'string', 'description': 'The answer in plain sentences.'}, 'options': {'type': 'array', 'items': {'type': 'string'}, 'description': 'When the question could mean more than one thing: whole questions to ask again with.'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'state_note': {'type': 'string', 'description': 'Where to check what is legal for you.'}, 'decline_kind': {'enum': ['data', 'advice', 'record'], 'type': 'string', 'description': 'Set when the question is one we do not answer, and which kind.'}, 'free_left_today': {'type': ['integer', 'null']}, 'responsible_gambling': {'type': 'string'}}}
Input schema
{'type': 'object', 'required': ['text'], 'properties': {'game': {'type': 'string', 'description': "The game in plain words, for example 'Lions at Bears' or 'Yankees tonight'."}, 'text': {'type': 'string', 'description': "The team or matchup, in the reader's words."}, 'list_all': {'type': 'boolean', 'description': 'Every finished game in the window the words name.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['ok', 'answer', 'page', 'responsible_gambling'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the tool produced an answer.'}, 'card': {'type': 'object', 'description': 'The same answer, structured, when there is one.'}, 'page': {'type': 'string', 'description': 'The matching page on theoddsgap.com.'}, 'tool': {'type': ['string', 'null']}, 'as_of': {'type': ['string', 'null'], 'description': 'When the prices were scanned, Eastern Time.'}, 'stale': {'type': 'boolean', 'description': 'True when that scan is older than usual for our hourly snapshot.'}, 'answer': {'type': 'string', 'description': 'The answer in plain sentences.'}, 'options': {'type': 'array', 'items': {'type': 'string'}, 'description': 'When the question could mean more than one thing: whole questions to ask again with.'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'state_note': {'type': 'string', 'description': 'Where to check what is legal for you.'}, 'decline_kind': {'enum': ['data', 'advice', 'record'], 'type': 'string', 'description': 'Set when the question is one we do not answer, and which kind.'}, 'free_left_today': {'type': ['integer', 'null']}, 'responsible_gambling': {'type': 'string'}}}
Input schema
{'type': 'object', 'required': ['player'], 'properties': {'line': {'type': 'number', 'description': 'The line the person named, if they named one.'}, 'side': {'enum': ['over', 'under', 'yes', 'no'], 'type': 'string', 'description': 'over, under, yes or no.'}, 'books': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The books this person actually has. Omit for the default set.'}, 'market': {'type': 'string', 'description': 'The prop market key, e.g. player_receptions or pitcher_strikeouts. Omit to be told what the board has for that player.'}, 'player': {'type': 'string', 'description': "The player's name as the person typed it."}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['ok', 'answer', 'page', 'responsible_gambling'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the tool produced an answer.'}, 'card': {'type': 'object', 'description': 'The same answer, structured, when there is one.'}, 'page': {'type': 'string', 'description': 'The matching page on theoddsgap.com.'}, 'tool': {'type': ['string', 'null']}, 'as_of': {'type': ['string', 'null'], 'description': 'When the prices were scanned, Eastern Time.'}, 'stale': {'type': 'boolean', 'description': 'True when that scan is older than usual for our hourly snapshot.'}, 'answer': {'type': 'string', 'description': 'The answer in plain sentences.'}, 'options': {'type': 'array', 'items': {'type': 'string'}, 'description': 'When the question could mean more than one thing: whole questions to ask again with.'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'state_note': {'type': 'string', 'description': 'Where to check what is legal for you.'}, 'decline_kind': {'enum': ['data', 'advice', 'record'], 'type': 'string', 'description': 'Set when the question is one we do not answer, and which kind.'}, 'free_left_today': {'type': ['integer', 'null']}, 'responsible_gambling': {'type': 'string'}}}
Input schema
{'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string', 'description': "The reader's words."}, 'topic': {'type': 'string', 'description': 'A topic key, or omit to read the words.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['ok', 'answer', 'page', 'responsible_gambling'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the tool produced an answer.'}, 'card': {'type': 'object', 'description': 'The same answer, structured, when there is one.'}, 'page': {'type': 'string', 'description': 'The matching page on theoddsgap.com.'}, 'tool': {'type': ['string', 'null']}, 'as_of': {'type': ['string', 'null'], 'description': 'When the prices were scanned, Eastern Time.'}, 'stale': {'type': 'boolean', 'description': 'True when that scan is older than usual for our hourly snapshot.'}, 'answer': {'type': 'string', 'description': 'The answer in plain sentences.'}, 'options': {'type': 'array', 'items': {'type': 'string'}, 'description': 'When the question could mean more than one thing: whole questions to ask again with.'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'state_note': {'type': 'string', 'description': 'Where to check what is legal for you.'}, 'decline_kind': {'enum': ['data', 'advice', 'record'], 'type': 'string', 'description': 'Set when the question is one we do not answer, and which kind.'}, 'free_left_today': {'type': ['integer', 'null']}, 'responsible_gambling': {'type': 'string'}}}
Input schema
{'type': 'object', 'required': [], 'properties': {'team': {'type': 'string', 'description': 'One team: its upcoming games.'}, 'text': {'type': 'string', 'description': "The reader's words, for the window."}, 'when': {'type': 'string', 'description': 'today, tonight, tomorrow, a weekday, weekend, or YYYY-MM-DD. Default the next 24 hours.'}, 'books': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The books this person actually has. Omit for the default set.'}, 'limit': {'type': 'integer', 'description': 'How many games. Default 8, max 8.'}, 'sport': {'type': 'string', 'description': 'League, e.g. nfl or college football.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['ok', 'answer', 'page', 'responsible_gambling'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the tool produced an answer.'}, 'card': {'type': 'object', 'description': 'The same answer, structured, when there is one.'}, 'page': {'type': 'string', 'description': 'The matching page on theoddsgap.com.'}, 'tool': {'type': ['string', 'null']}, 'as_of': {'type': ['string', 'null'], 'description': 'When the prices were scanned, Eastern Time.'}, 'stale': {'type': 'boolean', 'description': 'True when that scan is older than usual for our hourly snapshot.'}, 'answer': {'type': 'string', 'description': 'The answer in plain sentences.'}, 'options': {'type': 'array', 'items': {'type': 'string'}, 'description': 'When the question could mean more than one thing: whole questions to ask again with.'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'state_note': {'type': 'string', 'description': 'Where to check what is legal for you.'}, 'decline_kind': {'enum': ['data', 'advice', 'record'], 'type': 'string', 'description': 'Set when the question is one we do not answer, and which kind.'}, 'free_left_today': {'type': ['integer', 'null']}, 'responsible_gambling': {'type': 'string'}}}
Input schema
{'type': 'object', 'required': ['team'], 'properties': {'team': {'type': 'string', 'description': 'The team as typed.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['ok', 'answer', 'page', 'responsible_gambling'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the tool produced an answer.'}, 'card': {'type': 'object', 'description': 'The same answer, structured, when there is one.'}, 'page': {'type': 'string', 'description': 'The matching page on theoddsgap.com.'}, 'tool': {'type': ['string', 'null']}, 'as_of': {'type': ['string', 'null'], 'description': 'When the prices were scanned, Eastern Time.'}, 'stale': {'type': 'boolean', 'description': 'True when that scan is older than usual for our hourly snapshot.'}, 'answer': {'type': 'string', 'description': 'The answer in plain sentences.'}, 'options': {'type': 'array', 'items': {'type': 'string'}, 'description': 'When the question could mean more than one thing: whole questions to ask again with.'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'state_note': {'type': 'string', 'description': 'Where to check what is legal for you.'}, 'decline_kind': {'enum': ['data', 'advice', 'record'], 'type': 'string', 'description': 'Set when the question is one we do not answer, and which kind.'}, 'free_left_today': {'type': ['integer', 'null']}, 'responsible_gambling': {'type': 'string'}}}
Recent tool changes
Similar MCP servers
Sports Game Odds
Provides sports game schedules, markets, and betting odds through the Sports Game Odds API.
Prediction Markets Quant
Provides prediction-market analysis, probability and betting calculations, sports and fantasy football data, macro odds, arbitrag…
The Undesirables TCG Oracle
Provides trading-card search, market and graded-slab pricing, price forecasts, grading analysis, ROI and lending calculations, sp…
tickermint
Provides current and historical trading card and sealed product prices, market movers, valuations, and graded-card price floors.
odds-api
Provides live soccer prediction-market odds, match context, price movements, and order-book depth from Polymarket.
royaltea-public
Calculates game and app revenue splits after storefront, royalty, publisher and expense deductions, and generates draft contribut…
MaCalculatriceEnLigne
Provides calculators for French and Belgian taxes, salaries, pensions, VAT, loans, health metrics, education scores, fitness, and…
Lovie Company Formation
Supports company formation and business administration with bank accounts, cards, invoicing, bookkeeping, accounting periods, and…