← The evidence ledger
Evidence row 1002291
Observed , by probe.mcp/1.
- Kind
- mcp.tools
- About
- endpoint fcc9479e-a631-4b19-8a70-85ed9772b709
- Recorded
- Previous row
- None: the first of its kind about this subject
- Body SHA-256
- 047482fbd024bf807a4ce68f42d03cbf06057c0650cabd7a470520e19df4c3cb
- Leaf
- 0xfacd3599a30543b8d659ae17b762213b002003b7f416c3cd70a67f8638af9f9a
What was observed
{
"count": 26,
"tools": [
{
"description": "The unsigned calldata to repay USDG debt: approve to Blue (when short) + repay(marketParams, usdg, 0, account, 0x), or for 'all'\n repay by the exact share debt (no dust; the approval carries 0.1% headroom for interest until the tx lands), with the post-action\n HF / LTV. nothing_to_repay, exceeds_debt, insufficient_balance are answers. Repay reads no oracle: it works while the oracle is\n unavailable. You send it with the account's own owner key; this server never sends.",
"inputSchema": {
"properties": {
"account": {
"title": "Account",
"type": "string"
},
"market": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Market"
},
"usdg": {
"default": "all",
"title": "Usdg",
"type": "string"
}
},
"required": [
"account"
],
"title": "borrow_repay_quoteArguments",
"type": "object"
},
"name": "borrow_repay_quote"
},
{
"description": "Share Lending, BORROW side: the Morpho Blue market that takes hhNVDA-CC fund shares as collateral for USDG — id (discovered from\n the lending vault at each call; the mainnet market is being migrated to a new oracle), LLTV, the ShareRiskOracle price and status\n (live / held / unavailable), borrow rate, utilization, supply, borrowed, available — and `my`: collateral, debt (interest to now),\n borrowing power, health factor, LTV and the liquidation price. Positions left on another market show under otherPositions;\n `market` selects one. Rule: keep LTV at or below 70% of LLTV. Read-only; nothing is sent.",
"inputSchema": {
"properties": {
"account": {
"title": "Account",
"type": "string"
},
"market": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Market"
}
},
"required": [
"account"
],
"title": "borrow_statusArguments",
"type": "object"
},
"name": "borrow_status"
},
{
"description": "The unsigned calldata to post `shares` fund shares (a decimal or 'all' of the wallet) as collateral: approve to Blue (when the\n allowance is short) + supplyCollateral(marketParams, shares, account, 0x), with the position before and after (HF, LTV). No\n oracle read. insufficient_balance when the wallet holds fewer shares (shares still in the fund's redemption queue do not count).\n You send it with the account's own owner key; this server never sends.",
"inputSchema": {
"properties": {
"account": {
"title": "Account",
"type": "string"
},
"market": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Market"
},
"shares": {
"title": "Shares",
"type": "string"
}
},
"required": [
"account",
"shares"
],
"title": "borrow_supply_collateral_quoteArguments",
"type": "object"
},
"name": "borrow_supply_collateral_quote"
},
{
"description": "The unsigned calldata to borrow `usdg` USDG against posted collateral: borrow(marketParams, usdg, 0, account, account), with the\n post-action HF / LTV and a `warning` when the resulting LTV is above 70% of LLTV. Refused with oracle_stale when the ShareRiskOracle\n is fail-closed (Blue cannot price the collateral), unhealthy when HF would drop below 1 (with the most you could add),\n insufficient_liquidity when the market lacks the USDG. You send it with the account's own owner key; this server never sends.",
"inputSchema": {
"properties": {
"account": {
"title": "Account",
"type": "string"
},
"market": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Market"
},
"usdg": {
"title": "Usdg",
"type": "string"
}
},
"required": [
"account",
"usdg"
],
"title": "borrow_take_quoteArguments",
"type": "object"
},
"name": "borrow_take_quote"
},
{
"description": "The unsigned calldata to take fund shares back from Blue: withdrawCollateral(marketParams, shares, account, account), with the\n post-action HF / LTV and the 70%-of-LLTV warning. Refused with unhealthy when the remaining collateral would not cover the debt,\n oracle_stale when there is debt and the oracle is fail-closed (no debt: no oracle read, always allowed), insufficient_collateral.\n You send it with the account's own owner key; this server never sends.",
"inputSchema": {
"properties": {
"account": {
"title": "Account",
"type": "string"
},
"market": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Market"
},
"shares": {
"default": "all",
"title": "Shares",
"type": "string"
}
},
"required": [
"account"
],
"title": "borrow_withdraw_collateral_quoteArguments",
"type": "object"
},
"name": "borrow_withdraw_collateral_quote"
},
{
"description": "The quote that exits `account`'s open position in `instrument` before expiry: reads the position, takes the opposite\n side (long -> sell, short -> buy), size = min(|position|, quantity or the whole position), and returns the desk's signed\n quote with the fillOrderAs calldata in fill.send. You must send it with your own key before validUntil\n (`hedgehood close <instrument> --send` or the npm MCP's close_position); this server never sends. nothing_to_close\n when the account is flat there; a close_only:* refusal from the desk is returned with its reason.",
"inputSchema": {
"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",
"type": "object"
},
"name": "close_quote"
},
{
"description": "The ERC-8004 Identity Registry record of an agent id and the accounts seen trading under it.",
"inputSchema": {
"properties": {
"agent_id": {
"title": "Agent Id",
"type": "integer"
}
},
"required": [
"agent_id"
],
"title": "get_agent_recordArguments",
"type": "object"
},
"name": "get_agent_record"
},
{
"description": "PAST activity of an account, newest first: fills (your side buy / sell, price, premium, fee), settlements (payout, PnL)\n and redeems, at most `limit` (<= 500) and after `since` (unix seconds), plus a one-line `summary`. Open positions are\n get_positions.",
"inputSchema": {
"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",
"type": "object"
},
"name": "get_history"
},
{
"description": "Leaderboard per account or per ERC-8004 agent id (by='agent'): fills, premium paid / received, settled PnL.",
"inputSchema": {
"properties": {
"by": {
"default": "account",
"title": "By",
"type": "string"
},
"limit": {
"default": 25,
"title": "Limit",
"type": "integer"
},
"order": {
"default": "settledPnlRaw",
"title": "Order",
"type": "string"
}
},
"title": "get_leaderboardArguments",
"type": "object"
},
"name": "get_leaderboard"
},
{
"description": "Model bid / ask / mid (USDG per share), delta and whether a quote would be given. instrument like NVDA-20261016-200-C.",
"inputSchema": {
"properties": {
"instrument": {
"title": "Instrument",
"type": "string"
}
},
"required": [
"instrument"
],
"title": "get_markArguments",
"type": "object"
},
"name": "get_mark"
},
{
"description": "PnL of an account: every position (open / closed / settled) with the desk's mark, unrealized and realized PnL, fees paid\n and the total, all USDG raw (1e6) signed from the account's side, plus a one-line `summary` in USDG.",
"inputSchema": {
"properties": {
"account": {
"title": "Account",
"type": "string"
}
},
"required": [
"account"
],
"title": "get_pnlArguments",
"type": "object"
},
"name": "get_pnl"
},
{
"description": "ACTIVE positions: open positions, cost basis and leaderboard row of an account (and its ERC-8004 agent id when it has\n one). Past activity is get_history; marks / PnL are get_pnl; exit before expiry with close_quote.",
"inputSchema": {
"properties": {
"account": {
"title": "Account",
"type": "string"
}
},
"required": [
"account"
],
"title": "get_positionsArguments",
"type": "object"
},
"name": "get_positions"
},
{
"description": "A signed quote addressed to `account` for `quantity` shares (buy or sell), valid for seconds, with the exact calldata\n to send to fillOrderAs from the owner key or the given session key, the fee, the decay and a canFill preview (with a\n 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:*);\n to exit a position use close_quote. Nothing is sent by this server.",
"inputSchema": {
"properties": {
"account": {
"title": "Account",
"type": "string"
},
"instrument": {
"title": "Instrument",
"type": "string"
},
"quantity": {
"title": "Quantity",
"type": "string"
},
"session_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Session Key"
},
"side": {
"title": "Side",
"type": "string"
}
},
"required": [
"instrument",
"side",
"quantity",
"account"
],
"title": "get_quoteArguments",
"type": "object"
},
"name": "get_quote"
},
{
"description": "Why the desk refused quotes to `taker` (your account) in the last 48 h, newest first: code, reason, instrument, side and\n quantity as asked, plus counts by code and what to do about each code. At most `limit` (<= 500) rows; read-only.",
"inputSchema": {
"properties": {
"limit": {
"default": 50,
"title": "Limit",
"type": "integer"
},
"taker": {
"title": "Taker",
"type": "string"
}
},
"required": [
"taker"
],
"title": "get_refusalsArguments",
"type": "object"
},
"name": "get_refusals"
},
{
"description": "How to fund a market balance with USDG over x402 (and the direct deposit path). amount in USDG. On mainnet the answer\n carries `onramp`: a MoonPay buy link for USDG delivered on Robinhood Chain to `account`, for an agent that holds no USDG\n 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\n session key (authorizeSession with maxShortRisk and maxSpend: maxShortRisk 0 = the key cannot open shorts, maxSpend 0 = buy-to-close only).",
"inputSchema": {
"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",
"type": "object"
},
"name": "how_to_deposit"
},
{
"description": "TESTNET only: how to get the test settlement token (TestUSD, hUSD-test, no value). Returns the faucet call (to, data =\n faucet(): a fixed amount to the caller once per cooldown), the account's balance and next draw time when readable, and the\n onboarding steps: connect -> faucet -> deposit -> session key -> quote -> fill. Read-only: your own wallet sends the call.\n Mainnet answers not_on_mainnet (see how_to_deposit).",
"inputSchema": {
"properties": {
"account": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Account"
}
},
"title": "how_to_get_test_fundsArguments",
"type": "object"
},
"name": "how_to_get_test_funds"
},
{
"description": "The unsigned calldata to lend `usdg` USDG: `txs` = USDG approve (when the allowance is short) then the vault's ERC-4626\n deposit(usdg, account), with the share preview, the APY estimate and the cap / gate / balance checks as {error, reason}\n (cap_exceeded, insufficient_balance, paused, not_eligible). You send every tx with the account's own owner key (needs ETH for\n gas); this server holds no keys and sends nothing.",
"inputSchema": {
"properties": {
"account": {
"title": "Account",
"type": "string"
},
"usdg": {
"title": "Usdg",
"type": "string"
}
},
"required": [
"account",
"usdg"
],
"title": "lend_deposit_quoteArguments",
"type": "object"
},
"name": "lend_deposit_quote"
},
{
"description": "Share Lending, LEND side: the Morpho Vault V2 that lends USDG against Hedgehood fund shares (hhNVDA-CC) on Morpho Blue — vault,\n total assets, cap and room, the live market's utilization and borrow rate, an approximate supply APY (net of the vault's 10%\n performance fee), and `my`: the account's vault shares, their USDG value and its wallet USDG. Deposits mint shares at once and\n earn immediately; a withdrawal needs unborrowed liquidity. Read-only; nothing is sent. Not for US persons.",
"inputSchema": {
"properties": {
"account": {
"title": "Account",
"type": "string"
}
},
"required": [
"account"
],
"title": "lend_statusArguments",
"type": "object"
},
"name": "lend_status"
},
{
"description": "The unsigned calldata to take lent USDG back: withdraw(usdg, account, account), or redeem(all shares, account, account) for\n 'all' (exact, no dust). insufficient_balance when the account holds less, insufficient_liquidity when the vault's idle USDG plus\n the market's unborrowed supply cannot pay it now. You send it with the account's own owner key; this server never sends.",
"inputSchema": {
"properties": {
"account": {
"title": "Account",
"type": "string"
},
"usdg": {
"default": "all",
"title": "Usdg",
"type": "string"
}
},
"required": [
"account"
],
"title": "lend_withdraw_quoteArguments",
"type": "object"
},
"name": "lend_withdraw_quote"
},
{
"description": "Instruments (expiry x strike x call/put) with their on-chain ids. expiry as YYYYMMDD or unix seconds.",
"inputSchema": {
"properties": {
"expiry": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Expiry"
},
"underlying": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Underlying"
}
},
"title": "list_instrumentsArguments",
"type": "object"
},
"name": "list_instruments"
},
{
"description": "The option markets: underlying, addresses, version, open expiries.",
"inputSchema": {
"properties": {},
"title": "list_marketsArguments",
"type": "object"
},
"name": "list_markets"
},
{
"description": "The Hedgehood OptionVault v2 funds (hhNVDA-CC, hhNVDA-WHEEL, hhGOOGL-CC, ...): stock token, deposit cap and room, total\n shares, NAV per share (USDG, from the chain), the current epoch (index, phase, cutoff / trade window / expiry, next freeze)\n and the deposit gate. Vaults are passive weekly premium income held for weeks, not a trade: a deposit queues, becomes shares\n at the next epoch freeze (up to a week) and shares are redeemed in kind at a later freeze; use the options market for\n exposure you open and close in seconds. Read-only; nothing is sent.",
"inputSchema": {
"properties": {},
"title": "list_vaultsArguments",
"type": "object"
},
"name": "list_vaults"
},
{
"description": "The unsigned calldata to collect what `account`'s redemption (or refunded deposit) in `vault` paid: claim(account, account)\n with the claimable stock and USDG amounts; nothing_to_claim with the pending redemption's cutoff when it has not frozen yet.\n You send it with the account's own owner key; this server never sends.",
"inputSchema": {
"properties": {
"account": {
"title": "Account",
"type": "string"
},
"vault": {
"title": "Vault",
"type": "string"
}
},
"required": [
"account",
"vault"
],
"title": "vault_claim_quoteArguments",
"type": "object"
},
"name": "vault_claim_quote"
},
{
"description": "The unsigned calldata to deposit `usdg` USDG into `vault` (address or symbol like hhNVDA-CC) for `account`: `txs` = USDG\n approve (when the allowance is short) then requestDeposit(0, usdg, account), with the cohort epoch and its cutoff, a share\n estimate at today's NAV, the balance / cap / eligibility checks and the cancelDeposit calldata. The deposit is NOT instant: it\n 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\n owner key (needs ETH for gas); this server holds no keys and sends nothing.",
"inputSchema": {
"properties": {
"account": {
"title": "Account",
"type": "string"
},
"usdg": {
"title": "Usdg",
"type": "string"
},
"vault": {
"title": "Vault",
"type": "string"
}
},
"required": [
"account",
"vault",
"usdg"
],
"title": "vault_deposit_quoteArguments",
"type": "object"
},
"name": "vault_deposit_quote"
},
{
"description": "The unsigned calldata to redeem `shares` (a decimal or 'all') of `vault` for `account`: requestRedeem(shares, account),\n the cohort it joins and when it pays, the cancelRedeem calldata. The shares go into escrow now and are paid IN KIND (stock\n 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\n a week; then vault_claim_quote collects. You send it with the account's own owner key; this server never sends.",
"inputSchema": {
"properties": {
"account": {
"title": "Account",
"type": "string"
},
"shares": {
"default": "all",
"title": "Shares",
"type": "string"
},
"vault": {
"title": "Vault",
"type": "string"
}
},
"required": [
"account",
"vault"
],
"title": "vault_redeem_quoteArguments",
"type": "object"
},
"name": "vault_redeem_quote"
},
{
"description": "An account's standing in every fund: shares (credited and owed by a frozen deposit), value at NAV, the pending deposit or\n redemption with its cohort epoch and cutoff, what is claimable, the fund's epoch state and the next step (wait / claim /\n redeem). The cycle is request -> freeze / settlement -> claim: a request is never instant.",
"inputSchema": {
"properties": {
"account": {
"title": "Account",
"type": "string"
}
},
"required": [
"account"
],
"title": "vault_statusArguments",
"type": "object"
},
"name": "vault_status"
}
]
}What the leaf hashes
{"body":"047482fbd024bf807a4ce68f42d03cbf06057c0650cabd7a470520e19df4c3cb","id":1002291,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793255811417630,"prev":null,"subject":"fcc9479e-a631-4b19-8a70-85ed9772b709","subject_kind":"endpoint"}Proof
Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (242798 rows).
- 0xfacd928908bf2e7700362b295a28cdca674cfe357e09d529ffd680fd8488530c
- 0x091506d160682d5db5d02ad20fc26f6b291031e753af5cdc3496a9ab94637679
- 0xa9a68f6ccb0bf9890f68a2df20ff5fdbaa9014b83f409a17b1b9da5405d5f075
- 0xe6b01e19db35eed71058450d9489dcf17b2eb9bcaabae9cd6e252e2c509e0822
- 0xb7e9d42246efa66f0298d869d0c0caa7cac76de2385b63278e75300ebdb68f5f
- 0xfcefd37a1d1b8197c4b6750858a3a4e766f01dd8759583d74c9fc4020d2e24f0
- 0x3f572fe58aa98efdbbf55c28aa465d8f762e37cc95eb0dd7286b6da4cd858746
- 0x153afc5b7c0b854360f8bf9c2bcde669e23dbfc5c79582371dc4cc713da81b26
- 0x696523148c0d2a44ca5efb6cf2cb0e50b5ba7aea3aa50ba14e32c484a18ddb5f
- 0xaf5e27d9706b6ece7828a6e5458afa3cbfeeec4816d5b5672ce301303e1aa2b7
- 0xdca3b929b35564c7c25ce2498f3699b9960f89efad0619e20b8b80127972242e
- 0xdb76702465d9dcc18228c424b986c0d068605e407bc0698ac73f564044fa8c39
- 0x53bd5c3baafe91745ebff65c20addef2a0eec44e95ed2b7e15d2e7abd391cbca
- 0xf708469bc3aba85a4a4875a16834cb1ef22f7d55f1823cedb60f00dfa15f77df
- 0x1dd763930a8023065a24b676469b4f26d92a89cfe71226ced9df379f43ec0f0a
- 0x1597ec94933260048e5e583aff1ad0fd44cc49efcd0a994091ed5db4924d7b02
- 0xe01539ac4c9f9cdf265a9e5c6d99c8da11e70ff0c7175fb23e402d33b9d79785
- Day root
- 0xc050555c6b023f2aefb6536efb9f0760b92c30a0d06c572b7daf63db259ea17c
- Chained
- 0x4cde8bae2042512e1bec11650628f0293556311cc4ea74d99ffddf02b671a7d6
- Published
- On Arc Testnet, block 69753317: 0x9e85c340732f416e431b111fae72f7624870125f7f379af2732eb6c2ba8cf6a1