Skip to main content
Glama

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

Covered Call and Protective Put

workflow.run_covered_call_protective_put
Read-only

Covered call (long the coin + short a call against it, for yield) or protective put (long the coin + long a put, for downside insurance) on a Deribit BTC/ETH position. Returns the standard annualized-yield metric (premium ÷ 1 coin, annualized by 365/daysToExpiry) up front: that number doesn't depend on any price scenario. Also returns the USD value of the combined position at a given scenario price: covered call caps upside at strike + premium×scenarioPrice (the premium's own coin-denominated value still scales with price, unlike a textbook USD-settled cap); protective put floors value at strike×(1−premium), which is the true minimum across every possible settlement price, not just an approximation. Edge cases: spotEntry, strike, daysToExpiry, quantity and scenarioPrice above zero; premiumCoin above zero and at most 0.999 (Deribit form). The annualized yield is simple, 365 / daysToExpiry, not compounded. Not covered: early assignment, margin, fees, taxes, dividends, rolling, and the P&L before expiry. Use when user asks "what annualized yield do I get selling covered calls on my BTC?" or "how much does insuring my BTC with a put cost me?". Returns: staticYieldPct, annualizedYieldPct, valueAtScenarioUsd, breakevenPrice (covered_call only), floorValueUsd (protective_put only), vsHoldingUsd (vs. just holding the coin). With exchange "binance" (USDT-settled, premiumUsdt) the yield is premium divided by spotEntry (one unit is not a fraction of a coin), annualized by 365/daysToExpiry, and it returns: staticYieldPct, annualizedYieldPct, valueAtScenarioUsdt (covered call = min(S, K) + premium per unit), breakevenPrice (covered_call: spotEntry - premium, null when the cap sits below the cost), capValuePerUnitUsdt (covered_call: strike + premium), floorValuePerUnitUsdt (protective_put: strike - premium), vsHoldingUsdt; USDT is not converted to USD.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "strategy": "<strategy>",
      "spotEntry": "<spotEntry>",
      "strike": "<strike>",
      "daysToExpiry": "<daysToExpiry>",
      "quantity": "<quantity>",
      "scenarioPrice": "<scenarioPrice>"
    },
    "name": "workflow.run_covered_call_protective_put"
  }
}

Input Schema

NameRequiredDescriptionDefault
strikeYesOption strike, USD
currencyNoUnderlying. Default BTC. XAU and XAG (gold, silver) only with exchange binance.
exchangeNoVenue whose settlement rules apply. "deribit" (default): BTC/ETH, coin-settled, premium in the base coin. "binance": BTC/ETH/XAU/XAG, USDT-settled, flat payoff max(0, S-K) per unit, premium in USDT (use the *Usdt premium fields); the result carries exchange and settlement fields.
quantityYesCoin units held / contracts (1:1 covered)
strategyYes"covered_call" (hold the coin, sell a call against it) or "protective_put" (hold the coin, buy a put as insurance)
spotEntryYesPrice you acquired/value the underlying coin at, USD; used for the covered-call breakeven vs. cost basis
premiumCoinNoDeribit only. Premium received (covered_call) or paid (protective_put) per contract, in the base coin
premiumUsdtNoBinance only. Premium received (covered_call) or paid (protective_put) per unit, in USDT; must be < spotEntry for a covered call and < strike for a protective put
daysToExpiryYesCalendar days until expiry; used to annualize the yield/cost
scenarioPriceYesUnderlying price in USD to evaluate the combined position's value at

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • changedInput schema / properties / currency / description
      Previous value: -"Underlying coin. Default BTC."New value: +"Underlying. Default BTC. XAU and XAG (gold, silver) only with exchange binance."
    • changedInput schema / properties / currency / enum
      Previous value: -[
      -  "BTC",
      -  "ETH"
      -]New value: +[
      +  "BTC",
      +  "ETH",
      +  "XAU",
      +  "XAG"
      +]
    • addedInput schema / properties / exchange
      Added value: +{
      +  "description": "Venue whose settlement rules apply. \"deribit\" (default): BTC/ETH, coin-settled, premium in the base coin. \"binance\": BTC/ETH/XAU/XAG, USDT-settled, flat payoff max(0, S-K) per unit, premium in USDT (use the *Usdt premium fields); the result carries exchange and settlement fields.",
      +  "enum": [
      +    "deribit",
      +    "binance"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / premiumCoin / description
      Previous value: -"Premium received (covered_call) or paid (protective_put) per contract, in the base coin"New value: +"Deribit only. Premium received (covered_call) or paid (protective_put) per contract, in the base coin"
    • addedInput schema / properties / premiumUsdt
      Added value: +{
      +  "description": "Binance only. Premium received (covered_call) or paid (protective_put) per unit, in USDT; must be < spotEntry for a covered call and < strike for a protective put",
      +  "type": "number"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "strategy",
      -  "spotEntry",
      -  "strike",
      -  "premiumCoin",
      -  "daysToExpiry",
      -  "quantity",
      -  "scenarioPrice"
      -]New value: +[
      +  "strategy",
      +  "spotEntry",
      +  "strike",
      +  "daysToExpiry",
      +  "quantity",
      +  "scenarioPrice"
      +]
  2. Changed1 schema field changed
    • addedInput schema / properties / strategy / description
      Added value: +"\"covered_call\" (hold the coin, sell a call against it) or \"protective_put\" (hold the coin, buy a put as insurance)"
  3. Changed2 schema fields changed
    • changedInput schema / properties / daysToExpiry / description
      Previous value: -"Calendar days until expiry — used to annualize the yield/cost"New value: +"Calendar days until expiry; used to annualize the yield/cost"
    • changedInput schema / properties / spotEntry / description
      Previous value: -"Price you acquired/value the underlying coin at, USD — used for the covered-call breakeven vs. cost basis"New value: +"Price you acquired/value the underlying coin at, USD; used for the covered-call breakeven vs. cost basis"
  4. Added

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the read-only annotations, the description discloses the exact yield formula, the payoff logic for both strategies, settlement differences between Deribit and Binance, and what is deliberately excluded (early assignment, margin, fees, taxes, dividends, rolling, pre-expiry P&L). It also states parameter constraints such as premiumCoin <= 0.999, which materially helps correct invocation.

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?

The description is front-loaded with the strategy definition and the key annualized-yield return, then proceeds to edge cases, exclusions, and return fields. It is long and dense, with some redundancy in the two 'Returns:' sections, but the length is largely justified by the financial complexity.

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?

With 10 parameters, no output schema, and two settlement venues, the description carries the full burden of explaining return values and does so thoroughly. It lists the Deribit and Binance output fields, constraints, and excluded effects, so an agent has enough context to call and interpret the tool.

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%, so the baseline is 3. The description still adds meaning beyond the schema by explaining that annualization is simple 365/daysToExpiry, that the Binance premium is per unit rather than a fraction of a coin, and that premiumCoin must be at most 0.999.

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

Purpose4/5

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

The description states a specific verb and resource: it computes covered-call yield or protective-put cost/value on a Deribit or Binance BTC/ETH position. The scope is clear enough to distinguish it from generic payoff tools, but it never names or contrasts any sibling such as run_options_payoff or run_cash_secured_put.

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

Usage Guidelines4/5

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

It gives concrete user-question triggers: 'what annualized yield do I get selling covered calls on my BTC?' and 'how much does insuring my BTC with a put cost me?'. That is strong when-to-use guidance, but there is no explicit when-not-to-use or alternative-tool routing.

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.