Skip to main content
Glama

TradingCalc MCP: Options, Forex, Risk Stats, Prediction Markets, On-Chain & Crypto Futures

Odds Converter

workflow.run_odds_converter
Read-only

Converts one probability into decimal odds, American odds, and breakeven win rate: either from a manually supplied probability, or from one market read live from Kalshi, Polymarket, ADI Predictstreet, Limitless, or Myriad (five independent crypto-price prediction market venues, all public keyless market data). One market on one venue per call; it does not compare prices across venues (to compare the same bet on two or more venues, see workflow.run_spread_reader). When a Kalshi, Polymarket, Limitless, or Myriad source is supplied, also returns the vig (the exchange's built-in edge), computed from the market's own YES+NO prices, not estimated; ADI Predictstreet's crypto contracts currently have no live trading volume on any venue, so this returns available:false with an explanation rather than a fake price (use workflow.run_window_fair_value for a theoretical price on those instead). Edge cases: probability strictly between 0.0001 and 0.9999 (a decimal, 0.35 is 35%); give exactly one source, never none and never two; a market that cannot be read live, or a two-sided source with no usable prices, returns available false with the reason; vig is null for a manual probability. Not covered: fees and slippage, depth of the order book, matching the same bet across venues, and any claim that the probability is correct. Use when user asks "what odds does a 35% probability work out to?" or "what's the vig on this Kalshi/Polymarket/Limitless/Myriad market?". Provide exactly one of probability/kalshiTicker/polymarketSlug/adiSymbol/limitlessSlug/myriadSlug. Returns: probability, decimalOdds, americanOdds, breakevenWinRatePct, vigPct (null unless a live two-sided source was used), source (manual/kalshi/polymarket/adi/limitless/myriad), identifier, label. If available is false, do not use any result field (computed figures and any verdict are null or empty), so read available first.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "workflow.run_odds_converter"
  }
}

Input Schema

