Hedgehood Options

Stock options market for AI agents on Robinhood Chain: RFQ quotes, buy/close, P&L, x402 deposits.

¿Debería usar esto?

Calidad y seguridad

A
Calidad de la descripción
97%
Integridad del esquema
71%
Calidad de los nombres
88%
Riesgo de envenenamiento
100%
Coincidencia de permisos
100%
Cumplimiento del protocolo
100%

Hallazgos (2)

  • LOWTool 'get_mark' description lacks action verben get_mark
  • LOWTool 'borrow_withdraw_collateral_quote' name length outside 3-30 rangeen borrow_withdraw_collateral_quote

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~3,795Tokens (definiciones de herramientas)
~644 BTamaño de respuesta típico
Impacto significativo en la atención (2.96% del contexto de 128k)

Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.

Instalar

Instalación con un clic

Agrega esto a tu archivo `claude_desktop_config.json`:

{
  "mcpServers": {
    "hedgehood-options": {
      "command": "npx",
      "args": [
        "@hedgehood-io/mcp"
      ]
    }
  }
}

Paquetes ejecutables

npm@hedgehood-io/mcp0.2.0stdio

Puntos de conexión remotos

https://mcp.hedgehood.io/mcpstreamable-http

Qué puede hacer

Inventario de herramientas

Herramientas (24)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟢list_markets

The option markets: underlying, addresses, version, open expiries.

Esquema de entrada

{
  "type": "object",
  "properties": {},
  "title": "list_marketsArguments"
}
🟢list_instruments(underlying, expiry)

Instruments (expiry x strike x call/put) with their on-chain ids. expiry as YYYYMMDD or unix seconds.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "underlying": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Underlying"
    },
    "expiry": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Expiry"
    }
  },
  "title": "list_instrumentsArguments"
}
🟢get_mark(instrument)

Model bid / ask / mid (USDG per share), delta and whether a quote would be given. instrument like NVDA-20261016-200-C.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "instrument": {
      "title": "Instrument",
      "type": "string"
    }
  },
  "required": [
    "instrument"
  ],
  "title": "get_markArguments"
}
🟡get_quote(instrument, side, quantity, account, session_key)

A signed quote addressed to `account` for `quantity` shares (buy or sell), valid for seconds, with the exact calldata to send to fillOrderAs from the owner key or the given session key, the fee, the decay and a canFill preview (with a session_key it also checks the key's live TRADE session, its spend budget spendLeft and maxRequirement). Sells are close-only: side=sell is quoted only against a long `account` holds in that instrument (else close_only:*); to exit a position use close_quote. Nothing is sent by this server.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "instrument": {
      "title": "Instrument",
      "type": "string"
    },
    "side": {
      "title": "Side",
      "type": "string"
    },
    "quantity": {
      "title": "Quantity",
      "type": "string"
    },
    "account": {
      "title": "Account",
      "type": "string"
    },
    "session_key": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Session Key"
    }
  },
  "required": [
    "instrument",
    "side",
    "quantity",
    "account"
  ],
  "title": "get_quoteArguments"
}
🟡close_quote(account, instrument, quantity, session_key)

The quote that exits `account`'s open position in `instrument` before expiry: reads the position, takes the opposite side (long -> sell, short -> buy), size = min(|position|, quantity or the whole position), and returns the desk's signed quote with the fillOrderAs calldata in fill.send. You must send it with your own key before validUntil (`hedgehood close <instrument> --send` or the npm MCP's close_position); this server never sends. nothing_to_close when the account is flat there; a close_only:* refusal from the desk is returned with its reason.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "account": {
      "title": "Account",
      "type": "string"
    },
    "instrument": {
      "title": "Instrument",
      "type": "string"
    },
    "quantity": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Quantity"
    },
    "session_key": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Session Key"
    }
  },
  "required": [
    "account",
    "instrument"
  ],
  "title": "close_quoteArguments"
}
🟢get_positions(account)

