Hedgehood Options

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

사용해야 할까요

품질 및 안전성

A
설명 품질
97%
스키마 완전성
71%
이름 품질
88%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

발견 사항 (2)

  • LOWTool 'get_mark' description lacks action verbget_mark에서
  • LOWTool 'borrow_withdraw_collateral_quote' name length outside 3-30 rangeborrow_withdraw_collateral_quote에서

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~3,795토큰 (도구 정의)
~644 B일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 2.96%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

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

실행 가능한 패키지

npm@hedgehood-io/mcp0.2.0stdio

원격 엔드포인트

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

할 수 있는 일

도구 목록

도구 (24)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
🟢list_markets

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

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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).

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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"
}

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 24개