FortFi Treasury MCP
REMOTE · FORTFIAPP.COM
Policy-gated MCP treasury for AI agents — x402 subscribe, 50+ tools, multi-chain.
Available components
Last scanned (8 hours ago)
Scores higher than 44% of remote servers
Reachable. Last reached 5 Nov 2026.
Category Finance and Payments
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security66
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation not fully verified: no authorisation is required to call this server, and 139 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe. See how to fix → View diagnostics → Unverified
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability68
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 15209 tokens (~109/item across 139 items; 139 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management3
- Stability observed for 1 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage93
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 78% of tool parameters carry a description.Partial
Tool Safety75
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 0 of 12 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "remove_recipient" implies "remove" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
- An AI judge read all 139 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities20
- Spec-recency check failed: implements MCP spec 2024-11-05; the latest is 2026-07-28. See how to fix → Fail
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 5 Nov 26 0
- Stability: unverified → 0.03 ▲ functional
- New tool “get_hyperliquid_order_book” functional
- New tool “get_hyperliquid_predicted_funding” functional
- “update_strategy” added an optional parameter “autoStops” cosmetic
- 4 Nov 26 +26
- Injection markers: unverified → pass ▲ security
- First check of Judged manipulation: pass security
- Authorization: Authorisation not fully verified: no authorisation is required to call this server, and 137 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe. security
- Tool “approve_recipient” rewrote its description, which is the text the model reads security
- Tool “get_policy_limits” rewrote its description, which is the text the model reads security
- Tool “get_yield_market_detail” rewrote its description, which is the text the model reads security
- Tool “list_audit_log” rewrote its description, which is the text the model reads security
- Tool “list_wallets” rewrote its description, which is the text the model reads security
- Tool “list_yield_positions” rewrote its description, which is the text the model reads security
- Tool “propose_bridge” rewrote its description, which is the text the model reads security
- Tool “propose_token_approve” rewrote its description, which is the text the model reads security
- Tool “propose_transfer” rewrote its description, which is the text the model reads security
- Tool “rank_yield_markets” rewrote its description, which is the text the model reads security
- Tool “update_wallet_metadata” rewrote its description, which is the text the model reads security
- MCP protocol: unverified → fail ▼ functional
- Schema quality: pass → fail ▼ functional
- Endpoint reachability: not serving MCP → reachable ▲ functional
- Tool coverage: unverified → 100 ▲ functional
- First check of Destructive annotations: 0 functional
- New tool “cancel_hyperliquid_orders” functional
- New tool “create_checkout_session” functional
- New tool “create_customer” functional
- New tool “create_merchant_webhook” functional
- New tool “create_payment_product” functional
- New tool “get_copy_trade_wallet” functional
- New tool “get_hyperliquid_balances” functional
- New tool “get_hyperliquid_cross_section” functional
- New tool “get_hyperliquid_history” functional
- New tool “get_hyperliquid_market” functional
- New tool “get_hyperliquid_outcome_market” functional
- New tool “get_hyperliquid_research_data_stats” functional
- New tool “get_hyperliquid_trading_desk” functional
- New tool “get_hyperliquid_user_fills” functional
- New tool “get_payment_product” functional
- New tool “get_polymarket_market” functional
- New tool “get_strategy” functional
- New tool “get_treasury_context” functional
- New tool “get_usage_balance” functional
- New tool “get_wallet_loss_cap” functional
- New tool “get_wallet_scoreboard” functional
- New tool “list_activity_report” functional
- New tool “list_copy_trade_leaders” functional
- New tool “list_hyperliquid_markets” functional
- New tool “list_hyperliquid_open_orders” functional
- New tool “list_hyperliquid_outcome_markets” functional
- New tool “list_hyperliquid_positions” functional
- New tool “list_hyperliquid_symbol_master” functional
- New tool “list_merchant_webhook_deliveries” functional
- New tool “list_merchant_webhooks” functional
- New tool “list_payment_products” functional
- New tool “list_payment_purchases” functional
- New tool “list_payment_sales” functional
- New tool “list_polymarket_markets” functional
- New tool “list_polymarket_positions” functional
- New tool “list_strategies” functional
- New tool “list_strategy_presets” functional
- New tool “pause_strategy” functional
- New tool “pay_payment_request_x402” functional
- New tool “propose_hyperliquid_deposit” functional
- New tool “propose_hyperliquid_outcome_order” functional
- New tool “propose_hyperliquid_perp_close” functional
- New tool “propose_hyperliquid_perp_modify” functional
- New tool “propose_hyperliquid_perp_open” functional
- New tool “propose_hyperliquid_send_asset” functional
- New tool “propose_hyperliquid_spot_to_perp” functional
- New tool “propose_hyperliquid_withdraw” functional
- New tool “propose_polymarket_buy” functional
- New tool “propose_polymarket_redeem” functional
- New tool “propose_polymarket_sell” functional
- New tool “rank_hyperliquid_markets” functional
- New tool “rank_polymarket_markets” functional
- New tool “rebalance_strategy_now” functional
- New tool “replay_merchant_webhook_delivery” functional
- New tool “resume_strategy” functional
- New tool “run_hyperliquid_research_backtest” functional
- New tool “run_hyperliquid_research_backtest_spec” functional
- New tool “screen_hyperliquid_markets” functional
- New tool “search_polymarket_markets” functional
- New tool “send_merchant_webhook_test” functional
- New tool “set_wallet_loss_cap” functional
- New tool “start_copy_trade” functional
- New tool “start_strategy” functional
- New tool “stop_strategy” functional
- New tool “update_strategy” functional
- “add_recipient” added an optional parameter “fromWalletId” cosmetic
- “list_audit_log” added an optional parameter “cursor” cosmetic
- “list_audit_log” added an optional parameter “view” cosmetic
- “list_audit_log” added an optional parameter “walletId” cosmetic
- “list_wallets” added an optional parameter “cursor” cosmetic
- “list_wallets” added an optional parameter “limit” cosmetic
- “propose_transfer” added an optional parameter “networkChainId” cosmetic
- “propose_transfer” added an optional parameter “paymentRequestPid” cosmetic
- “propose_transfer” reworded the description of “amountUsdc” cosmetic
- “add_recipient” reworded the description of “chainId” cosmetic
- “propose_create_account” reworded the description of “chainId” cosmetic
- “propose_transfer” reworded the description of “recipientId” cosmetic
- “propose_transfer” made “amountUsdc” optional cosmetic
- “propose_transfer” made “recipientId” optional cosmetic
- 3 Nov 26 +1
- DNSSEC: fail → pass ▲ security
- 28 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 25 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 26 Aug 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 11 Aug 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 7 Aug 26 0
- Endpoint reachability: reachable → not serving MCP ▼ security
- Stability: 0.30 → unverified ▼ security
- Authorization: Authorisation not fully verified: no authorisation is required to connect, but we couldn't read the whole tool list to see what that exposes. security
- Capabilities: fail → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Probed https://fortfiapp.com/api/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=fortfiapp.com | CN=YE1,O=Let's Encrypt,C=US | 23 Sept 2026 | 22 Dec 2026 | ECDSA 256 | ECDSA-SHA384 | 5b47055fa1f80935b7b139be7982227214f |
| SANs: *.fortfiapp.com, fortfiapp.com | ||||||
| CN=YE1,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 5ddd70dd31f801c85c186a7a04b80afe |
| CN=Root YE,O=ISRG,C=US (CA) | CN=ISRG Root X2,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | ECDSA-SHA384 | 872165fc34b6e5fba8add5b3705fb53a |
| CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | SHA256-RSA | 6c8f1dc727c7117f7baf853ac980f9cd |
Background: What to check on a remote MCP endpoint →
DNSSEC secure
Validation of fortfiapp.com. — Secure
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| fortfiapp.com. | present | 2371 | 13 | Verified |
| fortfiapp.com. | Verified address RRset verified with the apex keys |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=63072000; includeSubDomains; preload |
| x-content-type-options | nosniff |
| x-frame-options | DENY |
| referrer-policy | strict-origin-when-cross-origin |
| permissions-policy | camera=*, microphone=*, accelerometer=*, gyroscope=*, payment=*, geolocation=() |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://fortfiapp.com/api/mcp | Verified | 200 | |
| http (plaintext) | http://fortfiapp.com/api/mcp | HTTPS enforced | 301 | https://fortfiapp.com/api/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
propose_swap ~224
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.
| Name | Type | Req | Description |
|---|---|---|---|
| amountUsd | string | yes | Sell amount in USD |
| buySymbol | string | yes | Human-readable symbol of buy token, e.g. ETH |
| buyTokenAddress | string | yes | Token contract address to buy (0x…) |
| fromWalletId | string | yes | Source wallet id (must be EVM, CoW-supported chain) |
| previewQuoteId | string | – | Optional — from preview_swap_quote for explicit quote review before propose |
| sellSymbol | string | yes | Human-readable symbol of sell token, e.g. USDC |
| sellTokenAddress | string | yes | Token contract address to sell (0x…) |
| slippagePercent | number | – | Optional slippage tolerance 0–50 (default 0.5) |
No output schema declared.
No examples provided.
propose_token_approve ~97
Propose max ERC-20 approval for CoW or Fusion spenders. Returns proposalId: call confirm_proposal before swap/bridge. API keys on a passkey account cannot approve the Fusion (bridge) spender: fusion_bridge returns OWNER_PASSKEY_REQUIRED.
| Name | Type | Req | Description |
|---|---|---|---|
| flow | string | yes | – |
| fromWalletId | string | yes | EVM wallet id |
| tokenAddress | string | yes | Token to approve (0x…) |
No output schema declared.
No examples provided.
propose_transfer ~249
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).
| Name | Type | Req | Description |
|---|---|---|---|
| amountUsdc | string | – | Amount in USDC as a decimal string, e.g. '5.00'. Required for recipient sends; optional for invoice pay (defaults to remaining balance). |
| fromWalletId | string | yes | Source wallet id from list_wallets |
| memo | string | – | Optional transfer note (max 256 chars) |
| networkChainId | string | – | Optional. Send from the same EVM address on another supported mainnet (e.g. 'arbitrum-mainnet' for USDC withdrawn from Hyperliquid). Recipient must be allowlisted on that network. Omit to use the wal… |
| paymentRequestPid | string | – | Public invoice pid from checkout URL — pays merchant vault with pid-bound settlement |
| recipientId | string | – | Allowlisted recipient id (omit when using paymentRequestPid) |
No output schema declared.
No examples provided.
propose_yield_deposit ~121
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.
| Name | Type | Req | Description |
|---|---|---|---|
| amountUsd | string | yes | USDC amount e.g. 100.00 |
| assetSymbol | string | – | – |
| fromAccountQuery | string | – | Wallet nickname (alternative to fromWalletId) |
| fromWalletId | string | – | FortFi wallet id |
| vaultAddress | string | yes | Morpho vault contract (0x…) |
No output schema declared.
No examples provided.
propose_yield_withdraw ~95
Propose Morpho vault withdraw, then call confirm_proposal. With Delegated Access this executes server-side when policy permits. Use list_yield_positions for vaultAddress.
| Name | Type | Req | Description |
|---|---|---|---|
| amountDisplay | string | yes | – |
| assetSymbol | string | – | – |
| fromAccountQuery | string | – | – |
| fromWalletId | string | – | – |
| vaultAddress | string | yes | – |
| vaultName | string | – | – |
No output schema declared.
No examples provided.
rank_hyperliquid_markets ~154
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.
| Name | Type | Req | Description |
|---|---|---|---|
| assetClass | – | – | Filter asset classes. Comma-separated string or array. |
| dex | – | – | Filter dex ids. Comma-separated string or array. |
| direction | string | – | Default desc |
| includeAllDesks | boolean | – | When true, same as scope=all |
| limit | number | – | Default 20 |
| scope | string | – | Default core |
| sort | string | – | Default volume |
No output schema declared.
No examples provided.
rank_polymarket_markets ~43
Rank Polymarket markets by volume, liquidity, or 24h volume.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | – |
| sortBy | string | – | – |
No output schema declared.
No examples provided.
rank_tokens ~237
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.
| Name | Type | Req | Description |
|---|---|---|---|
| candidateLimit | number | – | Override merged candidate cap, max 100 |
| chains | array | yes | – |
| chartCandidateLimit | number | – | Override chart cap, max 20 |
| deepOptIn | boolean | – | Required when mode=deep |
| includeUnverified | boolean | – | Default false |
| minMarketCapUsd | number | – | Default 5000000 |
| minVolume1dUsd | number | – | Default 50000 |
| mode | string | – | – |
| periods | array | – | – |
| sorts | array | – | Defaults to gainers_30d + volume_1d. Optional supplements: gainers_1d, gainers_90d, gainers_365d, market_cap. |
| verifiedOnly | boolean | – | Default true |
No output schema declared.
No examples provided.
rank_yield_markets ~196
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.
| Name | Type | Req | Description |
|---|---|---|---|
| apyDays | number | – | Default 30 |
| asset | string | – | Asset symbol, default USDC |
| chainId | string | – | FortFi chain id or all |
| limit | number | – | Default 10, max 25 |
| minTvlUsd | number | – | Default 500000 |
| tvlDays | number | – | Default 90 |
No output schema declared.
No examples provided.
rebalance_strategy_now ~44
Run a strategy's rebalance now instead of waiting for its schedule. Returns the run outcome.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
| walletId | string | yes | – |
No output schema declared.
No examples provided.
register_backup_governance_wallet ~121
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.
| Name | Type | Req | Description |
|---|---|---|---|
| challengeId | string | – | Governance challengeId from the first call |
| walletAddress | string | yes | The backup wallet address (0x…) to register |
| walletSignature | string | – | CURRENT funding-wallet signature over the challenge message |
No output schema declared.
No examples provided.
reject_cosigner_action ~38
Reject a pending action as co-signer.
| Name | Type | Req | Description |
|---|---|---|---|
| pendingApprovalId | string | yes | – |
| reason | string | – | Optional rejection reason |
No output schema declared.
No examples provided.
remove_backup_governance_wallet ~80
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.
| Name | Type | Req | Description |
|---|---|---|---|
| challengeId | string | – | Governance challengeId from the first call |
| walletSignature | string | – | Funding-wallet signature over the challenge message |
No output schema declared.
No examples provided.
remove_cosigner ~100
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.
| Name | Type | Req | Description |
|---|---|---|---|
| challengeId | string | – | Governance challengeId from the first call |
| membershipId | string | yes | Membership id from list_cosigner_memberships |
| walletSignature | string | – | Funding-wallet signature over the challenge message |
No output schema declared.
No examples provided.
remove_recipient ~67
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.
| Name | Type | Req | Description |
|---|---|---|---|
| recipientId | string | yes | Recipient id from list_recipients |
No output schema declared.
No examples provided.
replay_merchant_webhook_delivery ~61
Replay a dead-lettered or failed webhook delivery after fixing your endpoint. Re-sends the same event id and body for idempotent handlers.
| Name | Type | Req | Description |
|---|---|---|---|
| deliveryId | string | yes | Delivery row id from list_merchant_webhook_deliveries |
No output schema declared.
No examples provided.
resend_claim_link ~52
Resend the dashboard claim email to contactEmail (MCP agent API key only; keys:manage scope). Use when the original link expired (72h) or was lost. Rate limit: 3/hour.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
resume_strategy ~47
Resume a paused strategy. An API key can only resume a strategy it started; others need the owner in the app.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
| walletId | string | yes | – |
No output schema declared.
No examples provided.
review_portfolio ~120
Read-only treasury review: allocation buckets (cash, yield, tokens), top holdings, and optional drift vs target weights. Safe for cron — no proposals created.
| Name | Type | Req | Description |
|---|---|---|---|
| driftThresholdPercent | number | – | Hysteresis band in percentage points (default 5) |
| minLegUsd | number | – | Minimum USD for rebalance legs (default 1) |
| targets | array | – | Optional target allocation. Each row: { label, weightPercent, kind: cash|yield|token|symbol, symbol? }. Weights must sum to 100. |
No output schema declared.
No examples provided.
revoke_cosigner_invite ~40
Revoke a pending outbound co-signer invite before it is accepted.
| Name | Type | Req | Description |
|---|---|---|---|
| inviteId | string | yes | Invite id from the invite you sent |
No output schema declared.
No examples provided.
revoke_vault_credential ~44
Revoke a vault-scoped credential (treasury + keys:manage). Idempotent if already revoked.
| Name | Type | Req | Description |
|---|---|---|---|
| credentialId | string | yes | Vault credential id |
No output schema declared.
No examples provided.
run_hyperliquid_research_backtest ~235
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).
| Name | Type | Req | Description |
|---|---|---|---|
| coins | array | – | Optional fixed symbol list (e.g. BTC, ETH). Omit for volume-filtered universe |
| holdBars | number | – | Hold period in bars. Default 24 |
| interval | string | – | Candle interval in research DB. Default 1h |
| legsPerSide | number | – | Long/short leg count. Default 6 |
| lookbackBars | number | – | Trailing return lookback. Default 336 on 1h (~14d) |
| minDayVolumeUsd | number | – | Universe liquidity floor when coins omitted. Default 1000000 |
| oosFraction | number | – | Out-of-sample tail fraction. Default 0.35 |
| strategy | string | – | Default momentum_cross |
No output schema declared.
No examples provided.
run_hyperliquid_research_backtest_spec ~243
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.
| Name | Type | Req | Description |
|---|---|---|---|
| presetId | string | – | House preset id. Returns the spec plus published stats. |
| prod | boolean | – | Use production Supabase (default false in dev) |
| rerun | boolean | – | With presetId, rerun the preset spec live instead of returning published stats |
| spec | object | – | Strategy Spec: name, universe {dex, minDayVolumeUsd, includeCoins, excludeCoins, maxSymbols}, interval, signal {type rank|pattern, factor|pattern, params}, portfolio, costs, validation |
No output schema declared.
No examples provided.
screen_hyperliquid_markets ~233
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.
| Name | Type | Req | Description |
|---|---|---|---|
| assetClass | – | – | Filter asset classes. Comma-separated string or array. |
| chartLimit | number | – | TA depth, default 10 |
| dex | – | – | Filter dex ids. Comma-separated string or array. |
| direction | string | – | desc=gainers, asc=losers/short ideas |
| includeAllDesks | boolean | – | When true, same as scope=all |
| includeCharts | boolean | – | – |
| indicators | array | – | – |
| interval | string | – | Default 1h |
| limit | number | – | Default 40 |
| minDayVolumeUsd | number | – | Default 1000000 |
| scope | string | – | Default core |
| sideBias | string | – | – |
| sort | string | – | Default pctChange |
No output schema declared.
No examples provided.
screen_tokens ~207
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.
| Name | Type | Req | Description |
|---|---|---|---|
| candidateLimit | number | – | Override merged candidate cap, max 100 |
| chains | array | yes | – |
| deepOptIn | boolean | – | Required when mode=deep |
| includeUnverified | boolean | – | Default false; unverified results are labeled and need execution opt-in |
| minMarketCapUsd | number | – | Default 5000000 |
| minVolume1dUsd | number | – | Default 50000 |
| mode | string | – | – |
| sorts | array | – | Defaults to gainers_30d + volume_1d. Add gainers_1d, gainers_90d, gainers_365d, or market_cap when requested. |
| verifiedOnly | boolean | – | Default true |
No output schema declared.
No examples provided.
search_credentials ~156
Parent-treasury key-centric credential search (treasury credential + keys:manage + wallets:read). Complements search_vaults. Never returns raw bearer keys.
| Name | Type | Req | Description |
|---|---|---|---|
| access | string | – | – |
| credentialKind | string | – | – |
| cursor | string | – | Pagination cursor |
| externalCustomerId | string | – | Exact external customer id |
| limit | number | – | Page size (default 50, max 100) |
| metadataKey | string | – | Exact metadata key (requires metadataValue) |
| metadataValue | string | – | Exact metadata value (requires metadataKey) |
| query | string | – | Free-text search |
| status | string | – | – |
| walletId | string | – | Filter by vault wallet id |
No output schema declared.
No examples provided.
search_polymarket_markets ~37
Search Polymarket markets by question text.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | – |
| query | string | yes | Search text |
No output schema declared.
No examples provided.
search_vaults ~175
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.
| Name | Type | Req | Description |
|---|---|---|---|
| chainId | string | – | Exact chain filter |
| credentialAccess | string | – | Filter by linked credential access mode |
| credentialStatus | string | – | Filter by linked credential status |
| cursor | string | – | Pagination cursor from prior response |
| externalCustomerId | string | – | Exact external customer id |
| limit | number | – | Page size (default 50, max 100) |
| metadataKey | string | – | Exact metadata key (requires metadataValue) |
| metadataValue | string | – | Exact metadata value (requires metadataKey) |
| query | string | – | Free-text search |
No output schema declared.
No examples provided.
send_merchant_webhook_test ~30
Send a signed webhook.test event to an endpoint.
| Name | Type | Req | Description |
|---|---|---|---|
| endpointId | string | yes | – |
No output schema declared.
No examples provided.
set_wallet_loss_cap ~158
Add a loss cap to a Hyperliquid wallet, or lower the one it has. If the wallet loses maxLossPct from the balance at the moment the cap is set, FortFi cancels its open orders, closes its positions and blocks new trades on it until the owner resets the cap in the app. An API key can only add or tighten a cap: raising, removing or resetting it needs the owner's passkey in the app. The cap is also measured from when it is set, so set it before trading.
| Name | Type | Req | Description |
|---|---|---|---|
| maxLossPct | number | yes | Max loss in percent of the balance when set, 1 to 90 (whole numbers) |
| walletId | string | yes | hyperliquid-mainnet wallet id |
No output schema declared.
No examples provided.
start_copy_trade ~276
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. Leverage cap 1 or 2; 3 and 5 are high risk and need acceptHighRisk: true. Same rails, caps and key re-checks as start_strategy.
| Name | Type | Req | Description |
|---|---|---|---|
| acceptHighRisk | boolean | – | Required for a 3x or 5x cap: you accept it can lose most of the money in this wallet. |
| address | string | yes | 0x address to copy |
| leverage | number | yes | Leverage cap: 1, 2, 3 or 5 (3 and 5 need acceptHighRisk) |
| maxAllocationUsd | string | – | Optional cap on equity used, e.g. "500" |
| maxLossPct | integer | – | Optional loss cap, whole percent (1-90). If the strategy's P&L since start falls this far below the money it runs on, FortFi stops it and closes its positions. Checked every 5 minutes. |
| walletId | string | yes | hyperliquid-mainnet wallet id |
No output schema declared.
No examples provided.
start_strategy ~263
Start a house preset on a hyperliquid-mainnet wallet and place its first orders. Leverage must be one of the preset's testedLeverage or highRiskLeverage levels; high-risk levels need acceptHighRisk: true. 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.
| Name | Type | Req | Description |
|---|---|---|---|
| acceptHighRisk | boolean | – | Required for a highRiskLeverage level: you accept it can lose most of the money in this wallet. |
| leverage | number | yes | One of the preset's testedLeverage or highRiskLeverage levels |
| maxAllocationUsd | string | – | Optional cap on equity the strategy sizes against, e.g. "500" |
| maxLossPct | integer | – | Optional loss cap, whole percent (1-90). If the strategy's P&L since start falls this far below the money it runs on, FortFi stops it and closes its positions. Checked every 5 minutes. |
| presetId | string | yes | From list_strategy_presets |
| walletId | string | yes | hyperliquid-mainnet wallet id |
No output schema declared.
No examples provided.
stop_strategy ~45
Stop a strategy and close every position it opened (cash out). Positions it did not open are left alone.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
| walletId | string | yes | – |
No output schema declared.
No examples provided.
update_cosigner_rules ~138
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).
| Name | Type | Req | Description |
|---|---|---|---|
| challengeId | string | – | Governance challengeId (only needed when weakening rules) |
| rules | array | yes | – |
| walletSignature | string | – | Funding-wallet signature over the challenge message |
No output schema declared.
No examples provided.
update_strategy ~204
Resize a strategy or copy trade: raise or lower its leverage (offered levels only) or allocation cap. Moving into a high-risk level needs acceptHighRisk: true. The loss cap can be added or lowered, never raised or removed (OWNER_PASSKEY_REQUIRED).
| Name | Type | Req | Description |
|---|---|---|---|
| acceptHighRisk | boolean | – | Required when the new leverage is a high-risk level you have not already accepted. |
| autoStops | boolean | – | Copy trades only: keep a full-size stop on every copied position (on by default). API keys may turn it on, never off. |
| id | string | yes | – |
| leverage | number | – | New leverage (higher or lower) |
| maxAllocationUsd | string | – | New allocation cap in USD (higher or lower), e.g. "800" |
| maxLossPct | integer | – | New loss cap, whole percent. API keys may add a cap or lower it, never raise or remove it. |
| walletId | string | yes | – |
No output schema declared.
No examples provided.
update_vault_credential ~94
Atomically replace a vault credential's name, access mode, grants, and expiry (treasury + keys:manage). Revoked credentials cannot be updated.
| Name | Type | Req | Description |
|---|---|---|---|
| access | string | yes | – |
| credentialId | string | yes | Vault credential id |
| expiresAt | string | – | ISO-8601 expiry, or null to clear |
| name | string | yes | – |
| vaultGrants | array | yes | – |
No output schema declared.
No examples provided.
update_wallet_metadata ~92
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.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | Wallet id from list_wallets |
| metadata | object | yes | Full metadata object, e.g. { "customer_id": "cust_123", "agent_id": "ag_1" } |
No output schema declared.
No examples provided.
validate_payout_manifest ~75
Preview batch payroll/payout (max 50 lines). Each line: { recipientId, amountUsdc, memo? }. All recipients must be allowlisted, same chain as fromWalletId, and past cooldown.
| Name | Type | Req | Description |
|---|---|---|---|
| fromWalletId | string | yes | Wallet id from list_wallets |
| lines | array | yes | – |
No output schema declared.
No examples provided.
validate_recipient_manifest ~55
Preview a batch recipient import (max 50 rows). Each row: { address, chainId, nickname? }. Returns ready_new, already_exists, or invalid per line. Read-only.
| Name | Type | Req | Description |
|---|---|---|---|
| recipients | array | yes | – |
No output schema declared.
No examples provided.
How do I install the FortFi Treasury MCP server?
FortFi Treasury MCP is a hosted endpoint at https://fortfiapp.com/api/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · fortfiapp.com
claude mcp add --transport http rebelartists-fortfi-treasury-mcp 'https://fortfiapp.com/api/mcp'
What is the FortFi Treasury MCP server?
FortFi Treasury MCP is listed in the public MCP registry as io.github.rebelArtists/fortfi-treasury-mcp. Policy-gated MCP treasury for AI agents, x402 subscribe, 50+ tools, multi-chain. This page covers its hosted endpoint (https://fortfiapp.com/api/mcp).
Is the FortFi Treasury MCP server safe to use?
FortFi Treasury MCP scores 62 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the FortFi Treasury MCP server expose?
FortFi Treasury MCP exposes 139 tools: get_mcp_guide, get_treasury_context, list_wallets, list_recipients, list_audit_log, and 134 more. Their descriptions and schemas cost roughly 15,209 tokens of context every time the server is loaded.
Does the FortFi Treasury MCP server require authentication?
No. We connected to FortFi Treasury MCP without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the FortFi Treasury MCP server still maintained?
FortFi Treasury MCP is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.