ACTIVE positions: open positions, cost basis and leaderboard row of an account (and its ERC-8004 agent id when it has one). Past activity is get_history; marks / PnL are get_pnl; exit before expiry with close_quote.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "account": {
      "title": "Account",
      "type": "string"
    }
  },
  "required": [
    "account"
  ],
  "title": "get_positionsArguments"
}
🟢get_pnl(account)

PnL of an account: every position (open / closed / settled) with the desk's mark, unrealized and realized PnL, fees paid and the total, all USDG raw (1e6) signed from the account's side, plus a one-line `summary` in USDG.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "account": {
      "title": "Account",
      "type": "string"
    }
  },
  "required": [
    "account"
  ],
  "title": "get_pnlArguments"
}
🟢get_history(account, limit, since)

PAST activity of an account, newest first: fills (your side buy / sell, price, premium, fee), settlements (payout, PnL) and redeems, at most `limit` (<= 500) and after `since` (unix seconds), plus a one-line `summary`. Open positions are get_positions.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "account": {
      "title": "Account",
      "type": "string"
    },
    "limit": {
      "default": 50,
      "title": "Limit",
      "type": "integer"
    },
    "since": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Since"
    }
  },
  "required": [
    "account"
  ],
  "title": "get_historyArguments"
}
🟢get_leaderboard(by, order, limit)

Leaderboard per account or per ERC-8004 agent id (by='agent'): fills, premium paid / received, settled PnL.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "by": {
      "default": "account",
      "title": "By",
      "type": "string"
    },
    "order": {
      "default": "settledPnlRaw",
      "title": "Order",
      "type": "string"
    },
    "limit": {
      "default": 25,
      "title": "Limit",
      "type": "integer"
    }
  },
  "title": "get_leaderboardArguments"
}
🟢get_agent_record(agent_id)

The ERC-8004 Identity Registry record of an agent id and the accounts seen trading under it.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "agent_id": {
      "title": "Agent Id",
      "type": "integer"
    }
  },
  "required": [
    "agent_id"
  ],
  "title": "get_agent_recordArguments"
}
⚪how_to_deposit(account, amount)

How to fund a market balance with USDG over x402 (and the direct deposit path). amount in USDG. On mainnet the answer carries `onramp`: a MoonPay buy link for USDG delivered on Robinhood Chain to `account`, for an agent that holds no USDG yet (a human completes KYC and payment; not in New York or Canada); on the testnet it names the faucet / wallet path. Also: how the owner authorises a session key (authorizeSession with maxRequirement and maxSpend: maxSpend 0 = the key cannot buy).

Esquema de entrada

{
  "type": "object",
  "properties": {
    "account": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Account"
    },
    "amount": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Amount"
    }
  },
  "title": "how_to_depositArguments"
}
🟢list_vaults

The Hedgehood OptionVault v2 funds (hhNVDA-CC, hhNVDA-WHEEL, hhGOOGL-CC, ...): stock token, deposit cap and room, total shares, NAV per share (USDG, from the chain), the current epoch (index, phase, cutoff / trade window / expiry, next freeze) and the deposit gate. Vaults are passive weekly premium income held for weeks, not a trade: a deposit queues, becomes shares at the next epoch freeze (up to a week) and shares are redeemed in kind at a later freeze; use the options market for exposure you open and close in seconds. Read-only; nothing is sent.

Esquema de entrada

{
  "type": "object",
  "properties": {},
  "title": "list_vaultsArguments"
}
⚪vault_status(account)

An account's standing in every fund: shares (credited and owed by a frozen deposit), value at NAV, the pending deposit or redemption with its cohort epoch and cutoff, what is claimable, the fund's epoch state and the next step (wait / claim / redeem). The cycle is request -> freeze / settlement -> claim: a request is never instant.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "account": {
      "title": "Account",
      "type": "string"
    }
  },
  "required": [
    "account"
  ],
  "title": "vault_statusArguments"
}
🟡vault_deposit_quote(account, vault, usdg)

