Skip to content

FortFi Treasury MCP

by rebelArtists · remote · no sign-in to list tools · v1.0.0 · published by GitHub user rebelArtists

Policy-gated MCP treasury for AI agents — x402 subscribe, 50+ tools, multi-chain.

Deletes · 9Final · 15Changes · 49

133 tools: 9 can delete or cancel things, 15 do something that can't be undone, 49 change things and 60 only read.

Scanned Oct 21, 2026

14 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http fortfi-treasury https://fortfiapp.com/api/mcp --header 'Authorization: <your-authorization>'

Findings

Matches of fixed checks, with the text they matched.

14 info
Show 8 more findings

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

133 tools

Deletes or cancels 9Claude Code: deny
  • cancel_governance_changeVeto/cancel a pending governance challenge before it is signed and applied.No findings

    Why it is in this group

    • The name "cancel_governance_change" says "cancel": a word for removing or ending something.
    Description, as the server wrote it
    Veto/cancel a pending governance challenge before it is signed and applied. Cancelling TIGHTENS security, so it needs only the agent key (no signature). Also cancels legacy scheduled rows from before immediate-apply parity.
  • cancel_hyperliquid_ordersPropose cancelling resting Hyperliquid orders (limit orders and SL/TP triggers) on one market.No findings

    Why it is in this group

    • The name "cancel_hyperliquid_orders" says "cancel": a word for removing or ending something.
    Description, as the server wrote it
    Propose cancelling resting Hyperliquid orders (limit orders and SL/TP triggers) on one market. Pass oids from list_hyperliquid_open_orders, or omit oids to cancel every resting order on that symbol. Moves no money, but cancelling a stop loss removes protection, so it follows the normal confirm_proposal flow.
  • cancel_payment_requestCancel an open payment request with no verified settlement.No findings

    Why it is in this group

    • The name "cancel_payment_request" says "cancel": a word for removing or ending something.
    Description, as the server wrote it
    Cancel an open payment request with no verified settlement.
  • cancel_pending_actionCancel a pending approval that you (the account owner) initiated.No findings

    Why it is in this group

    • The name "cancel_pending_action" says "cancel": a word for removing or ending something.
    Description, as the server wrote it
    Cancel a pending approval that you (the account owner) initiated.
  • remove_backup_governance_walletRemove the registered backup governance wallet.No findings

    Why it is in this group

    • The name "remove_backup_governance_wallet" says "remove": a word for removing or ending something.
    Description, as the server wrote it
    Remove the registered backup governance wallet. GOVERN action: sign with your funding wallet (challengeId + walletSignature); applies immediately once signed. After removal, only the funding wallet may authorize governance.
  • remove_cosignerRemove an active co-signer from this account.No findings

    Why it is in this group

    • The name "remove_cosigner" says "remove": a word for removing or ending something.
    Description, as the server wrote it
    Remove an active co-signer from this account. GOVERN action (it shrinks the approver set): via an agent key, sign a challenge with your funding wallet (challengeId + walletSignature); applies immediately once signed.
  • remove_recipientRemove a recipient from the FortFi allowlist (tightening policy — no funding-wallet GOVERN).No findings

    Why it is in this group

    • The name "remove_recipient" says "remove": a word for removing or ending something.
    Description, as the server wrote it
    Remove a recipient from the FortFi allowlist (tightening policy — no funding-wallet GOVERN). Human developer key, session, or agent treasury key. Re-sync Turnkey policies in the app so the enclave matches.
  • revoke_cosigner_inviteRevoke a pending outbound co-signer invite before it is accepted.No findings

    Why it is in this group

    • The name "revoke_cosigner_invite" says "revoke": a word for removing or ending something.
    Description, as the server wrote it
    Revoke a pending outbound co-signer invite before it is accepted.
  • revoke_vault_credentialRevoke a vault-scoped credential (treasury + keys:manage).2 findings

    Why it is in this group

    • The name "revoke_vault_credential" says "revoke": a word for removing or ending something.

    Findings

    • Info

      The description mentions "credential".

      Matched text

      description: "Revoke a vault-scoped credential (treasury + keys:manage). Idempotent if..."

      What this check looks for
    • Info

      The input schema at properties.credentialId.description mentions "credential".

      Matched text

      inputSchema.properties.credentialId.description: "Vault credential id"

      What this check looks for
    Description, as the server wrote it
    Revoke a vault-scoped credential (treasury + keys:manage). Idempotent if already revoked.
Can't be undone 15Claude Code: ask
  • accept_cosigner_inviteAccept a pending co-signer invite.No findings

    Why it is in this group

    • The name "accept_cosigner_invite" says "invite": a word for sending, and what is sent cannot be taken back.
    Description, as the server wrote it
    Accept a pending co-signer invite. After accepting, you will be able to approve/reject pending actions for that account.
  • create_payment_productCreate a persistent product checkout link (/pay/p/{slug}).No findings

    Why it is in this group

    • The name "create_payment_product" says "create": a word for a change.
    • The name "create_payment_product" also says "payment": a word that usually means money moves, which cannot be taken back.
    Description, as the server wrote it
    Create a persistent product checkout link (/pay/p/{slug}). Each visit mints a fresh payment request. One webhook endpoint receives paid events for all products.
  • create_payment_requestCreate a shareable payment request for a vault.No findings

    Why it is in this group

    • The name "create_payment_request" says "create": a word for a change.
    • The name "create_payment_request" also says "payment": a word that usually means money moves, which cannot be taken back.
    Description, as the server wrote it
    Create a shareable payment request for a vault. Returns pid, paymentUrl, and qrPayload for humans or agents.
  • extend_payment_requestExtend an open payment request expiry (default extension window in days).No findings

    Why it is in this group

    • The name "extend_payment_request" says "payment": a word that usually means money moves, which cannot be taken back.
    Description, as the server wrote it
    Extend an open payment request expiry (default extension window in days).
  • invite_agent_cosignerInvite a co-signer.No findings

    Why it is in this group

    • The name "invite_agent_cosigner" says "invite": a word for sending, and what is sent cannot be taken back.
    Description, as the server wrote it
    Invite a co-signer. Agents: pass cosignerUserId (GOVERN / funding-wallet sign when using an agent API key). Humans: pass email — opens instructions for Security UI passkey provision (Turnkey dual-control with MCP DA).
  • invite_cosignerAlias of invite_agent_cosigner.No findings

    Why it is in this group

    • The name "invite_cosigner" says "invite": a word for sending, and what is sent cannot be taken back.
    Description, as the server wrote it
    Alias of invite_agent_cosigner. Humans: email → Security UI. Agents: cosignerUserId.
  • pay_payment_request_x402Pay an open FortFi invoice via x402 EIP-3009 from a governed Turnkey vault.No findings

    Why it is in this group

    • The name "pay_payment_request_x402" says "pay": a word that usually means money moves, which cannot be taken back.
    Description, as the server wrote it
    Pay an open FortFi invoice via x402 EIP-3009 from a governed Turnkey vault. Requires Delegated Access on human developer keys or an agent account. Base mainnet first.
  • propose_hyperliquid_send_assetMove USDC between Hyperliquid margin desks without HyperEVM (any perp book: core, xyz, io, para, mkts, …, or spot → any perp desk).No findings

    Why it is in this group

    • The name "propose_hyperliquid_send_asset" says "send": a word for sending, and what is sent cannot be taken back.
    Description, as the server wrote it
    Move USDC between Hyperliquid margin desks without HyperEVM (any perp book: core, xyz, io, para, mkts, …, or spot → any perp desk). Use list_hyperliquid_balances perpDesks[].dex for valid dex ids.
  • propose_hyperliquid_withdrawPropose moving Hyperliquid perp USDC to the owner's own HyperEVM wallet (same address; perp to HL Spot, then sendAsset to the USDC system address).No findings

    Why it is in this group

    • The name "propose_hyperliquid_withdraw" says "withdraw": a word that usually means money moves, which cannot be taken back.
    Description, as the server wrote it
    Propose moving Hyperliquid perp USDC to the owner's own HyperEVM wallet (same address; perp to HL Spot, then sendAsset to the USDC system address). Funds cannot go to any other recipient. Returns proposalId; human confirms with passkey via Perps Withdraw to HyperEVM or confirm_proposal.
  • propose_payout_manifestExecute a validated payout manifest sequentially (one ActionIntent per line).No findings

    Why it is in this group

    • The name "propose_payout_manifest" says "payout": a word that usually means money moves, which cannot be taken back.
    Description, as the server wrote it
    Execute a validated payout manifest sequentially (one ActionIntent per line). Requires Delegated Access or agent wallet. Set dryRun:true to validate only.
  • propose_recipient_manifestApply a validated recipient manifest (human/developer key).No findings

    Why it is in this group

    • The description's first verb is "apply": a word for a change.
    • The input addresses people (input.recipients): what it sends cannot be taken back.
    Description, as the server wrote it
    Apply a validated recipient manifest (human/developer key). Adds new allowlist rows with normal 24h cooldown. Agent keys: use add_recipient per row (GOVERN).
  • propose_transferTransfer USDC to an allowlisted recipient, OR pay a FortFi invoice by public pid (paymentRequestPid + fromWalletId — amount optional for partial pay).No findings

    Why it is in this group

    • The name "propose_transfer" says "transfer": a word for a change that another call does not undo.
    Description, as the server wrote it
    Transfer USDC to an allowlisted recipient, OR pay a FortFi invoice by public pid (paymentRequestPid + fromWalletId — amount optional for partial pay). Recipient path requires allowlist approval. Invoice path binds settlement to the pid (Delegated Access / agent accounts execute server-side when configured).
  • propose_yield_withdrawPropose Morpho vault withdraw, then call confirm_proposal.No findings

    Why it is in this group

    • The name "propose_yield_withdraw" says "withdraw": a word that usually means money moves, which cannot be taken back.
    Description, as the server wrote it
    Propose Morpho vault withdraw, then call confirm_proposal. With Delegated Access this executes server-side when policy permits. Use list_yield_positions for vaultAddress.
  • send_merchant_webhook_testSend a signed webhook.test event to an endpoint.No findings

    Why it is in this group

    • The name "send_merchant_webhook_test" says "send": a word for sending, and what is sent cannot be taken back.
    Description, as the server wrote it
    Send a signed webhook.test event to an endpoint.
