FortFi Treasury MCP
REMOTE · FORTFIAPP.COM · SCANNED SEP 20
Policy-gated MCP treasury for AI agents — x402 subscribe, 50+ tools, multi-chain.
Available components
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 Security63
- 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 connect, but we couldn't read the tool list to see what that exposes. 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 check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability0
- Schema not yet verified: we couldn't read the endpoint's schema.Unverified
Stability & Change Management0
- Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage0
- Tool coverage not yet verified: we couldn't read the endpoint's tools.Unverified
Tool Safety0
- Tool safety not yet verified: we couldn't read the endpoint's tools.Unverified
Capabilities0
- Capabilities not yet verified: we couldn't read the endpoint's capabilities.Unverified
Unverified: 5 categories
Categories scored 0 because we could not verify them: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm.
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'
{
"mcpServers": {
"rebelartists-fortfi-treasury-mcp": {
"url": "https://fortfiapp.com/api/mcp"
}
}
} {
"servers": {
"rebelartists-fortfi-treasury-mcp": {
"type": "http",
"url": "https://fortfiapp.com/api/mcp"
}
}
} [mcp_servers.rebelartists-fortfi-treasury-mcp] url = "https://fortfiapp.com/api/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"rebelartists-fortfi-treasury-mcp": {
"type": "remote",
"url": "https://fortfiapp.com/api/mcp",
"enabled": true
}
}
} openclaw mcp add rebelartists-fortfi-treasury-mcp --url 'https://fortfiapp.com/api/mcp' --transport streamable-http
mcp_servers:
rebelartists-fortfi-treasury-mcp:
url: "https://fortfiapp.com/api/mcp" {
"McpServers": {
"rebelartists-fortfi-treasury-mcp": {
"Transport": "http",
"Url": "https://fortfiapp.com/api/mcp"
}
}
} assistant mcp add rebelartists-fortfi-treasury-mcp -t streamable-http -u 'https://fortfiapp.com/api/mcp'
{
"mcpServers": {
"rebelartists-fortfi-treasury-mcp": {
"type": "http",
"url": "https://fortfiapp.com/api/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
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.
- 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 tool list to see what that exposes. security
- Capabilities: fail → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- 4 Aug 26 0
- Tool “discover_tokens” rewrote its description, which is the text the model reads security
- Tool “list_yield_markets” 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_create_account” rewrote its description, which is the text the model reads security
- Tool “propose_rename_account” 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_yield_deposit” rewrote its description, which is the text the model reads security
- Tool “propose_yield_withdraw” rewrote its description, which is the text the model reads security
- Schema quality: 86 → 95 ▼ functional
- New tool “confirm_proposal” functional
- New tool “get_fusion_order_status” functional
- New tool “get_token_chart” functional
- New tool “get_yield_market_detail” functional
- New tool “plan_rebalance” functional
- New tool “propose_payout_manifest” functional
- New tool “propose_recipient_manifest” functional
- New tool “rank_tokens” functional
- New tool “rank_yield_markets” functional
- New tool “review_portfolio” functional
- New tool “screen_tokens” functional
- New tool “validate_payout_manifest” functional
- New tool “validate_recipient_manifest” functional
- “discover_tokens” reworded the description of “sort” cosmetic
- “list_yield_markets” reworded the description of “minTvlUsd” cosmetic
- “propose_bridge” reworded the description of “buyTokenAddress” cosmetic
- “propose_bridge” reworded the description of “sellTokenAddress” cosmetic
- “propose_bridge” made “buyTokenAddress” optional cosmetic
- “propose_bridge” made “sellTokenAddress” optional cosmetic
- 31 Jul 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
- 30 Jul 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
- 29 Jul 26 0
- Stability: unverified → 0.03 ▲ functional
- 28 Jul 26 0
- Transport: fail → pass ▲ security
- Authorization: Authorisation not fully verified: no authorisation is required to call this server, and 59 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
- MCP protocol: unverified → fail ▼ functional
- Tool coverage: unverified → 100 ▲ functional
- First check of Schema quality: fail functional
- First check of Schema quality: pass functional
- First check of Schema quality: good functional
- First check of Tool coverage: 81 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 20 Sept 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=YE2,O=Let's Encrypt,C=US | 25 Jul 2026 | 23 Oct 2026 | ECDSA 256 | ECDSA-SHA384 | 68aa4096872883a481674d7ce83287368e3 |
| SANs: *.fortfiapp.com, fortfiapp.com | ||||||
| CN=YE2,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 4df3b15dd6c0784c507cd37b58e6f115 |
| 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 insecure
Validation of fortfiapp.com. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| fortfiapp.com. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
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_transfer ~130
Transfer USDC to an allowlisted recipient. The recipient must be approved (no active cooldown). Rejected with POLICY_LIMIT_EXCEEDED if above tier limits. Rejected with RECIPIENT_NOT_APPROVED if in cooldown.
| Name | Type | Req | Description |
|---|---|---|---|
| amountUsdc | string | yes | Amount in USDC as a decimal string, e.g. '5.00' for $5 USDC |
| fromWalletId | string | yes | Source wallet id from list_wallets |
| memo | string | – | Optional transfer note (max 256 chars) |
| recipientId | string | yes | Recipient id from list_recipients |
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_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 ~142
Batch-rank Morpho markets using current net APY, APY average/range/volatility, TVL trend/drawdown, vault age, curation, warnings, and current-user execution eligibility. 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.
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.
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.
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.
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_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.
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_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 ~79
Set metadata tags on a wallet (flat string key/value pairs; replaces existing tags). 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.
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 35 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 72 tools: get_mcp_guide, list_wallets, list_recipients, list_audit_log, get_fusion_order_status, and 67 more. Their descriptions and schemas cost roughly 6,841 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 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.