The unsigned calldata to deposit `usdg` USDG into `vault` (address or symbol like hhNVDA-CC) for `account`: `txs` = USDG approve (when the allowance is short) then requestDeposit(0, usdg, account), with the cohort epoch and its cutoff, a share estimate at today's NAV, the balance / cap / eligibility checks and the cancelDeposit calldata. The deposit is NOT instant: it is priced and becomes shares when the cohort freezes at the cutoff (up to a week). You send every tx with the account's own owner key (needs ETH for gas); this server holds no keys and sends nothing.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "account": {
      "title": "Account",
      "type": "string"
    },
    "vault": {
      "title": "Vault",
      "type": "string"
    },
    "usdg": {
      "title": "Usdg",
      "type": "string"
    }
  },
  "required": [
    "account",
    "vault",
    "usdg"
  ],
  "title": "vault_deposit_quoteArguments"
}
🟡vault_redeem_quote(account, vault, shares)

The unsigned calldata to redeem `shares` (a decimal or 'all') of `vault` for `account`: requestRedeem(shares, account), the cohort it joins and when it pays, the cancelRedeem calldata. The shares go into escrow now and are paid IN KIND (stock and/or USDG at that freeze's NAV) when the cohort freezes: in a locked epoch that is after the current option expires, up to a week; then vault_claim_quote collects. You send it with the account's own owner key; this server never sends.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "account": {
      "title": "Account",
      "type": "string"
    },
    "vault": {
      "title": "Vault",
      "type": "string"
    },
    "shares": {
      "default": "all",
      "title": "Shares",
      "type": "string"
    }
  },
  "required": [
    "account",
    "vault"
  ],
  "title": "vault_redeem_quoteArguments"
}
🟡vault_claim_quote(account, vault)

The unsigned calldata to collect what `account`'s redemption (or refunded deposit) in `vault` paid: claim(account, account) with the claimable stock and USDG amounts; nothing_to_claim with the pending redemption's cutoff when it has not frozen yet. You send it with the account's own owner key; this server never sends.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "account": {
      "title": "Account",
      "type": "string"
    },
    "vault": {
      "title": "Vault",
      "type": "string"
    }
  },
  "required": [
    "account",
    "vault"
  ],
  "title": "vault_claim_quoteArguments"
}
🟢lend_status(account)

Share Lending, LEND side: the Morpho Vault V2 that lends USDG against Hedgehood fund shares (hhNVDA-CC) on Morpho Blue — vault, total assets, cap and room, the live market's utilization and borrow rate, an approximate supply APY (net of the vault's 10% performance fee), and `my`: the account's vault shares, their USDG value and its wallet USDG. Deposits mint shares at once and earn immediately; a withdrawal needs unborrowed liquidity. Read-only; nothing is sent. Not for US persons.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "account": {
      "title": "Account",
      "type": "string"
    }
  },
  "required": [
    "account"
  ],
  "title": "lend_statusArguments"
}
🟡lend_deposit_quote(account, usdg)

The unsigned calldata to lend `usdg` USDG: `txs` = USDG approve (when the allowance is short) then the vault's ERC-4626 deposit(usdg, account), with the share preview, the APY estimate and the cap / gate / balance checks as {error, reason} (cap_exceeded, insufficient_balance, paused, not_eligible). You send every tx with the account's own owner key (needs ETH for gas); this server holds no keys and sends nothing.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "account": {
      "title": "Account",
      "type": "string"
    },
    "usdg": {
      "title": "Usdg",
      "type": "string"
    }
  },
  "required": [
    "account",
    "usdg"
  ],
  "title": "lend_deposit_quoteArguments"
}
🟡lend_withdraw_quote(account, usdg)

The unsigned calldata to take lent USDG back: withdraw(usdg, account, account), or redeem(all shares, account, account) for 'all' (exact, no dust). insufficient_balance when the account holds less, insufficient_liquidity when the vault's idle USDG plus the market's unborrowed supply cannot pay it now. You send it with the account's own owner key; this server never sends.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "account": {
      "title": "Account",
      "type": "string"
    },
    "usdg": {
      "default": "all",
      "title": "Usdg",
      "type": "string"
    }
  },
  "required": [
    "account"
  ],
  "title": "lend_withdraw_quoteArguments"
}
🟢borrow_status(account, market)