Changes things 49Claude Code: ask
  • add_recipientAdd a payout address to the allowlist.No findings

    Why it is in this group

    • The name "add_recipient" says "add": a word for a change.
    Description, as the server wrote it
    Add a payout address to the allowlist. Human developer key (frtfi_hu_* + DA): added with 24h cooldown (no Assist passkey). Agent key (frtfi_ag_*): GOVERN — funding-wallet signature required; then approved immediately.
  • approve_cosigner_actionApprove a pending action as co-signer.No findings

    Why it is in this group

    • The name "approve_cosigner_action" says "approve": a word for a change.
    Description, as the server wrote it
    Approve a pending action as co-signer. Use with list_pending_cosigner_approvals.
  • approve_recipientApprove a recipient still in cooldown (early release).No findings

    Why it is in this group

    • The name "approve_recipient" says "approve": a word for a change.
    Description, as the server wrote it
    Approve a recipient still in cooldown (early release). Active cosigners may approve directly. Human passkey owners: use the FortFi app (passkey) or the approval email link; owner bearer keys cannot self-clear. Agent-owned accounts: owner self-approval is GOVERN (funding-wallet signature).
  • check_trade_allowanceCheck ERC-20 allowance for an upcoming CoW swap (cow_swap) or Fusion bridge (fusion_bridge).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Check ERC-20 allowance for an upcoming CoW swap (cow_swap) or Fusion bridge (fusion_bridge). Call before propose_swap / propose_bridge; if insufficient, use propose_token_approve then confirm.
  • confirm_proposalConfirm a pending proposal returned by a propose_* tool.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Confirm a pending proposal returned by a propose_* tool. Reuses the same policy, risk, allowlist, vault-grant, delegated-authority, and cosign checks as POST /api/mcp/confirm. Returns executed, pending-approval, or passkey-required status.
  • create_checkout_sessionCreate a per-customer checkout session: resolves (or provisions) the customer's own vault from your externalCustomerId, mints a payment request that settles into it, and returns ch…No findings

    Why it is in this group

    • The name "create_checkout_session" says "create": a word for a change.
    Description, as the server wrote it
    Create a per-customer checkout session: resolves (or provisions) the customer's own vault from your externalCustomerId, mints a payment request that settles into it, and returns checkoutUrl + x402Url. The paid webhook then carries customer identity. Price from productSlug or ad-hoc amountUsd.
  • create_customerCreate or sync one customer vault synchronously (treasury + wallets:write).1 finding

    Why it is in this group

    • The name "create_customer" says "create": a word for a change.

    Findings

    • Info

      The input schema at properties.credential.description mentions "credential".

      Matched text

      inputSchema.properties.credential.description: "Optional vault-scoped credential to issue for this wallet"

      What this check looks for
    Description, as the server wrote it
    Create or sync one customer vault synchronously (treasury + wallets:write). Idempotent on externalCustomerId + namespace + chain. Returns wallet address immediately; Turnkey wallet creation may take a few seconds on first call.
  • create_merchant_webhookRegister a webhook URL.No findings

    Why it is in this group

    • The name "create_merchant_webhook" says "create": a word for a change.
    Description, as the server wrote it
    Register a webhook URL. FortFi generates a signing secret (returned once) for the merchant to verify HMAC on incoming POSTs. Not per-product — one endpoint receives all paid events.
  • create_provisioning_jobBulk-provision up to 20 customer vaults per job (treasury + keys:manage + wallets:write).No findings

    Why it is in this group

    • The name "create_provisioning_job" says "create": a word for a change.
    Description, as the server wrote it
    Bulk-provision up to 20 customer vaults per job (treasury + keys:manage + wallets:write). Requires idempotencyKey in args. Poll get_provisioning_job until terminal; bearer secrets reveal once on first terminal GET.
  • create_vault_credentialMint a vault-scoped credential for an existing wallet (treasury + keys:manage).2 findings

    Why it is in this group

    • The name "create_vault_credential" says "create": a word for a change.

    Findings

    • Info

      The description mentions "credential".

      Matched text

      description: "Mint a vault-scoped credential for an existing wallet (treasury + keys..."

      What this check looks for
    • Info

      The input schema at properties.name.description mentions "Credential".

      Matched text

      inputSchema.properties.name.description: "Credential label (2–100 chars)"

      What this check looks for
    Description, as the server wrote it
    Mint a vault-scoped credential for an existing wallet (treasury + keys:manage). Returns bearerKey once when agentPublicKey is omitted. Requires FORTFI_VAULT_CREDENTIALS_ENABLED.
  • discover_tokensMarket-wide token discovery on a FortFi chain (USD).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Market-wide token discovery on a FortFi chain (USD). Use for trending/gainers/losers/volume/mcap — NOT the browser Explore REST route. Sorts: gainers_1d, gainers_30d, gainers_90d, gainers_365d, losers_1d, losers_30d, losers_90d, losers_365d, market_cap, volume_1d. No 7d or 30d-volume sort exists upstream — closest available gainers granularity to '1 week' is gainers_1d or gainers_30d; say so explicitly rather than silently picking one. Returns contract addresses for propose_swap / propose_bridge.
  • list_yield_marketsOpen Morpho yield discovery by chain with discovered, policyEligible, manuallyCurated, executionReady, and eligibilityReasons.No findings

    Why it is in this group

    • The name "list_yield_markets" says "list": a word for reading.
    • The description's first verb is "open": a word for a change.
    Description, as the server wrote it
    Open Morpho yield discovery by chain with discovered, policyEligible, manuallyCurated, executionReady, and eligibilityReasons. Default minimum TVL is $500K everywhere (listing, policy, Turnkey). executionReady means TVL qualifies and you have a wallet on that chain; POLICY_SYNC_RECOMMENDED is advisory only.
  • pause_strategyPause a strategy.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Pause a strategy. Positions stay open; no more orders until resumed.
  • propose_bridgePropose a Fusion+ or deBridge cross-chain swap.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Propose a Fusion+ or deBridge cross-chain swap. FortFi resolves chain-specific verified token contracts from sellSymbol/buySymbol; optional token addresses are mismatch assertions, never routing overrides. Inline quote by default, or use previewQuoteId for two-step review.
  • propose_create_accountCreate a new wallet on a supported chain.No findings

    Why it is in this group

    • The name "propose_create_account" says "create": a word for a change.
    Description, as the server wrote it
    Create a new wallet on a supported chain. Optional metadata tags (e.g. customer_id). Then call confirm_proposal with the returned proposalId. Agent accounts execute server-side when no cosigners are configured.
  • propose_hyperliquid_depositPropose moving HyperEVM USDC into Hyperliquid perp margin (top up).1 finding

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.

    Findings

    • Info

      The description mentions "credential".

      Matched text

      description: "...ver-side when Delegated Access or agent credential)."

      What this check looks for
    Description, as the server wrote it
    Propose moving HyperEVM USDC into Hyperliquid perp margin (top up). Set perpDex for HIP-3 desks (xyz, io, para). Returns proposalId; execute with confirm_proposal (server-side when Delegated Access or agent credential).
  • propose_hyperliquid_outcome_orderPropose a HIP-4 buy or sell on the Hyperliquid account.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Propose a HIP-4 buy or sell on the Hyperliquid account. size is micro-USDC collateral (10000000 = $10). limitPrice is quote-micro. Runs outcome policy (no leverage, max notional) before any signature. Confirm with confirm_proposal.
  • propose_hyperliquid_perp_closePropose closing a Hyperliquid perp position (reduce-only).No findings

    Why it is in this group

    • The name "propose_hyperliquid_perp_close" says "close": a word for a change.
    Description, as the server wrote it
    Propose closing a Hyperliquid perp position (reduce-only). Omit size to close the whole position. Returns a proposalId for confirm_proposal.
  • propose_hyperliquid_perp_modifyPropose modifying a Hyperliquid perp position's protective stop-loss / take-profit (reduce-only).No findings

    Why it is in this group

    • The name "propose_hyperliquid_perp_modify" says "modify": a word for a change.
    Description, as the server wrote it
    Propose modifying a Hyperliquid perp position's protective stop-loss / take-profit (reduce-only). Returns a proposalId for confirm_proposal.
  • propose_hyperliquid_perp_openPropose opening a Hyperliquid perp position.No findings

    Why it is in this group

    • The name "propose_hyperliquid_perp_open" says "open": a word for a change.
    Description, as the server wrote it
    Propose opening a Hyperliquid perp position. Runs FortFi perp policy (max leverage, max notional) and rejects non-hyperliquid-mainnet wallets. Returns a proposalId for confirm_proposal.
  • propose_hyperliquid_spot_to_perpPropose moving USDC from HL Spot into core perps margin (required after MoonPay HyperCore on-ramp).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Propose moving USDC from HL Spot into core perps margin (required after MoonPay HyperCore on-ramp). Returns proposalId; human confirms via Perps Deposit to tradable balance or confirm_proposal.
  • propose_polymarket_buyPropose buying Polymarket outcome shares, then call confirm_proposal.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Propose buying Polymarket outcome shares, then call confirm_proposal. Requires Polygon wallet.
  • propose_polymarket_redeemPropose redeeming winning shares from a resolved Polymarket market (CTF on Polygon), then call confirm_proposal.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Propose redeeming winning shares from a resolved Polymarket market (CTF on Polygon), then call confirm_proposal.
  • propose_polymarket_sellPropose selling Polymarket outcome shares (redeem collateral), then call confirm_proposal.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Propose selling Polymarket outcome shares (redeem collateral), then call confirm_proposal.
  • propose_rename_accountRename a wallet (account nickname), then call confirm_proposal with the returned proposalId.No findings

    Why it is in this group

    • The name "propose_rename_account" says "rename": a word for a change.
    Description, as the server wrote it
    Rename a wallet (account nickname), then call confirm_proposal with the returned proposalId.
  • propose_solana_swapPropose a Solana Jupiter swap.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Propose a Solana Jupiter swap. Autonomous agents: inline quote by default, or previewQuoteId for two-step review. confirm signs the bound quote.
  • propose_swapPropose an EVM CoW swap.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Propose an EVM CoW swap. Autonomous agents: fetches and binds a quote inline (default), or pass previewQuoteId from preview_swap_quote for a two-step review. confirm always signs the bound quote — same principle as FortFi Assist. Human session MCP: confirm requires passkey in the app.
  • propose_token_approvePropose max ERC-20 approval for CoW or Fusion spenders.No findings

    Why it is in this group

    • The name "propose_token_approve" says "approve": a word for a change.
    Description, as the server wrote it
    Propose max ERC-20 approval for CoW or Fusion spenders. Returns proposalId — call confirm_proposal before swap/bridge.
  • propose_yield_depositPropose Morpho vault deposit, then call confirm_proposal.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Propose Morpho vault deposit, then call confirm_proposal. With Delegated Access / agent key this executes server-side when policy permits. Use list_yield_markets for vaultAddress.
  • rank_hyperliquid_marketsRank Hyperliquid perp markets by 24h volume, pctChange, or funding.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Rank Hyperliquid perp markets by 24h volume, pctChange, or funding. Returns dex + assetClass tags. Default scope=core; pass scope=all for HIP-3. Cheap filter only — use screen_hyperliquid_markets for breakout TA.
  • rank_polymarket_marketsRank Polymarket markets by volume, liquidity, or 24h volume.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Rank Polymarket markets by volume, liquidity, or 24h volume.
  • rank_tokensTwo-stage token ranking: run the cheap screen, then concurrently fetch deterministic chart evidence only for the strongest candidates.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Two-stage token ranking: run the cheap screen, then concurrently fetch deterministic chart evidence only for the strongest candidates. Quick charts 5 candidates over month+3months; standard charts 10 over day+month+3months+year; deep charts 20 and requires explicit opt-in. Returns evidence for user review and never creates a proposal.
  • rank_yield_marketsBatch-rank Morpho markets using current net APY, APY median/average/range/volatility, TVL trend/drawdown, vault age, curation, instant-withdrawal liquidity, warnings, and current-u…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Batch-rank Morpho markets using current net APY, APY median/average/range/volatility, TVL trend/drawdown, vault age, curation, instant-withdrawal liquidity, warnings, and current-user execution eligibility. Results are ordered by current net APY, which is a spot rate that spikes: re-rank on evidence.apy.medianPercent before acting, since a vault printing 12% today commonly pays under 5% tomorrow. Runs evidence requests concurrently and never creates a proposal.
  • rebalance_strategy_nowRun a strategy's rebalance now instead of waiting for its schedule.No findings

    Why it is in this group

    • The description's first verb is "run": a word for a change.
    Description, as the server wrote it
    Run a strategy's rebalance now instead of waiting for its schedule. Returns the run outcome.
  • register_backup_governance_walletRegister (or replace) a single backup governance wallet — the agentic equivalent of a backup passkey.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Register (or replace) a single backup governance wallet — the agentic equivalent of a backup passkey. Either the funding wallet or this backup can authorize future governance. GOVERN action: sign the challenge with your CURRENT funding wallet (challengeId + walletSignature); applies immediately once signed. Max one backup.
  • reject_cosigner_actionReject a pending action as co-signer.No findings

    Why it is in this group

    • The name "reject_cosigner_action" says "reject": a word for a change.
    Description, as the server wrote it
    Reject a pending action as co-signer.
  • replay_merchant_webhook_deliveryReplay a dead-lettered or failed webhook delivery after fixing your endpoint.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Replay a dead-lettered or failed webhook delivery after fixing your endpoint. Re-sends the same event id and body for idempotent handlers.
  • resume_strategyResume a paused strategy.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Resume a paused strategy. An API key can only resume a strategy it started; others need the owner in the app.
  • run_hyperliquid_research_backtestRun an out-of-sample backtest on Hyperliquid perp OHLCV stored in FortFi research Postgres (hl_research_candles).No findings

    Why it is in this group

    • The name "run_hyperliquid_research_backtest" says "run": a word for a change.
    Description, as the server wrote it
    Run an out-of-sample backtest on Hyperliquid perp OHLCV stored in FortFi research Postgres (hl_research_candles). Returns IS/OOS metrics and a pass/fail verdict. Read-only; uses synced historical data, not live HL API for bars. Strategies: momentum_cross (default).
  • run_hyperliquid_research_backtest_specRun an out-of-sample backtest from a Strategy Spec JSON (universe + rank factor or named pattern + portfolio rules).No findings

    Why it is in this group

    • The name "run_hyperliquid_research_backtest_spec" says "run": a word for a change.
    Description, as the server wrote it
    Run an out-of-sample backtest from a Strategy Spec JSON (universe + rank factor or named pattern + portfolio rules). Deterministic; reads hl_research_* Postgres. Agent should translate natural-language strategy ideas into the spec object before calling. Pass presetId instead of spec to get a FortFi house preset (crypto-majors, core-momentum, mag7, semis, memory, ai-compute, pre-ipo, ...) with its frozen spec and published OOS, walk-forward, drawdown and leverage scenarios; add rerun:true to recompute it live.
  • screen_hyperliquid_marketsBreakout screener for Hyperliquid perps: min volume filter, rank, HL candle TA (RSI, MACD, Bollinger).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Breakout screener for Hyperliquid perps: min volume filter, rank, HL candle TA (RSI, MACD, Bollinger). Returns dex + assetClass tags and long/short/neutral bias. Default scope=core; scope=all for HIP-3. Never creates proposals.
  • screen_tokensBatch cheap-screen tokens across requested chains.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Batch cheap-screen tokens across requested chains. Defaults to verified assets, $5M market cap, $50K daily volume, top 30-day performers plus volume leaders, stablecoin removal, and cross-chain deduplication. Returns no proposal.
  • start_copy_tradeCopy another Hyperliquid account on one of your wallets.No findings

    Why it is in this group

    • The name "start_copy_trade" says "start": a word for a change.
    Description, as the server wrote it
    Copy another Hyperliquid account on one of your wallets. Every hour FortFi reads their book, keeps their largest positions until 95% of their exposure is covered (at most 10 names), scales to your equity and leverage cap, and trades only when a position drifts more than 10% from target. API keys may set a leverage cap of 1 or 2; 3 and 5 need the owner in the app. Same rails, caps and key re-checks as start_strategy.
  • start_strategyStart a house preset on a hyperliquid-mainnet wallet and place its first orders.No findings

    Why it is in this group

    • The name "start_strategy" says "start": a word for a change.
    Description, as the server wrote it
    Start a house preset on a hyperliquid-mainnet wallet and place its first orders. Leverage must be one of the preset's testedLeverage levels; high-risk levels need the owner in the app. Requires the owner to have turned on autonomous trading and confirmed perps eligibility. One strategy per wallet. Every order is an ActionIntent under this key's caps and co-sign rules; the key is re-checked every run and the strategy pauses if it is revoked.
  • stop_strategyStop a strategy and close every position it opened (cash out).No findings

    Why it is in this group

    • The name "stop_strategy" says "stop": a word for a change.
    Description, as the server wrote it
    Stop a strategy and close every position it opened (cash out). Positions it did not open are left alone.
  • update_cosigner_rulesSet cosigner quorum rules (send + swap USD bands).No findings

    Why it is in this group

    • The name "update_cosigner_rules" says "update": a word for a change.
    Description, as the server wrote it
    Set cosigner quorum rules (send + swap USD bands). Tightening rules works with the agent key alone. WEAKENING them (lower required cosigners / raise the amount floor) is a GOVERN action: sign a challenge with your funding wallet (challengeId + walletSignature); applies immediately once signed (same as passkey in the UI). Amounts use USDC micro-units (1 USDC = 1000000).
  • update_strategyLower a strategy's leverage or allocation cap.No findings

    Why it is in this group

    • The name "update_strategy" says "update": a word for a change.
    Description, as the server wrote it
    Lower a strategy's leverage or allocation cap. API keys can only tighten: raising leverage or the cap returns OWNER_PASSKEY_REQUIRED.
  • update_vault_credentialAtomically replace a vault credential's name, access mode, grants, and expiry (treasury + keys:manage).2 findings

    Why it is in this group

    • The name "update_vault_credential" says "update": a word for a change.

    Findings

    • Info

      The description mentions "credential".

      Matched text

      description: "Atomically replace a vault credential's name, access mode, grants, and expiry..."

      What this check looks for
    • Info

      The input schema at properties.credentialId.description mentions "credential".

      Matched text

      inputSchema.properties.credentialId.description: "Vault credential id"

      What this check looks for
    Description, as the server wrote it
    Atomically replace a vault credential's name, access mode, grants, and expiry (treasury + keys:manage). Revoked credentials cannot be updated.
  • update_wallet_metadataPropose updating wallet metadata tags (flat string key/value pairs; replaces existing tags on confirm).No findings

    Why it is in this group

    • The name "update_wallet_metadata" says "update": a word for a change.
    Description, as the server wrote it
    Propose updating wallet metadata tags (flat string key/value pairs; replaces existing tags on confirm). Returns proposalId; call confirm_proposal to apply. Not a money-moving action.
