protogrid

Search / io.github.0xHedgeHood/hedgehood-options

Hedgehood Options

R0· no sign-in

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

v0.5.1 · active · repository · website · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality63needs work
Trust97of 100
Uptime, 30 days100%
Latency p50749 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "hedgehood-options": {
      "type": "http",
      "url": "https://mcp.hedgehood.io/mcp"
    }
  }
}
claude mcp add --transport http hedgehood-options https://mcp.hedgehood.io/mcp
[mcp_servers.hedgehood-options]
url = "https://mcp.hedgehood.io/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "hedgehood-options": {
      "type": "remote",
      "url": "https://mcp.hedgehood.io/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "hedgehood-options": {
      "type": "http",
      "url": "https://mcp.hedgehood.io/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=hedgehood-options&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vbWNwLmhlZGdlaG9vZC5pby9tY3AifQ%3D%3D"
}
{
  "servers": {
    "hedgehood-options": {
      "type": "http",
      "url": "https://mcp.hedgehood.io/mcp"
    }
  }
}
{
  "mcpServers": {
    "hedgehood-options": {
      "httpUrl": "https://mcp.hedgehood.io/mcp"
    }
  }
}
extensions:
  "hedgehood-options":
    enabled: true
    name: "hedgehood-options"
    type: streamable_http
    uri: "https://mcp.hedgehood.io/mcp"
    timeout: 300

Quality 63 / 100needs work