Share Lending, BORROW side: the Morpho Blue market that takes hhNVDA-CC fund shares as collateral for USDG — id (discovered from the lending vault at each call; the mainnet market is being migrated to a new oracle), LLTV, the ShareRiskOracle price and status (live / held / unavailable), borrow rate, utilization, supply, borrowed, available — and `my`: collateral, debt (interest to now), borrowing power, health factor, LTV and the liquidation price. Positions left on another market show under otherPositions; `market` selects one. Rule: keep LTV at or below 70% of LLTV. Read-only; nothing is sent.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "account": {
      "title": "Account",
      "type": "string"
    },
    "market": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Market"
    }
  },
  "required": [
    "account"
  ],
  "title": "borrow_statusArguments"
}
🟡borrow_supply_collateral_quote(account, shares, market)

The unsigned calldata to post `shares` fund shares (a decimal or 'all' of the wallet) as collateral: approve to Blue (when the allowance is short) + supplyCollateral(marketParams, shares, account, 0x), with the position before and after (HF, LTV). No oracle read. insufficient_balance when the wallet holds fewer shares (shares still in the fund's redemption queue do not count). You send it with the account's own owner key; this server never sends.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "account": {
      "title": "Account",
      "type": "string"
    },
    "shares": {
      "title": "Shares",
      "type": "string"
    },
    "market": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Market"
    }
  },
  "required": [
    "account",
    "shares"
  ],
  "title": "borrow_supply_collateral_quoteArguments"
}
🔴borrow_take_quote(account, usdg, market)

The unsigned calldata to borrow `usdg` USDG against posted collateral: borrow(marketParams, usdg, 0, account, account), with the post-action HF / LTV and a `warning` when the resulting LTV is above 70% of LLTV. Refused with oracle_stale when the ShareRiskOracle is fail-closed (Blue cannot price the collateral), unhealthy when HF would drop below 1 (with the most you could add), insufficient_liquidity when the market lacks the USDG. You send it with the account's own owner key; this server never sends.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "account": {
      "title": "Account",
      "type": "string"
    },
    "usdg": {
      "title": "Usdg",
      "type": "string"
    },
    "market": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Market"
    }
  },
  "required": [
    "account",
    "usdg"
  ],
  "title": "borrow_take_quoteArguments"
}
🟡borrow_repay_quote(account, usdg, market)

The unsigned calldata to repay USDG debt: approve to Blue (when short) + repay(marketParams, usdg, 0, account, 0x), or for 'all' repay by the exact share debt (no dust; the approval carries 0.1% headroom for interest until the tx lands), with the post-action HF / LTV. nothing_to_repay, exceeds_debt, insufficient_balance are answers. Repay reads no oracle: it works while the oracle is unavailable. You send it with the account's own owner key; this server never sends.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "account": {
      "title": "Account",
      "type": "string"
    },
    "usdg": {
      "default": "all",
      "title": "Usdg",
      "type": "string"
    },
    "market": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Market"
    }
  },
  "required": [
    "account"
  ],
  "title": "borrow_repay_quoteArguments"
}
🟡borrow_withdraw_collateral_quote(account, shares, market)

The unsigned calldata to take fund shares back from Blue: withdrawCollateral(marketParams, shares, account, account), with the post-action HF / LTV and the 70%-of-LLTV warning. Refused with unhealthy when the remaining collateral would not cover the debt, oracle_stale when there is debt and the oracle is fail-closed (no debt: no oracle read, always allowed), insufficient_collateral. You send it with the account's own owner key; this server never sends.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "account": {
      "title": "Account",
      "type": "string"
    },
    "shares": {
      "default": "all",
      "title": "Shares",
      "type": "string"
    },
    "market": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Market"
    }
  },
  "required": [
    "account"
  ],
  "title": "borrow_withdraw_collateral_quoteArguments"
}

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada24 herramientas