Only reads 60Claude Code: allow
  • get_account_holdingsToken holdings for a specific wallet, with USD values and 24h change.No findings

    Why it is in this group

    • The name "get_account_holdings" says "get": a word for reading.
    Description, as the server wrote it
    Token holdings for a specific wallet, with USD values and 24h change.
  • get_copy_trade_walletDeep dive on any Hyperliquid address: account value, leverage, open positions with share of book, PnL and volume for day, week, month and all time, and a copy preview per leverage …No findings

    Why it is in this group

    • The name "get_copy_trade_wallet" says "get": a word for reading.
    Description, as the server wrote it
    Deep dive on any Hyperliquid address: account value, leverage, open positions with share of book, PnL and volume for day, week, month and all time, and a copy preview per leverage cap (which positions would be copied, coverage, and the minimum account size so each copied position is at least $10).
  • get_cosigner_rulesAmount-banded cosigner quorum rules for sends and swaps.No findings

    Why it is in this group

    • The name "get_cosigner_rules" says "get": a word for reading.
    Description, as the server wrote it
    Amount-banded cosigner quorum rules for sends and swaps. Below-band amounts auto-execute; matching bands require N cosigner votes.
  • get_fusion_order_statusTrack an owned Fusion+ cross-chain order by orderHash.No findings

    Why it is in this group

    • The name "get_fusion_order_status" says "get": a word for reading.
    Description, as the server wrote it
    Track an owned Fusion+ cross-chain order by orderHash. Returns authoritative settlement/refund status, source and destination transactions, receiver, and the real destination token contract.
  • get_hyperliquid_balancesGet Hyperliquid wallet balances: L1 perps margin (withdrawable), HL Spot USDC (MoonPay HyperCore lands here), and HyperEVM USDC/HYPE.No findings

    Why it is in this group

    • The name "get_hyperliquid_balances" says "get": a word for reading.
    Description, as the server wrote it
    Get Hyperliquid wallet balances: L1 perps margin (withdrawable), HL Spot USDC (MoonPay HyperCore lands here), and HyperEVM USDC/HYPE. Also returns a `perps` aggregate over open positions: openPositionCount, unrealizedPnlUsd, entryNotionalUsd, and unrealizedPnlPct (null when nothing is open).
  • get_hyperliquid_cross_sectionRank a Hyperliquid perp universe by trailing return in one call, for a dollar-neutral long/short book.No findings

    Why it is in this group

    • The name "get_hyperliquid_cross_section" says "get": a word for reading.
    Description, as the server wrote it
    Rank a Hyperliquid perp universe by trailing return in one call, for a dollar-neutral long/short book. Returns dex, assetClass, trailing returns, realized vol, funding, rank, percentile, and long/short/hold buckets. Default scope=core (validated trend desk); pass scope=all for HIP-3 cross-asset books. Read-only; never creates proposals.
  • get_hyperliquid_marketGet a Hyperliquid perp market by symbol with mark/funding context and optional candle history.No findings

    Why it is in this group

    • The name "get_hyperliquid_market" says "get": a word for reading.
    Description, as the server wrote it
    Get a Hyperliquid perp market by symbol with mark/funding context and optional candle history.
  • get_hyperliquid_outcome_marketOne HIP-4 outcome market.No findings

    Why it is in this group

    • The name "get_hyperliquid_outcome_market" says "get": a word for reading.
    Description, as the server wrote it
    One HIP-4 outcome market. id is the numeric outcome id. Optional walletId reads that Hyperliquid account's share balance.
  • get_hyperliquid_research_data_statsRow counts and last ingest time for hl_research_* tables (candles, funding, symbols).No findings

    Why it is in this group

    • The name "get_hyperliquid_research_data_stats" says "get": a word for reading.
    Description, as the server wrote it
    Row counts and last ingest time for hl_research_* tables (candles, funding, symbols). Use before backtests to confirm data freshness.
  • get_hyperliquid_trading_deskOne-shot Hyperliquid trading desk snapshot for agent loops: margin, balances, positions, open orders, recent fills, and a `performance` block with unrealizedPnlUsd, unrealizedPnlPc…No findings

    Why it is in this group

    • The name "get_hyperliquid_trading_desk" says "get": a word for reading.
    Description, as the server wrote it
    One-shot Hyperliquid trading desk snapshot for agent loops: margin, balances, positions, open orders, recent fills, and a `performance` block with unrealizedPnlUsd, unrealizedPnlPct, entryNotionalUsd, openPositionCount, and realizedPnlUsdRecentFills. Prefer this over many separate reads every 30-60 minutes.
  • get_hyperliquid_user_fillsRecent Hyperliquid trade fills with closedPnl per fill.No findings

    Why it is in this group

    • The name "get_hyperliquid_user_fills" says "get": a word for reading.
    Description, as the server wrote it
    Recent Hyperliquid trade fills with closedPnl per fill. Use for P&L review and trade history (up to 2000 from HL).
  • get_mcp_guideFortFi MCP capability guide: onboarding paths, pricing, limits, workflows, and full tool catalog.No findings

    Why it is in this group

    • The name "get_mcp_guide" says "get": a word for reading.
    Description, as the server wrote it
    FortFi MCP capability guide: onboarding paths, pricing, limits, workflows, and full tool catalog. Call first when unsure which tool to use (e.g. market research → discover_tokens, not the Explore UI REST route).
  • get_payment_productGet a payment product by internal id or public slug.No findings

    Why it is in this group

    • The name "get_payment_product" says "get": a word for reading.
    Description, as the server wrote it
    Get a payment product by internal id or public slug.
  • get_payment_requestGet a payment request by internal id or public pid, including settlement attempts.No findings

    Why it is in this group

    • The name "get_payment_request" says "get": a word for reading.
    Description, as the server wrote it
    Get a payment request by internal id or public pid, including settlement attempts.
  • get_policy_limitsCurrent policy limits: per-tx/daily/monthly caps (USDC smallest units).1 finding

    Why it is in this group

    • The name "get_policy_limits" says "get": a word for reading.

    Findings

    • Info

      The description mentions "credential".

      Matched text

      description: "...agent cap tier limits, maxWallets, and credential access expiry."

      What this check looks for
    Description, as the server wrote it
    Current policy limits: per-tx/daily/monthly caps (USDC smallest units). Agent accounts also include agent cap tier limits, maxWallets, and credential access expiry.
  • get_polymarket_marketGet a Polymarket market by conditionId with optional outcome price history from the public CLOB API.No findings

    Why it is in this group

    • The name "get_polymarket_market" says "get": a word for reading.
    Description, as the server wrote it
    Get a Polymarket market by conditionId with optional outcome price history from the public CLOB API.
  • get_portfolioFull portfolio summary across all wallets: token balances with USD values, 24h change, and total net worth.No findings

    Why it is in this group

    • The name "get_portfolio" says "get": a word for reading.
    Description, as the server wrote it
    Full portfolio summary across all wallets: token balances with USD values, 24h change, and total net worth.
  • get_provisioning_jobPoll a bulk provisioning job (treasury + keys:manage + wallets:read).No findings

    Why it is in this group

    • The name "get_provisioning_job" says "get": a word for reading.
    Description, as the server wrote it
    Poll a bulk provisioning job (treasury + keys:manage + wallets:read). bearerKey appears once when secretsDelivery is revealed.
  • get_strategyGet one strategy with its last 20 runs (each run lists the orders it placed and their result).No findings

    Why it is in this group

    • The name "get_strategy" says "get": a word for reading.
    Description, as the server wrote it
    Get one strategy with its last 20 runs (each run lists the orders it placed and their result).
  • get_swap_routing_guideReturns which swap/bridge tool to use for a given from→to chain pair, with notes on protocols supported.No findings

    Why it is in this group

    • The name "get_swap_routing_guide" says "get": a word for reading.
    Description, as the server wrote it
    Returns which swap/bridge tool to use for a given from→to chain pair, with notes on protocols supported.
  • get_token_chartFetch a compact Zerion chart summary plus deterministic EMA, RSI, MACD, Bollinger, return, max-drawdown, and data-quality analysis.No findings

    Why it is in this group

    • The name "get_token_chart" says "get": a word for reading.
    Description, as the server wrote it
    Fetch a compact Zerion chart summary plus deterministic EMA, RSI, MACD, Bollinger, return, max-drawdown, and data-quality analysis. Raw points are omitted by default; set includePoints:true only for visual charting or external analysis. Discontinuous pre-migration/launch samples are excluded from TA.
  • get_treasury_contextWho am I?1 finding

    Why it is in this group

    • The name "get_treasury_context" says "get": a word for reading.

    Findings

    • Info

      The description mentions "credential".

      Matched text

      description: "...am I? Returns treasury email, user id, credential kind/scopes, vault summary, and policy..."

      What this check looks for
    Description, as the server wrote it
    Who am I? Returns treasury email, user id, credential kind/scopes, vault summary, and policy limits for this API key. Call first to confirm you are on the correct account before money-moving tools.
  • get_usage_balanceMonthly UpTo product balance: cap, used, remaining, and period bounds.No findings

    Why it is in this group

    • The name "get_usage_balance" says "get": a word for reading.
    Description, as the server wrote it
    Monthly UpTo product balance: cap, used, remaining, and period bounds. Billable writes consume this pool; unused budget is refunded at period end.
  • get_yield_market_detailEvidence for one Morpho vault: current net APY/TVL, historical APY and TVL series, period statistics, quality flags, allocation, instant-withdrawal liquidity, separated eligibility…No findings

    Why it is in this group

    • The name "get_yield_market_detail" says "get": a word for reading.
    Description, as the server wrote it
    Evidence for one Morpho vault: current net APY/TVL, historical APY and TVL series, period statistics, quality flags, allocation, instant-withdrawal liquidity, separated eligibility/readiness status, and timestamp. Rank on evidence.apy.medianPercent: the raw series contains upstream artifacts (points above 3000% APY) so averagePercent is filtered and medianPercent is the robust level. Check evidence.liquidity.redeemableUsd before sizing, since vaults typically run near 90% utilization and only unborrowed supply can be withdrawn on demand. Use before recommending or proposing a deposit.
  • list_activity_reportTreasury activity timeline (JSON) for reconciliation: normalized labels, USD hints, vault scope, and categories.No findings

    Why it is in this group

    • The name "list_activity_report" says "list": a word for reading.
    Description, as the server wrote it
    Treasury activity timeline (JSON) for reconciliation: normalized labels, USD hints, vault scope, and categories. Optional walletId narrows to one vault. Requires reporting:read (or account:read).
  • list_audit_logRecent account activity: transfers, swaps, security events.No findings

    Why it is in this group

    • The name "list_audit_log" says "list": a word for reading.
    Description, as the server wrote it
    Recent account activity: transfers, swaps, security events. Optional walletId filters to one vault's history. Pass cursor (from a previous page's nextCursor, even as an empty string on the first call) to switch the response to { items, nextCursor } and page back through full history instead of only the most recent entries.
  • list_copy_trade_leadersTop Hyperliquid accounts by profit over a window (week, month, allTime), from Hyperliquid's public leaderboard.No findings

    Why it is in this group

    • The name "list_copy_trade_leaders" says "list": a word for reading.
    Description, as the server wrote it
    Top Hyperliquid accounts by profit over a window (week, month, allTime), from Hyperliquid's public leaderboard. Only accounts over $25k that traded this month and are profitable all-time. Use get_copy_trade_wallet before copying one.
  • list_cosigner_membershipsActive co-signers on this account.No findings

    Why it is in this group

    • The name "list_cosigner_memberships" says "list": a word for reading.
    Description, as the server wrote it
    Active co-signers on this account.
  • list_funding_wallet_agentsList all FortFi agent accounts funded by the same payment wallet as this agent.No findings

    Why it is in this group

    • The name "list_funding_wallet_agents" says "list": a word for reading.
    Description, as the server wrote it
    List all FortFi agent accounts funded by the same payment wallet as this agent. Use to discover agentLabel / userId when renewing or spawning siblings (treasury multi-agent setups).
  • list_governance_requestsList open governance requests on this account: pending (awaiting signature) and legacy scheduled rows.No findings

    Why it is in this group

    • The name "list_governance_requests" says "list": a word for reading.
    Description, as the server wrote it
    List open governance requests on this account: pending (awaiting signature) and legacy scheduled rows. Use to monitor for unexpected loosening attempts.
  • list_hyperliquid_marketsList Hyperliquid perpetual markets with live mark/mid/oracle prices, funding, open interest, and 24h volume.No findings

    Why it is in this group

    • The name "list_hyperliquid_markets" says "list": a word for reading.
    Description, as the server wrote it
    List Hyperliquid perpetual markets with live mark/mid/oracle prices, funding, open interest, and 24h volume. Public data; no proposal.
  • list_hyperliquid_open_ordersList resting Hyperliquid orders including SL/TP triggers for a wallet.No findings

    Why it is in this group

    • The name "list_hyperliquid_open_orders" says "list": a word for reading.
    Description, as the server wrote it
    List resting Hyperliquid orders including SL/TP triggers for a wallet.
  • list_hyperliquid_outcome_marketsList Hyperliquid HIP-4 outcome markets on the same account as perps.No findings

    Why it is in this group

    • The name "list_hyperliquid_outcome_markets" says "list": a word for reading.
    Description, as the server wrote it
    List Hyperliquid HIP-4 outcome markets on the same account as perps. Prices are quote-micro (650000 = $0.65) from exchange mids. volumeUsd is 0 because outcomeMeta does not publish volume.
  • list_hyperliquid_positionsList open Hyperliquid perp positions and margin summary for a hyperliquid-mainnet wallet (its address is used on the L1 order book).No findings

    Why it is in this group

    • The name "list_hyperliquid_positions" says "list": a word for reading.
    Description, as the server wrote it
    List open Hyperliquid perp positions and margin summary for a hyperliquid-mainnet wallet (its address is used on the L1 order book).
  • list_hyperliquid_symbol_masterSecurity master for Hyperliquid perps: symbol, dex, desk label, short symbol, display name, asset class (crypto/equity/commodity/fx/index/pre_ipo), plus live volume and funding.No findings

    Why it is in this group

    • The name "list_hyperliquid_symbol_master" says "list": a word for reading.
    Description, as the server wrote it
    Security master for Hyperliquid perps: symbol, dex, desk label, short symbol, display name, asset class (crypto/equity/commodity/fx/index/pre_ipo), plus live volume and funding. Default scope=core; pass scope=all for HIP-3.
  • list_incoming_cosigner_invitesList pending co-signer invites sent TO this account (where this account is the invitee).No findings

    Why it is in this group

    • The name "list_incoming_cosigner_invites" says "list": a word for reading.
    Description, as the server wrote it
    List pending co-signer invites sent TO this account (where this account is the invitee). Use to discover accounts you can become a co-signer for.
  • list_merchant_webhook_deliveriesList webhook delivery log.No findings

    Why it is in this group

    • The name "list_merchant_webhook_deliveries" says "list": a word for reading.
    Description, as the server wrote it
    List webhook delivery log. Use status=failed for dead-letter queue rows. Filter by paymentRequestId to find deliveries for one checkout.
  • list_merchant_webhooksList registered webhook endpoints (secrets are never returned).No findings

    Why it is in this group

    • The name "list_merchant_webhooks" says "list": a word for reading.
    Description, as the server wrote it
    List registered webhook endpoints (secrets are never returned).
  • list_payment_productsList persistent product checkout links for the account.No findings

    Why it is in this group

    • The name "list_payment_products" says "list": a word for reading.
    Description, as the server wrote it
    List persistent product checkout links for the account.
  • list_payment_purchasesBuyer view: FortFi checkouts your vaults paid (what you bought).No findings

    Why it is in this group

    • The name "list_payment_purchases" says "list": a word for reading.
    Description, as the server wrote it
    Buyer view: FortFi checkouts your vaults paid (what you bought). Matches settlements by payer wallet address across your fleet.
  • list_payment_requestsList payment requests for the authenticated account.No findings

    Why it is in this group

    • The name "list_payment_requests" says "list": a word for reading.
    Description, as the server wrote it
    List payment requests for the authenticated account.
  • list_payment_salesMerchant view: paid and partially paid invoices on your collection vaults (what you sold).No findings

    Why it is in this group

    • The name "list_payment_sales" says "list": a word for reading.
    Description, as the server wrote it
    Merchant view: paid and partially paid invoices on your collection vaults (what you sold). Includes payer, method, and settlement details.
  • list_pending_cosigner_approvalsPending actions that require this account's co-signer approval.No findings

    Why it is in this group

    • The name "list_pending_cosigner_approvals" says "list": a word for reading.
    Description, as the server wrote it
    Pending actions that require this account's co-signer approval. Use when this agent is a co-signer on another account.
  • list_polymarket_marketsList active Polymarket prediction markets on Polygon with volume, liquidity, and outcome prices.No findings

    Why it is in this group

    • The name "list_polymarket_markets" says "list": a word for reading.
    Description, as the server wrote it
    List active Polymarket prediction markets on Polygon with volume, liquidity, and outcome prices.
  • list_polymarket_positionsList Polymarket outcome token positions for a Polygon wallet.No findings

    Why it is in this group

    • The name "list_polymarket_positions" says "list": a word for reading.
    Description, as the server wrote it
    List Polymarket outcome token positions for a Polygon wallet. walletId is required.
  • list_recipientsList all allowlisted recipients.No findings

    Why it is in this group

    • The name "list_recipients" says "list": a word for reading.
    Description, as the server wrote it
    List all allowlisted recipients. Includes cooldown status: `cooldownActive: true` means the recipient cannot yet receive funds (24-hour gate).
  • list_strategiesList strategies running on your Hyperliquid accounts (presets and copy trades): status, leverage, cap, next rebalance, and whether an API key started it.No findings

    Why it is in this group

    • The name "list_strategies" says "list": a word for reading.
    Description, as the server wrote it
    List strategies running on your Hyperliquid accounts (presets and copy trades): status, leverage, cap, next rebalance, and whether an API key started it. Stopped strategies are hidden unless includeStopped is true.
  • list_strategy_presetsList FortFi autonomous Hyperliquid strategies (house presets) with their published backtest: out-of-sample return, Sharpe and drawdown at 1x, walk-forward windows, every leverage s…No findings

    Why it is in this group

    • The name "list_strategy_presets" says "list": a word for reading.
    Description, as the server wrote it
    List FortFi autonomous Hyperliquid strategies (house presets) with their published backtest: out-of-sample return, Sharpe and drawdown at 1x, walk-forward windows, every leverage scenario, tested leverage (start_strategy accepts these), high-risk leverage (owner passkey only), and the minimum account size per leverage. Read-only.
  • list_token_spender_grantsList active ERC-20 token approvals (spender grants) on this account.No findings

    Why it is in this group

    • The name "list_token_spender_grants" says "list": a word for reading.
    Description, as the server wrote it
    List active ERC-20 token approvals (spender grants) on this account. Useful before proposing a swap to confirm the CoW vault is approved.
  • list_walletsList FortFi wallets for this account: chain, address, nickname, metadata tags, and default flag.No findings

    Why it is in this group

    • The name "list_wallets" says "list": a word for reading.
    Description, as the server wrote it
    List FortFi wallets for this account: chain, address, nickname, metadata tags, and default flag. Optional metadataKey/metadataValue filter (exact match). Pass cursor and/or limit to page through large fleets — response becomes { items, nextCursor } when either is set; omit both for the plain array of all wallets.
  • list_yield_positionsActive Morpho yield positions with per-vault valueUsd, earnedUsd (Morpho pnlUsd), netApy, and a summary block.No findings

    Why it is in this group

    • The name "list_yield_positions" says "list": a word for reading.
    Description, as the server wrote it
    Active Morpho yield positions with per-vault valueUsd, earnedUsd (Morpho pnlUsd), netApy, and a summary block. summary.cumulativeEarnedUsd matches Morpho pnl on the open vaults when the ledger cannot explain the balance. A deposit missing from the ledger is principal, not earnings. Use at the start of every yield desk run to report standing P&L.
  • plan_rebalanceRead-only rebalance planner toward target weights.No findings

    Why it is in this group

    • The description's first verb is "read": a word for reading.
    Description, as the server wrote it
    Read-only rebalance planner toward target weights. Returns suggested legs (swap, yield_deposit, yield_withdraw) without executing. Use propose_* + confirm_proposal to act.
  • preview_bridge_quoteOptional advanced step: fetch a cross-chain bridge quote (Fusion+ or deBridge) and return previewQuoteId.No findings

    Why it is in this group

    • The name "preview_bridge_quote" says "preview": a word for reading.
    Description, as the server wrote it
    Optional advanced step: fetch a cross-chain bridge quote (Fusion+ or deBridge) and return previewQuoteId. Omit previewQuoteId on propose_bridge to bundle quote+proposal in one call.
  • preview_swap_quoteOptional advanced step: fetch a same-chain swap quote (CoW on EVM, Jupiter on Solana) and return previewQuoteId.No findings

    Why it is in this group

    • The name "preview_swap_quote" says "preview": a word for reading.
    Description, as the server wrote it
    Optional advanced step: fetch a same-chain swap quote (CoW on EVM, Jupiter on Solana) and return previewQuoteId. Omit previewQuoteId on propose_* to bundle quote+proposal in one call. Does not execute or move funds.
  • review_portfolioRead-only treasury review: allocation buckets (cash, yield, tokens), top holdings, and optional drift vs target weights.No findings

    Why it is in this group

    • The description's first verb is "read": a word for reading.
    Description, as the server wrote it
    Read-only treasury review: allocation buckets (cash, yield, tokens), top holdings, and optional drift vs target weights. Safe for cron — no proposals created.
  • search_credentialsParent-treasury key-centric credential search (treasury credential + keys:manage + wallets:read).1 finding

    Why it is in this group

    • The name "search_credentials" says "search": a word for reading.

    Findings

    • Info

      The description mentions "credential".

      Matched text

      description: "Parent-treasury key-centric credential search (treasury credential + keys:mana..."

      What this check looks for
    Description, as the server wrote it
    Parent-treasury key-centric credential search (treasury credential + keys:manage + wallets:read). Complements search_vaults. Never returns raw bearer keys.
  • search_polymarket_marketsSearch Polymarket markets by question text.No findings

    Why it is in this group

    • The name "search_polymarket_markets" says "search": a word for reading.
    Description, as the server wrote it
    Search Polymarket markets by question text.
  • search_vaultsParent-treasury vault inventory search (treasury credential + keys:manage + wallets:read).3 findings

    Why it is in this group

    • The name "search_vaults" says "search": a word for reading.

    Findings

    • Info

      The description mentions "credential".

      Matched text

      description: "...easury vault inventory search (treasury credential + keys:manage + wallets:read). Matches..."

      What this check looks for
    • Info

      The input schema at properties.credentialAccess.description mentions "credential".

      Matched text

      inputSchema.properties.credentialAccess.description: "Filter by linked credential access mode"

      What this check looks for
    • Info

      The input schema at properties.credentialStatus.description mentions "credential".

      Matched text

      inputSchema.properties.credentialStatus.description: "Filter by linked credential status"

      What this check looks for
    Description, as the server wrote it
    Parent-treasury vault inventory search (treasury credential + keys:manage + wallets:read). Matches nicknames, wallet IDs, addresses, external customer IDs, credential names, and prefixes. Never returns raw bearer keys.
  • validate_payout_manifestPreview batch payroll/payout (max 50 lines).No findings

    Why it is in this group

    • The name "validate_payout_manifest" says "validate": a word for reading.
    Description, as the server wrote it
    Preview batch payroll/payout (max 50 lines). Each line: { recipientId, amountUsdc, memo? }. All recipients must be allowlisted, same chain as fromWalletId, and past cooldown.
  • validate_recipient_manifestPreview a batch recipient import (max 50 rows).No findings

    Why it is in this group

    • The name "validate_recipient_manifest" says "validate": a word for reading.
    Description, as the server wrote it
    Preview a batch recipient import (max 50 rows). Each row: { address, chainId, nickname? }. Returns ready_new, already_exists, or invalid per line. Read-only.

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.0.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http fortfi-treasury https://fortfiapp.com/api/mcp --header 'Authorization: <your-authorization>'

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__fortfi-treasury__get_mcp_guide",
      "mcp__fortfi-treasury__get_treasury_context",
      "mcp__fortfi-treasury__list_wallets",
      "mcp__fortfi-treasury__list_recipients",
      "mcp__fortfi-treasury__list_audit_log",
      "mcp__fortfi-treasury__list_activity_report",
      "mcp__fortfi-treasury__get_fusion_order_status",
      "mcp__fortfi-treasury__get_policy_limits",
      "mcp__fortfi-treasury__get_usage_balance",
      "mcp__fortfi-treasury__list_funding_wallet_agents",
      "mcp__fortfi-treasury__list_cosigner_memberships",
      "mcp__fortfi-treasury__get_cosigner_rules",
      "mcp__fortfi-treasury__list_pending_cosigner_approvals",
      "mcp__fortfi-treasury__validate_recipient_manifest",
      "mcp__fortfi-treasury__validate_payout_manifest",
      "mcp__fortfi-treasury__get_portfolio",
      "mcp__fortfi-treasury__get_account_holdings",
      "mcp__fortfi-treasury__review_portfolio",
      "mcp__fortfi-treasury__plan_rebalance",
      "mcp__fortfi-treasury__get_token_chart",
      "mcp__fortfi-treasury__get_swap_routing_guide",
      "mcp__fortfi-treasury__list_token_spender_grants",
      "mcp__fortfi-treasury__list_incoming_cosigner_invites",
      "mcp__fortfi-treasury__list_governance_requests",
      "mcp__fortfi-treasury__preview_swap_quote",
      "mcp__fortfi-treasury__preview_bridge_quote",
      "mcp__fortfi-treasury__list_yield_positions",
      "mcp__fortfi-treasury__get_yield_market_detail",
      "mcp__fortfi-treasury__list_polymarket_markets",
      "mcp__fortfi-treasury__search_polymarket_markets",
      "mcp__fortfi-treasury__get_polymarket_market",
      "mcp__fortfi-treasury__list_polymarket_positions",
      "mcp__fortfi-treasury__list_hyperliquid_markets",
      "mcp__fortfi-treasury__get_hyperliquid_market",
      "mcp__fortfi-treasury__list_hyperliquid_symbol_master",
      "mcp__fortfi-treasury__get_hyperliquid_cross_section",
      "mcp__fortfi-treasury__get_hyperliquid_research_data_stats",
      "mcp__fortfi-treasury__list_strategy_presets",
      "mcp__fortfi-treasury__list_strategies",
      "mcp__fortfi-treasury__get_strategy",
      "mcp__fortfi-treasury__list_copy_trade_leaders",
      "mcp__fortfi-treasury__get_copy_trade_wallet",
      "mcp__fortfi-treasury__list_hyperliquid_positions",
      "mcp__fortfi-treasury__get_hyperliquid_balances",
      "mcp__fortfi-treasury__get_hyperliquid_trading_desk",
      "mcp__fortfi-treasury__list_hyperliquid_open_orders",
      "mcp__fortfi-treasury__get_hyperliquid_user_fills",
      "mcp__fortfi-treasury__list_hyperliquid_outcome_markets",
      "mcp__fortfi-treasury__get_hyperliquid_outcome_market",
      "mcp__fortfi-treasury__get_payment_request",
      "mcp__fortfi-treasury__list_payment_requests",
      "mcp__fortfi-treasury__list_payment_sales",
      "mcp__fortfi-treasury__list_payment_purchases",
      "mcp__fortfi-treasury__list_payment_products",
      "mcp__fortfi-treasury__get_payment_product",
      "mcp__fortfi-treasury__list_merchant_webhooks",
      "mcp__fortfi-treasury__list_merchant_webhook_deliveries",
      "mcp__fortfi-treasury__search_vaults",
      "mcp__fortfi-treasury__search_credentials",
      "mcp__fortfi-treasury__get_provisioning_job"
    ],
    "ask": [
      "mcp__fortfi-treasury__resend_claim_link",
      "mcp__fortfi-treasury__update_cosigner_rules",
      "mcp__fortfi-treasury__add_recipient",
      "mcp__fortfi-treasury__approve_recipient",
      "mcp__fortfi-treasury__propose_recipient_manifest",
      "mcp__fortfi-treasury__propose_payout_manifest",
      "mcp__fortfi-treasury__propose_transfer",
      "mcp__fortfi-treasury__invite_agent_cosigner",
      "mcp__fortfi-treasury__invite_cosigner",
      "mcp__fortfi-treasury__approve_cosigner_action",
      "mcp__fortfi-treasury__reject_cosigner_action",
      "mcp__fortfi-treasury__discover_tokens",
      "mcp__fortfi-treasury__screen_tokens",
      "mcp__fortfi-treasury__rank_tokens",
      "mcp__fortfi-treasury__accept_cosigner_invite",
      "mcp__fortfi-treasury__register_backup_governance_wallet",
      "mcp__fortfi-treasury__propose_rename_account",
      "mcp__fortfi-treasury__propose_create_account",
      "mcp__fortfi-treasury__confirm_proposal",
      "mcp__fortfi-treasury__update_wallet_metadata",
      "mcp__fortfi-treasury__check_trade_allowance",
      "mcp__fortfi-treasury__propose_token_approve",
      "mcp__fortfi-treasury__propose_swap",
      "mcp__fortfi-treasury__propose_solana_swap",
      "mcp__fortfi-treasury__propose_bridge",
      "mcp__fortfi-treasury__list_yield_markets",
      "mcp__fortfi-treasury__rank_yield_markets",
      "mcp__fortfi-treasury__propose_yield_deposit",
      "mcp__fortfi-treasury__propose_yield_withdraw",
      "mcp__fortfi-treasury__rank_polymarket_markets",
      "mcp__fortfi-treasury__propose_polymarket_buy",
      "mcp__fortfi-treasury__propose_polymarket_sell",
      "mcp__fortfi-treasury__propose_polymarket_redeem",
      "mcp__fortfi-treasury__rank_hyperliquid_markets",
      "mcp__fortfi-treasury__screen_hyperliquid_markets",
      "mcp__fortfi-treasury__run_hyperliquid_research_backtest",
      "mcp__fortfi-treasury__run_hyperliquid_research_backtest_spec",
      "mcp__fortfi-treasury__start_strategy",
      "mcp__fortfi-treasury__start_copy_trade",
      "mcp__fortfi-treasury__update_strategy",
      "mcp__fortfi-treasury__pause_strategy",
      "mcp__fortfi-treasury__resume_strategy",
      "mcp__fortfi-treasury__stop_strategy",
      "mcp__fortfi-treasury__rebalance_strategy_now",
      "mcp__fortfi-treasury__propose_hyperliquid_perp_open",
      "mcp__fortfi-treasury__propose_hyperliquid_perp_close",
      "mcp__fortfi-treasury__propose_hyperliquid_perp_modify",
      "mcp__fortfi-treasury__propose_hyperliquid_deposit",
      "mcp__fortfi-treasury__propose_hyperliquid_withdraw",
      "mcp__fortfi-treasury__propose_hyperliquid_spot_to_perp",
      "mcp__fortfi-treasury__propose_hyperliquid_send_asset",
      "mcp__fortfi-treasury__propose_hyperliquid_outcome_order",
      "mcp__fortfi-treasury__create_checkout_session",
      "mcp__fortfi-treasury__create_payment_request",
      "mcp__fortfi-treasury__extend_payment_request",
      "mcp__fortfi-treasury__pay_payment_request_x402",
      "mcp__fortfi-treasury__create_payment_product",
      "mcp__fortfi-treasury__create_merchant_webhook",
      "mcp__fortfi-treasury__replay_merchant_webhook_delivery",
      "mcp__fortfi-treasury__send_merchant_webhook_test",
      "mcp__fortfi-treasury__create_vault_credential",
      "mcp__fortfi-treasury__update_vault_credential",
      "mcp__fortfi-treasury__create_provisioning_job",
      "mcp__fortfi-treasury__create_customer"
    ],
    "deny": [
      "mcp__fortfi-treasury__remove_recipient",
      "mcp__fortfi-treasury__remove_cosigner",
      "mcp__fortfi-treasury__remove_backup_governance_wallet",
      "mcp__fortfi-treasury__cancel_governance_change",
      "mcp__fortfi-treasury__revoke_cosigner_invite",
      "mcp__fortfi-treasury__cancel_pending_action",
      "mcp__fortfi-treasury__cancel_hyperliquid_orders",
      "mcp__fortfi-treasury__cancel_payment_request",
      "mcp__fortfi-treasury__revoke_vault_credential"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as fortfi-treasury. Review it before you use it.