protocol75 · weight 25
  • warn
    protocol.modernnewest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
  • n/a
    protocol.statelessonly applies to 2026-07-28 servers
  • pass
    protocol.transportstreamable HTTP
  • n/a
    protocol.list_ttlonly applies to 2026-07-28 servers
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene71 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • pass
    tools.description_lengthdescriptions are concise
  • pass
    tools.schemasevery tool has an object input schema
  • fail
    tools.annotationsno tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
  • fail
    tools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: get_mark (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); list_vaults (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); get_positions (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
  • pass
    tools.token_costabout 3,980 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability25 · weight 15
  • warn
    stability.changes17 tool changes in 30 days
  • fail
    stability.rug_pull1 tools kept their name but changed most of their description in 30 days; review before trusting them
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvabledeps.dev does not know @hedgehood-io/[email protected]

26 tools, about 3,980 tokens to load them all · tool set bd60192990a1 · tools last changed 2026-10-29 · checked 2026-11-07 18:35 UTC

Tool changes

  • how_to_get_test_fundsadded

    TESTNET only: how to get the test settlement token (TestUSD, hUSD-test, no value). Returns the faucet call (to, data = faucet(): a fixed amount to the caller once per cooldown), the account's balance and next draw time when readable, and the onboarding steps: connect -> faucet -> deposit -> session key -> quote -> fill. Read-only: your own wallet sends the call. Mainnet answers not_on_mainnet (see how_to_deposit).

  • get_refusalsadded

    Why the desk refused quotes to `taker` (your account) in the last 48 h, newest first: code, reason, instrument, side and quantity as asked, plus counts by code and what to do about each code. At most `limit` (<= 500) rows; read-only.

  • borrow_withdraw_collateral_quoteadded

    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.

  • borrow_repay_quoteadded

    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.

  • borrow_take_quoteadded

    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.

  • borrow_supply_collateral_quoteadded

    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.

  • borrow_statusadded

    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.

  • lend_withdraw_quoteadded

    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.

  • lend_deposit_quoteadded

    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.

  • lend_statusadded

    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.

Showing the latest 10. Full history: list_changes · trend: quality JSON.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 97 / 100

provenance90
liveness100
freshness100
hygiene100

+repository +namespace-matches-repo +website +reachable +uptime-100% +updated-5d-ago

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Dependencies

@hedgehood-io/[email protected] npmthis version is not known to the dependency resolver

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0. The graph is what a clean install of this version resolves today; nothing was installed or run. How it is checked.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://mcp.hedgehood.io/mcp streamable-httpnoneyes100%749 ms2025-11-252026-11-07
packageregistryversionruntimesecrets
@hedgehood-io/mcpnpm0.5.1npxHEDGEHOOD_SESSION_KEY_FILE, HEDGEHOOD_OWNER_KEY_FILE

Tools (26)

borrow_repay_quoteThe 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.
borrow_statusShare 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.
borrow_supply_collateral_quoteThe 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.
borrow_take_quoteThe 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.
borrow_withdraw_collateral_quoteThe 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.
close_quoteThe 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.
get_agent_recordThe ERC-8004 Identity Registry record of an agent id and the accounts seen trading under it.
get_historyPAST 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.
get_leaderboardLeaderboard per account or per ERC-8004 agent id (by='agent'): fills, premium paid / received, settled PnL.
get_markModel bid / ask / mid (USDG per share), delta and whether a quote would be given. instrument like NVDA-20261016-200-C.
get_pnlPnL 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.
get_positionsACTIVE 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.
get_quoteA 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 its short-risk budget riskLeft). 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.
get_refusalsWhy the desk refused quotes to `taker` (your account) in the last 48 h, newest first: code, reason, instrument, side and quantity as asked, plus counts by code and what to do about each code. At most `limit` (<= 500) rows; read-only.
how_to_depositHow 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 maxShortRisk and maxSpend: maxShortRisk 0 = the key cannot open shorts, maxSpend 0 = buy-to-close only).
how_to_get_test_fundsTESTNET only: how to get the test settlement token (TestUSD, hUSD-test, no value). Returns the faucet call (to, data = faucet(): a fixed amount to the caller once per cooldown), the account's balance and next draw time when readable, and the onboarding steps: connect -> faucet -> deposit -> session key -> quote -> fill. Read-only: your own wallet sends the call. Mainnet answers not_on_mainnet (see how_to_deposit).
lend_deposit_quoteThe 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.
lend_statusShare 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.
lend_withdraw_quoteThe 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.
list_instrumentsInstruments (expiry x strike x call/put) with their on-chain ids. expiry as YYYYMMDD or unix seconds.
list_marketsThe option markets: underlying, addresses, version, open expiries.
list_vaultsThe 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.
vault_claim_quoteThe 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.
vault_deposit_quoteThe 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.
vault_redeem_quoteThe 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.
vault_statusAn 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.

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "name": "io.github.0xHedgeHood/hedgehood-options",
  "title": "Hedgehood Options",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://mcp.hedgehood.io/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "0.5.1",
  "packages": [
    {
      "version": "0.5.1",
      "transport": {
        "type": "stdio"
      },
      "identifier": "@hedgehood-io/mcp",
      "runtimeHint": "npx",
      "registryType": "npm",
      "registryBaseUrl": "https://registry.npmjs.org",
      "environmentVariables": [
        {
          "name": "HEDGEHOOD_CHAIN_ID",
          "format": "number",
          "default": "46630",
          "description": "46630 (Robinhood testnet, default) or 4663 (mainnet)"
        },
        {
          "name": "HEDGEHOOD_SESSION_KEY_FILE",
          "format": "filepath",
          "isSecret": true,
          "isRequired": true,
          "description": "Path to a file holding the agent's session private key (0x + 64 hex, chmod 600). The key can trade and cancel for the account but never withdraw."
        },
        {
          "name": "HEDGEHOOD_ACCOUNT",
          "format": "string",
          "description": "The owner (trading) account the session key acts for. Defaults to the session key's own address."
        },
        {
          "name": "HEDGEHOOD_OWNER_KEY_FILE",
          "format": "filepath",
          "isSecret": true,
          "description": "Optional owner key file; unlocks withdraw, deposit from the owner wallet, authorize_session and register_agent. Keep it off shared machines."
        },
        {
          "name": "HEDGEHOOD_RPC_URL",
          "format": "string",
          "description": "RPC override for the chain"
        },
        {
          "name": "HEDGEHOOD_RFQ_URL",
          "format": "string",
          "description": "Quote service override (default per chain: https://agent-api.hedgehood.io on mainnet, https://testnet-agent-api.hedgehood.io on the testnet)"
        },
        {
          "name": "HEDGEHOOD_INDEXER_URL",
          "format": "string",
          "description": "Indexer override (default per chain: https://agent-index.hedgehood.io on mainnet, https://testnet-agent-index.hedgehood.io on the testnet)"
        },
        {
          "name": "HEDGEHOOD_GATEWAY_URL",
          "format": "string",
          "description": "x402 deposit gateway override (default per chain: https://agent-pay.hedgehood.io on mainnet, https://testnet-agent-pay.hedgehood.io on the testnet)"
        },
        {
          "name": "HEDGEHOOD_DRY_RUN",
          "format": "boolean",
          "default": "true",
          "description": "\"false\" makes write tools broadcast by default (they still need confirm: true). Default true: simulate only."
        },
        {
          "name": "HEDGEHOOD_MAX_DEPOSIT",
          "format": "number",
          "default": "1000",
          "description": "Cap per x402 deposit, USDG"
        }
      ]
    }
  ],
  "repository": {
    "url": "https://github.com/0xHedgeHood/hedgehood-agent-kit",
    "source": "github",
    "subfolder": "packages/mcp"
  },
  "websiteUrl": "https://hedgehood.app",
  "description": "Stock options market for AI agents on Robinhood Chain: RFQ quotes, buy/close, P&L, x402 deposits."
}