NameRequiredDescriptionDefault
adiSymbolNoAn ADI Predictstreet market symbol (e.g. BTC1D-20260920T0000). Currently always returns available:false; these contracts have no live trading volume yet.
myriadSlugNoA Myriad Markets market slug, from the market URL (e.g. eth-at-three-digits-when-bitcoin-goes-below-50k), to fetch a live price from. On-chain (Abstract L2); not every market has a Yes/No outcome, some are multi-outcome ladders.
probabilityNoProbability as a decimal 0-1 (e.g. 0.35). Use this OR one of the live sources below, not both.
kalshiTickerNoA Kalshi market ticker (e.g. KXBTCY-27JAN0100-T149999.99) to fetch a live price from. One market only; for the same bet on several venues use workflow.run_spread_reader.
limitlessSlugNoA Limitless Exchange market slug, from the market URL (e.g. btc-up-or-down-5-min-1790249100), to fetch a live price from. On-chain (Base), mostly short-duration (5min/15min/daily) crypto up/down contracts.
polymarketSlugNoA Polymarket market slug, from the market URL (e.g. will-bitcoin-reach-100k-in-september-2026), to fetch a live price from. One market only; for the same bet on several venues use workflow.run_spread_reader.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / kalshiTicker / description
      Previous value: -"A Kalshi market ticker (e.g. KXBTCY-27JAN0100-T149999.99) to fetch a live price from."New value: +"A Kalshi market ticker (e.g. KXBTCY-27JAN0100-T149999.99) to fetch a live price from. One market only; for the same bet on several venues use workflow.run_spread_reader."
    • changedInput schema / properties / polymarketSlug / description
      Previous value: -"A Polymarket market slug, from the market URL (e.g. will-bitcoin-reach-100k-in-september-2026), to fetch a live price from."New value: +"A Polymarket market slug, from the market URL (e.g. will-bitcoin-reach-100k-in-september-2026), to fetch a live price from. One market only; for the same bet on several venues use workflow.run_spread_reader."
  2. Changed2 schema fields changed
    • addedInput schema / properties / limitlessSlug
      Added value: +{
      +  "description": "A Limitless Exchange market slug, from the market URL (e.g. btc-up-or-down-5-min-1790249100), to fetch a live price from. On-chain (Base), mostly short-duration (5min/15min/daily) crypto up/down contracts.",
      +  "type": "string"
      +}
    • addedInput schema / properties / myriadSlug
      Added value: +{
      +  "description": "A Myriad Markets market slug, from the market URL (e.g. eth-at-three-digits-when-bitcoin-goes-below-50k), to fetch a live price from. On-chain (Abstract L2); not every market has a Yes/No outcome, some are multi-outcome ladders.",
      +  "type": "string"
      +}
  3. Changed1 schema field changed
    • changedInput schema / properties / adiSymbol / description
      Previous value: -"An ADI Predictstreet market symbol (e.g. BTC1D-20260920T0000). Currently always returns available:false — these contracts have no live trading volume yet."New value: +"An ADI Predictstreet market symbol (e.g. BTC1D-20260920T0000). Currently always returns available:false; these contracts have no live trading volume yet."
  4. Changed4 schema fields changed
    • addedInput schema / properties / adiSymbol
      Added value: +{
      +  "description": "An ADI Predictstreet market symbol (e.g. BTC1D-20260920T0000). Currently always returns available:false — these contracts have no live trading volume yet.",
      +  "type": "string"
      +}
    • changedInput schema / properties / kalshiTicker / description
      Previous value: -"A Kalshi market ticker (e.g. KXBTCY-27JAN0100-T149999.99) to fetch a live price from instead of a manual probability."New value: +"A Kalshi market ticker (e.g. KXBTCY-27JAN0100-T149999.99) to fetch a live price from."
    • addedInput schema / properties / polymarketSlug
      Added value: +{
      +  "description": "A Polymarket market slug, from the market URL (e.g. will-bitcoin-reach-100k-in-september-2026), to fetch a live price from.",
      +  "type": "string"
      +}
    • changedInput schema / properties / probability / description
      Previous value: -"Probability as a decimal 0-1 (e.g. 0.35). Use this OR kalshiTicker, not both."New value: +"Probability as a decimal 0-1 (e.g. 0.35). Use this OR one of the live sources below, not both."
  5. Added

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered; the description still adds real value by disclosing that vig is computed from the market's own YES+NO prices rather than estimated, that ADI returns available:false because it has no live volume, and that vig is null for manual input. It also states what is out of scope (fees, slippage, order-book depth, correctness of the probability). It does not discuss rate limits or failure modes for network errors, which keeps this below 4 given the annotations already carry the read-only signal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads what it produces, then source rules, then edge cases, then returns; every block is purposeful despite the length. There is mild repetition between the "Edge cases" sentence and the later "Provide exactly one of probability/kalshiTicker/..." sentence, which restates the same exclusivity rule.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description enumerates the return fields (probability, decimalOdds, americanOdds, breakevenWinRatePct, vigPct, source, identifier, label) and adds the crucial instruction to read available first and discard all result fields when it is false. Combined with the edge-case rules and venue coverage, nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each property already explains its format and example, so the baseline is 3; the description goes further by imposing the mutual-exclusion rule ("give exactly one source, never none and never two" / "Provide exactly one of probability/kalshiTicker/...") and a tighter numeric bound (strictly between 0.0001 and 0.9999) than the schema's stated 0-1 range. Those constraints are not visible in the schema and prevent a malformed call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and full output set ("Converts one probability into decimal odds, American odds, and breakeven win rate") plus the two input modes: manual probability or one live market. It explicitly separates itself from workflow.run_spread_reader for cross-venue comparison, so an agent can pick it without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete triggering phrasings ("what odds does a 35% probability work out to?", "what's the vig on this Kalshi/Polymarket/Limitless/Myriad market?") and names the alternatives with the conditions that select them: spread_reader for the same bet on several venues, window_fair_value for ADI theoretical pricing. Exclusions are explicit (one market, one venue per call; does not compare prices).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.