fibx
OfficialThis server provides an AI-agent-accessible DeFi operations toolkit for managing wallets, swapping tokens, and interacting with Aave across Base, Citrea, HyperEVM, and Monad.
Check authentication status and Fibrous API health before performing transactions.
Manage per-chain RPC configuration: set, get, reset, or list custom RPC URLs.
View wallet balances for native and ERC-20 tokens on any supported chain.
Send native tokens or ERC-20 tokens to any address, with optional simulate-only preview.
Query transaction status and receipt details by transaction hash.
View a cross-chain portfolio with USD valuations, including Aave positions and net worth.
Get token swap quotes without needing a wallet or session.
Execute token swaps through Fibrous aggregation with slippage control and optional simulation.
Inspect Aave V3 account health and reserve markets on Base.
Perform Aave supply, borrow, repay, and withdraw actions, including ETH/WETH auto-wrap/unwrap and 'max' amounts.
FibX
A command-line tool and MCP server for DeFi operations on Base, HyperEVM, and Monad, powered by Fibrous aggregation. Sign with your own wallet over WalletConnect, with a Privy server wallet, or with an imported key — every path bounded by a signing policy that lives on your machine.
Features
Multi-Chain Support: Base, HyperEVM, and Monad
Portfolio: Cross-chain portfolio overview with USD valuations and DeFi positions
Token Swaps: Optimal routing via Fibrous aggregation with auto-slippage
Transfers: Send ETH or any ERC-20 token
Aave V3: Supply, borrow, repay, withdraw, and browse markets on Base
MCP Server: Built-in AI agent integration for Cursor, Claude Desktop, and Antigravity (19 tools)
The FibX app, in the chat: in hosts that render MCP Apps UI such as Claude Desktop,
open_fibxshows the wallet, balances, signing policy and a swap form with the Fibrous route inline — the model opens it, and you press Simulate and SwapAgent Skills: Prompt-based AI skills via fibx-skills
Your own wallet: Pair over WalletConnect and approve every transaction on your phone
Privy Server Wallets: Server-side signing — the CLI receives signed transaction payloads or signatures, not Privy app credentials or raw keys
Private Key Import: Use an existing wallet with AES-256-GCM encrypted local storage
Local signing policy: A file you own — native value cap per chain, allowed chains, allowed destinations, expiry — enforced before every signature on all three paths (Privy adds its own server-side policy on top)
Preflight Checks: Transaction flows validate or estimate execution where the underlying RPC supports it
Dry‑Run Mode:
--simulatepreviews write operations without broadcasting; gas estimates are included where availableJSON Output:
--jsonflag for scripting and pipelinesZero-Dependency Install: Single-file bundle via tsup —
npx fibxruns near-instantly
Related MCP server: agentfi-mcp-server
Supported Chains
Chain | Native Token | Aave V3 |
Base | ETH | ✅ |
HyperEVM | HYPE | — |
Monad | MON | — |
Installation
Run directly with npx (no install needed):
npx fibx statusOr install globally:
npm install -g fibxRequirements
Node.js >= 18
A running fibx-server instance (required for Privy wallet operations; not needed for private key imports)
Quick Start — First Swap in 3 Minutes
Step 1: Get a Price Quote (no auth needed)
Try FibX instantly — no sign-up, no wallet, no keys:
npx fibx quote 0.01 ETH USDC # Check price on Base
npx fibx quote 100 USDC DAI --chain base # Compare pairs
npx fibx quote 0.5 MON USDC --chain monad # Check Monad pricesStep 2: Authenticate (pick one)
Option A — Email Login (Privy Server Wallet, no keys to manage):
npx fibx auth login you@email.com # Sends OTP to your email
npx fibx auth verify you@email.com 123456 # Verify & create walletOption B — Import Private Key (use an existing wallet):
npx fibx auth import # Paste your key (encrypted at rest)Step 3: Execute
npx fibx trade 0.01 ETH USDC # Execute the swap
npx fibx balance # Check your balancesThat's it. Three steps from zero to first swap.
Usage
Choosing how FibX signs
Run fibx auth setup and it will ask. The three paths differ on one thing:
Path | Key held by | Runs while you are away | Bounded by |
| your own wallet | no | you, on your phone |
| Privy | yes | Privy's signing policy |
| this machine | yes | the local policy you set |
Keeping your own wallet and having FibX act unattended needs ERC-7715, which
wallets do not yet expose over WalletConnect. fibx auth setup explains the
closest options.
Security: When using
auth import, your private key is encrypted at rest with AES-256-GCM. The encryption key is auto-generated per machine and stored in the OS config directory (e.g.~/.config/fibx-nodejs/encryption-keyon Linux). You can also set theFIBX_SESSION_SECRETenvironment variable for CI/Docker environments.
Connect your own wallet
npx fibx auth connectPairs FibX with a wallet you already have — MetaMask, Rabby, Rainbow, Phantom — over WalletConnect. A QR code appears in the terminal; scan it with your phone. Every transaction is then approved in your wallet, so the keys never leave it.
The chain you trade on must already be in your wallet, and it is approved when
you pair. If you try to sign on a chain the session does not carry, FibX stops
before contacting the wallet and names the chain: add it in your wallet, then run
npx fibx auth connect again so the new chain is included.
With --json, output is NDJSON — one JSON document per line, not one document
for the whole run: the pairing URI prints first as {"uri":"wc:..."} so a
script can act on it while it waits, then the result prints as its own compact
JSON line once the wallet approves.
npx fibx auth logout ends the connection on both sides: it tells your wallet to
drop the session, so FibX stops appearing in its connected-apps list, and removes
the pairing keys from disk along with the session.
A shared WalletConnect project id ships in the published bundle, so this works
with no setup. It is public by necessity — a CLI has no origin to allowlist — so
its only real exposure is quota consumed by third parties. If pairing starts
failing on quota, create a free project at
cloud.reown.com and set FIBX_WC_PROJECT_ID to your
own id.
auth login (email OTP) and auth import (private key) are unchanged and remain
available.
Signing policy
fibx policy bounds what FibX is allowed to sign, on top of whichever path
from the table above holds the key — a client-side cap evaluated before every
local-key, Privy, or WalletConnect transaction:
npx fibx policy show # Print the active policy
npx fibx policy set base.maxValue 0.05
npx fibx policy set allowedChains base,monad
npx fibx policy set base.allowedDestinations 0xYourColdWallet,0xTheRouter
npx fibx policy set expiry 2026-12-31 # UTC midnight starting that day
npx fibx policy clear base.maxValue # Remove one rule
npx fibx policy clear # Remove the whole policy (asks first)A local policy guarding a local key is advisory: anything that can read the key can edit the policy, so this is worth nothing against malware. What it does bound is the agent — a model that misbehaves, or a prompt injection telling it to.
Know what each rule bounds, because they are not the same:
maxValuecaps the native value of a single transaction — ETH on Base, HYPE on HyperEVM, MON on Monad. It does not bound tokens. An ERC-20 transfer reaches the policy as a call to the token's contract carryingvalue: 0, so the amount is invisible to it:base.maxValue 0.05places no limit onfibx send 50000 USDC 0xsomewhere, on the token side of a trade, or on an Aave borrow. A token-value cap needs decimals and a token registry, and is not in this release.allowedDestinationsis the rule that bounds tokens, by bounding where anything may go. It is the one to set if the worry is an agent moving your holdings somewhere. Note that allowlisting a token's contract so a trade can approve it also permits transfers of that token.allowedChainsandexpirydo exactly what they say. A lapsed or unparseable policy refuses everything rather than permitting it.
Global Options
Option | Description | Default |
| Target chain ( |
|
| Output results as JSON |
|
Balance
npx fibx balance
npx fibx balance --chain hyperevmPortfolio
Consolidated cross-chain portfolio view with USD valuations:
npx fibx portfolio # Table output across all chains
npx fibx portfolio --json # Structured JSON for scriptingShows all token holdings across Base, HyperEVM, and Monad with USD values. Includes DeFi positions (Aave V3 collateral/debt) and total portfolio net worth. Token prices are sourced live from Fibrous.
Send
npx fibx send 0.001 0xRecipient # Send native token on Base (ETH)
npx fibx send 10 0xRecipient USDC # Send ERC-20 on Base
npx fibx send 1 0xRecipient --chain monad # Send MON on Monad
npx fibx send 0.1 0xRecipient --simulate # Preview without sendingQuote
Get swap prices without authentication:
npx fibx quote 0.01 ETH USDC # Price check on Base
npx fibx quote 1 MON USDC --chain monad # Check Monad prices
npx fibx quote 0.1 ETH USDC --json # JSON output for scriptsNo wallet or authentication required. Use
quoteto explore prices, thentradeto execute.
Swap
npx fibx trade <amount> <from> <to>
npx fibx trade 0.0001 ETH USDC
npx fibx trade 20 USDC DAI
npx fibx trade 1 MON USDC --chain monad
npx fibx trade 0.1 ETH USDC --simulate # Preview without broadcastingOptions: --slippage <n> (default: 0.5%), --approve-max, --simulate, --json
Note: The
tradecommand automatically detects Wrap (Native -> Wrapped) and Unwrap (Wrapped -> Native) operations and executes them directly via contract calls, bypassing aggregator routing to save gas.
Transaction Status
npx fibx tx-status <hash>
npx fibx tx-status 0x123...abc --chain monadWallet Info
npx fibx address # Print active wallet address
npx fibx wallets # Show active wallet detailsAave V3 (Base)
npx fibx aave status # Account health
npx fibx aave markets # List all active reserves with APY & TVL
npx fibx aave supply 1 ETH # Auto-wraps ETH -> WETH and supplies
npx fibx aave supply 100 USDC # Supply ERC-20
npx fibx aave borrow 50 USDC # Borrow
npx fibx aave repay 50 USDC # Repay
npx fibx aave repay max ETH # Auto-wraps ETH and repays full WETH debt
npx fibx aave withdraw max ETH # Withdraws WETH and auto-unwraps to ETH
npx fibx aave supply 1 ETH --simulate # Preview without broadcastingNote:
supply,repay, andwithdrawsupport automatic ETH <-> WETH wrapping/unwrapping on Base.
Configuration
Set custom RPC URLs to avoid rate limits on public endpoints:
npx fibx config set-rpc base https://mainnet.base.org
npx fibx config get-rpc base
npx fibx config reset-rpc base # Reset single chain to default
npx fibx config reset-rpc # Reset all chains to default
npx fibx config listHot-reload: Config changes are picked up automatically — no need to restart the CLI or MCP server.
AI Agent Integration
MCP Server
fibx includes a built-in MCP server for AI editors like Cursor, Claude Desktop, and Antigravity. See MCP.md for setup and available tools.
npx fibx mcp-startThe MCP server exposes 19 tools: the FibX app (open_fibx, list_tokens), read-only queries, three transactional tools, and session and policy management. All write operations support a simulate=true preview that does not broadcast; gas estimates are returned only where available.
In a host that renders MCP Apps UI — Claude Desktop today — open_fibx is the entry point: ask about your wallet, a balance, a price or a swap and the whole app opens inline, pre-filled from the conversation. It executes nothing on its own; Simulate and Swap are buttons you press. In a text-only host the same call returns a JSON snapshot the model can summarise, and the headless tools do the rest.
Agent Skills
For prompt-based agent integration (Claude Code, Cursor, etc.), see the fibx-skills repository.
Security
Letting an AI agent operate a wallet requires controls outside the model. fibx combines signing-layer policies, server-side validation, client hints, and explicit previews. These controls reduce risk, but the server credentials, MCP client configuration, and deployment policy remain part of the trust boundary:
Layer | What it does |
Privy signing policy | The default policy allowlists configured chains, caps each transaction's native-token |
fibx-server schemas |
|
MCP tool annotations | Every transactional tool advertises |
Simulation |
|
Local key storage | Imported private keys are encrypted at rest with AES-256-GCM using a per-machine key stored |
Wallet policy limits are configured per deployment — see the fibx-server wallet policy docs.
Note: policies are attached when a wallet is created. Wallets provisioned before policies were introduced keep signing without them until migrated.
Architecture
This repository is the CLI and MCP server. Three sibling repositories complete the stack:
Repository | Role |
fibx (this repo) | CLI + stdio MCP server, shipped as a single dependency-free bundle |
Hono backend that proxies Privy — holds the app secret so the CLI never does, and owns the wallet signing policy | |
Prompt-based Agent Skills for Claude Code, Cursor, and other skill-aware agents | |
Telegram bot that drives this CLI over MCP, with one process and separate config paths per active user |
src/
├── commands/ # CLI commands (auth, policy, trade, send, aave, config)
├── mcp/ # Modular MCP server
│ ├── server.ts # Entry point + MCP_INSTRUCTIONS
│ ├── ui.ts # The ui://fibx/app.html resource (the built widget, inlined)
│ ├── tools/ # Tool registrations (app, auth, wallet, trade, defi, policy)
│ └── handlers/ # Tool implementations
├── services/ # Business logic (chain, fibrous, auth, policy, walletconnect, defi, portfolio)
└── lib/ # Shared utilities (errors, fetch, format, crypto)
ui/
├── src/ # The FibX app widget — Preact, one document, no network
└── dev-host/ # A local MCP Apps host for the widget: fixtures, or a bridge to the real serverThe widget is built by Vite into a single HTML document and embedded in
dist/index.js by tsup, so the published package is still one file with no
runtime dependencies.
Development
pnpm install
pnpm dev # run the CLI from source
pnpm test # vitest unit tests
pnpm typecheck # tsc --noEmit
pnpm lint # eslint
pnpm format:check # prettier
pnpm build # vite (the app widget) then tsup, to dist/
pnpm dev:ui # the app widget in a local host, against fixtures — no wallet neededpnpm dev:ui:bridge runs the same host against the real MCP server; a Swap
there is a real swap.
Related Links
Fibrous Finance — DEX aggregator powering swaps
MCP registry listing —
finance.fibrous/fibx
License
Available Tools
19 toolsaave_actionAave V3 ActionADestructive
Execute an Aave V3 action on Base: supply, borrow, repay, or withdraw. ETH supply/repay can auto-wrap and ETH withdraw can auto-unwrap; borrowing the ETH market returns WETH. Use 'max' as amount to repay or withdraw the full balance. Set simulate=true for a no-broadcast operation preview.
Inputs: token (required), action (required), amount (required), simulate.
clear_policy_ruleRemove a Signing Policy RuleADestructive
Remove one rule from the local signing policy with rule, or remove the whole policy with all: true. Removing everything leaves nothing limiting what this wallet will sign. Exactly one of rule or all must be given — a call naming neither or both is rejected.
Inputs: all, rule.
config_actionManage RPC ConfigurationA
View and modify fibx RPC configuration. Use 'set-rpc' to set a custom RPC URL for a chain (helps avoid rate limits), 'get-rpc' to view the current RPC for a chain, 'reset-rpc' to reset a chain's RPC to default (omit chain to reset all), or 'list' to show all custom RPC settings.
Inputs: action (required), url, chain.
connect_walletConnect an External WalletA
Start a WalletConnect pairing so the user can sign with their own wallet (MetaMask, Rabby, Rainbow, Phantom). Returns a URI and a QR image immediately — show the QR to the user, then poll get_connect_status until it reports connected.
Inputs: no named parameters.
get_aave_marketsAave V3 MarketsARead-only
List all Aave V3 reserve markets on Base with supply/borrow APY, total supply, total borrow, and LTV. Always call this before Aave supply/borrow operations. No wallet required.
Inputs: no named parameters.
get_aave_statusAave V3 Account StatusARead-only
Get Aave V3 position health on Base: health factor, total collateral, total debt, and available borrows in USD.
Inputs: no named parameters.
get_auth_statusCheck Auth & Fibrous StatusARead-only
Check authentication status and Fibrous API health. open_fibx already returns this as its auth field; call this on its own only when you need the session state and nothing else, or before a transactional tool you are calling yourself.
Inputs: chain.
get_balanceGet Wallet BalanceARead-only
Get native token and all ERC-20 token balances for the active wallet on a specific chain. Only returns tokens with non-zero balances.
Inputs: chain.
get_connect_statusCheck Wallet ConnectionARead-only
Poll a pairing started by connect_wallet. Returns pending, connected, failed, or unknown.
Inputs: pairingId (required).
get_policyRead the Signing PolicyARead-only
Read the local signing policy that bounds every transaction fibx signs. Returns active with its rules, absent when nothing is set, or unreadable when a file is present but cannot be parsed — which refuses everything.
Inputs: no named parameters.
get_portfolioCross-Chain PortfolioARead-only
Get a complete cross-chain portfolio overview with USD valuations for all token holdings across Base, HyperEVM, and Monad. Includes DeFi positions (Aave V3). Returns total net worth.
Inputs: no named parameters.
get_quoteGet Swap QuoteARead-onlyIdempotent
Get a price quote for a token swap without authentication. Shows expected output amount, exchange rate, and route info. No wallet or session required — use this to check prices before committing to a swap. Supported chains: Base, HyperEVM, Monad. Returns both a readable summary and a quote object carrying the route's hops, the exact output, the slippage floor and a derived price impact — computed from the tokens' spot prices, not reported by the router, so treat it as an estimate. In a host that renders UI, prefer open_fibx, which shows the route and lets the user swap from it.
Inputs: amount (required), to_token (required), from_token (required), chain, +1 more.
get_tx_statusGet Transaction StatusARead-only
Check the on-chain status and receipt of a transaction by its hash. Returns confirmation status, block number, gas used, and addresses.
Inputs: hash (required), chain.
list_tokensList TokensARead-onlyIdempotent
List the tokens Fibrous supports on a chain, with symbol, name, address, decimals and USD price where known.
Inputs: chain.
logoutEnd the SessionADestructive
Log out: end any WalletConnect pairing and clear the local session. The user will need to authenticate again before signing anything.
Inputs: no named parameters.
open_fibxOpen FibXARead-onlyIdempotent
Open the FibX app: wallet, balances, signing policy, and a swap form with the Fibrous route. Call this FIRST for anything about the wallet, a balance, a quote, or a swap — it returns the session, balances, policy and quote in one snapshot, so get_auth_status, get_balance, get_policy and get_quote are not needed before it. It executes nothing; where the host renders MCP Apps UI the user sees the app and presses Simulate and Swap themselves. Pass from/to/amount to open it pre-filled with a quote. Supported chains: Base, HyperEVM, Monad. If the host does not render UI, the result is still a complete JSON snapshot you can read and summarise.
Inputs: to, from, chain, amount, +1 more.
send_tokensSend TokensADestructive
Send native tokens (ETH, cBTC, HYPE, MON) or ERC-20 tokens to a recipient address. If token is omitted, the chain's native token is used. Set simulate=true for a no-broadcast preview; a gas estimate is returned where available.
Inputs: amount (required), recipient (required), chain, token, +1 more.
set_policy_ruleSet a Signing Policy RuleADestructive
Set one rule on the local signing policy. Rules: expiry, allowedChains, .maxValue, .allowedDestinations. Lists are comma-separated. maxValue caps the native value of one transaction and does not bound token amounts — an ERC-20 transfer carries value 0 — so use allowedDestinations to bound where tokens may go.
Inputs: rule (required), value (required).
swap_tokensSwap Tokens via FibrousADestructive
Swap tokens using Fibrous aggregator for optimal routing. Handles ERC-20 approvals and wrap/unwrap automatically. Supported chains: Base, HyperEVM, Monad. Set simulate=true for a no-broadcast preview; a gas estimate is returned where it can be calculated safely.
Inputs: amount (required), to_token (required), from_token (required), chain, +2 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 19 tools
Several tools overlap: get_auth_status, get_connect_status and open_fibx all return session state; get_balance and get_portfolio both return holdings; get_quote duplicates what open_fibx returns. Descriptions explicitly referee these cases ('call this only when...', 'not needed before open_fibx'), which rescues the set from outright ambiguity, but an agent must still read carefully to pick correctly.
Most tools follow a clean verb_noun pattern (get_balance, send_tokens, swap_tokens, set_policy_rule, clear_policy_rule, connect_wallet). A few deviate: aave_action and config_action are noun_action dispatchers, and logout is a bare verb. Minor, readable inconsistency rather than chaos.
19 tools spans several sub-domains (wallet, auth/pairing, Aave, swaps, policy, RPC config), so the breadth is earned, but it sits at the heavy end. Several tools (get_auth_status, get_policy, get_quote) are explicitly redundant when open_fibx is used, suggesting some consolidation was possible.
Strong lifecycle coverage: wallet connect/poll/logout, send/swap with simulation, full Aave supply/borrow/repay/withdraw plus markets and health, and policy get/set/clear. Gaps are modest — no ERC-20 approval inspection/revocation and no transaction history — but agents can work around these.
Maintenance
Related MCP Connectors
Best-route swap quotes, token search and USD prices across EVM chains. Read-only, never trades.
Swap quotes + unsigned txs on 8 EVM chains, plus Solana data: boards, candles, wallet PnL. No key.
Free non-custodial EVM swap & bridge quotes with unsigned tx; 0.25% disclosed fee on swaps
Gasless MEV-protected swaps + cross-chain quotes across EVM chains — incl. tokenized stocks.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceProvides tools for multi-chain DeFi operations using the Fibrous SDK, enabling AI agents to find swap routes, build transactions, and execute swaps across Base, Starknet, and Scroll networks.1MIT
- AlicenseAqualityBmaintenanceDeFi execution and agent-to-agent economy tools for AI agents — swaps, yield, transfers, policy enforcement, trust scoring, A2A jobs, and P\&L across Ethereum, Base, Arbitrum, and Polygon.311Apache 2.0
- AlicenseNot gradedqualityCmaintenanceDeFi execution layer for AI agents - swap, zap in/out of LP, route across AMMs on 5 EVM chains.91 npm7MIT
- AlicenseNot gradedqualityCmaintenanceEnables users and agents to obtain MEV-protected multichain swap and cross-chain bridge quotes, check supported chains, and generate prefilled swap URLs, with gasless Permit2 execution and x402 or API-key access.163 npmMIT