Fuse Network

by fuseio

626 downloads
Not rated
GitHub

About

MCP server for Fuse Network: balances, tokens, staking, DeFi data, swaps and on-chain transactions.

Details

Author
fuseio
Downloads
626
Categories
Finance, Other

- 50 tools across five categories: RPC reads, SDK reads, REST APIs, EOA writes, and smart‑account writes.
- RPC reads work without any API key; all other categories require one or more environment‑configured keys.
- Self‑hosted instance offers full write access; hosted endpoint is read‑only.
- Supports ERC‑4337 smart‑account UserOps, including gasless transactions via the Fuse paymaster.
- Private keys are only read from the environment at startup and never accepted as tool arguments.

Setting up with Highlight

This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:

  1. Download and install Highlight from highlightai.com/download
  2. Navigate to the plugins tab and select "Add Custom Plugin"
  3. Configure the plugin with the settings below
    Plugin Name Fuse Network
    Command (node, npx, python, etc.)

    Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.

  4. Enable "Start Automatically" if you want the plugin to start when Highlight launches

From the repository

The hosted endpoint is available at https://mcp.fuse.io/mcp using the Streamable HTTP transport. Point your MCP‑compatible agent at that URL – no setup beyond adding the server to the agent’s configuration. To enable write tools (e.g. sending transactions, deploying contracts), you must self‑host the server via Docker or node dist/index.js, setting the required environment variables (FUSE_PRIVATE_KEY, FUSEBOX_PUBLIC_API_KEY, etc.).

fuse_get_balance

Returns the native FUSE balance for an address, or an ERC-20 token balance when `tokenAddress` is supplied.

fuse_get_transaction

Fetches a transaction by hash. Returns null if the transaction is not found.

fuse_get_receipt

Fetches the receipt for a mined transaction (status, gasUsed, logs). Returns null if the transaction is pending or unknown.

fuse_read_contract

Calls a view/pure function on a Fuse contract. ABI is auto-fetched from the verified Fuse explorer when not supplied.

fuse_get_token_metadata

Reads name, symbol, decimals, and totalSupply for an ERC-20 token deployed on Fuse.

fuse_get_gas_price

Returns the current Fuse network gas price (in wei and gwei) along with EIP-1559 fee suggestions when available.

fuse_resolve_ens

Resolves an ENS name to its EVM address. ENS is not deployed on Fuse — resolution requires `ENS_RPC_URL` to be configured (typically pointing at Ethereum mainnet). Plain hex addresses are passed through.

fuse_get_account_abstraction_info

Reads ERC-4337 state for a smart account on Fuse: deployment status, EntryPoint nonce, and the account's deposit balance at the EntryPoint. Paymaster eligibility is not evaluated in v0.1.

fuse_list_wallet_tokens

Lists all ERC-20 tokens held by a wallet on Fuse, enriched with Fusebox metadata (symbol, decimals, USD value). Powered by the Fusebox SDK BalancesModule.

fuse_list_wallet_nfts

Lists all NFTs (ERC-721 / ERC-1155 collectibles) owned by a wallet on Fuse. Powered by the Fusebox SDK BalancesModule.

fuse_get_staking_options

Lists every staking option supported by Fuse — token, APR, TVL, expiry, and the matching unstake token. Powered by the Fusebox SDK StakingModule.

fuse_get_staked_tokens

Returns the active staking positions for a wallet — staked amount, USD value, earned rewards, and APR per position. Powered by the Fusebox SDK StakingModule.

fuse_get_token_price

Returns the current USD price for an ERC-20 token tracked by Fusebox. Powered by the Fusebox SDK TradeModule.

fuse_get_token_price_change

Returns the 24-hour percentage price change for an ERC-20 token tracked by Fusebox. Powered by the Fusebox SDK TradeModule.

fuse_get_token_price_history

Returns OHLC / interval price stats for an ERC-20 token over a week, month, or year. Powered by the Fusebox SDK TradeModule.

fuse_list_supported_tokens

Returns the catalogue of ERC-20 tokens tracked by Fusebox (tradable, indexed, priced). Powered by the Fusebox SDK TradeModule.

fuse_get_trade_quote

Quotes a token swap on Fuse — expected output amount, route, and price impact. Read-only: returns the quote without submitting a trade. Powered by the Fusebox SDK TradeModule.

fuse_get_user_operations

Returns the ERC-4337 UserOperation history for a smart account on Fuse, indexed via the Fusebox GraphQL service. Powered by the Fusebox SDK GraphQLModule.

fuse_notification_create_webhook

Create a Fusebox Notification webhook for a project. Requires `FUSEBOX_SECRET_API_KEY` (Notification API endpoints authenticate with both apiKey and API-SECRET).

fuse_notification_get_webhook

Retrieve details of a single Fusebox Notification webhook. Requires `FUSEBOX_SECRET_API_KEY`.

fuse_notification_list_project_webhooks

List every Fusebox Notification webhook configured for a given project. Requires `FUSEBOX_SECRET_API_KEY`.

fuse_notification_update_webhook

Update a Fusebox Notification webhook's URL or event type. Requires `FUSEBOX_SECRET_API_KEY`.

fuse_notification_delete_webhook

Permanently delete a Fusebox Notification webhook. Destructive — the webhook stops receiving events. Requires `FUSEBOX_SECRET_API_KEY`.

fuse_notification_add_addresses

Add one or more EVM addresses to a webhook's listening scope. Requires `FUSEBOX_SECRET_API_KEY`.

fuse_notification_remove_addresses

Remove EVM addresses from a webhook's listening scope. Requires `FUSEBOX_SECRET_API_KEY`.

fuse_notification_list_addresses

List every EVM address monitored by a given webhook. Requires `FUSEBOX_SECRET_API_KEY`.

fuse_smart_wallet_authenticate

Exchange an EIP-191 signature for a JWT used as Bearer auth on Smart Wallet API calls (e.g. `fuse_smart_wallet_get_actions`). Signing happens client-side; this tool only submits the signed payload.

fuse_smart_wallet_get_actions

List the paginated action history (transfers, contract calls) of an authenticated smart wallet. The JWT comes from `fuse_smart_wallet_authenticate`.

fuse_trade_indicative_price

Returns an indicative price + route for a swap on Fuse (0x-style response). One of `sellAmount` / `buyAmount` must be provided.

fuse_trade_liquidity_sources

Returns the liquidity sources currently enabled for Fuse-chain trades (e.g. voltage.finance, sub-pools).

fuse_trade_price_change_over_duration

Returns a token's price change over a custom day-count window (`{ priceChange, currentPrice, previousPrice }`).

fuse_explorer_query

Generic dispatcher for the Fusebox Explorer API (`/api/v0/explorer/`). Pass `module` + `action` + any additional query params. Covers all 40+ etherscan-compatible endpoints including balances, logs, transactions, contract ABI/source, and the five contract-verify POST routes.

fuse_get_signer_address

Returns the EOA address controlled by the server's configured `FUSE_PRIVATE_KEY`. Use this before any write tool to confirm which account will pay gas and send transactions.

fuse_send_native

Submits a signed transaction transferring native FUSE from the server's signer to a recipient. Returns the transaction hash; use `fuse_get_receipt` to confirm inclusion.

fuse_send_erc20

Submits a signed `ERC20.transfer(to, amount)` from the server's signer. Decimals are auto-fetched from the token; use `unit: "base"` to skip scaling.

fuse_write_contract

Signs and submits a state-mutating contract call from the server's signer. ABI is auto-fetched from the Fuse explorer when not supplied. Returns the transaction hash.

fuse_deploy_contract

Signs and submits a contract-deployment transaction using the server's signer. Returns the transaction hash, and the deployed contract address when `waitForReceipt: true`.

fuse_sign_message

Signs a message with the server's signer using EIP-191 (`personal_sign`). Returns the 65-byte signature as hex. No on-chain transaction is submitted.

fuse_sign_typed_data

Signs a structured EIP-712 payload with the server's signer. Returns the 65-byte signature as hex. No on-chain transaction is submitted.

fuse_smart_get_info

Returns the ERC-4337 smart-wallet address derived from the configured signer, plus whether the Fuse paymaster (gasless mode) is enabled.

fuse_smart_transfer_token

Submits an ERC-4337 UserOperation transferring a token (native FUSE or ERC-20) from the configured smart wallet. Gasless when `FUSE_USE_PAYMASTER=true`.

fuse_smart_transfer_nft

Submits an ERC-4337 UserOperation transferring an NFT (ERC-721 / ERC-1155) from the configured smart wallet to a recipient.

fuse_smart_approve_token

Submits an ERC-4337 UserOperation calling `ERC20.approve(spender, amount)` from the configured smart wallet.

fuse_smart_approve_nft

Submits an ERC-4337 UserOperation calling `approve(spender, tokenId)` on an NFT contract from the configured smart wallet.

fuse_smart_approve_and_call

Atomically approves a token and invokes a follow-up call on the spender from the configured smart wallet. Common DeFi pattern.

fuse_smart_call_contract

Submits an ERC-4337 UserOperation invoking arbitrary calldata on a contract from the configured smart wallet. Use when you need full control over the encoded call.

fuse_smart_execute_batch

Submits a single ERC-4337 UserOperation that executes a sequence of contract calls atomically. Failed sub-calls revert the whole batch.

fuse_smart_swap_tokens

Submits an ERC-4337 UserOperation executing a swap on Fuse via the Fusebox trade engine. Quote a swap first with `fuse_get_trade_quote` to preview the route.

fuse_smart_stake_token

Submits an ERC-4337 UserOperation that stakes a token using Fuse's staking module. List options first with `fuse_get_staking_options`.

fuse_smart_unstake_token

Submits an ERC-4337 UserOperation that unstakes a token via Fuse's staking module.

Claude Desktop / Cursor

Paste into your MCP client config file to install this server.

{
    "mcpServers": {
        "fuse network": {
            "fuse": {
                "url": "https://mcp.fuse.io/mcp"
            }
        }
    }
}

McpServers

{
    "fuse": {
        "url": "https://mcp.fuse.io/mcp"
    }
}

Fuse MCP Server

Model Context Protocol server for the Fuse blockchain. Lets AI agents (Claude, Cursor, Gemini, ...) read Fuse on-chain data, submit account-abstracted transactions, deploy contracts, and operate Fusebox APIs through one standard tool interface. Two ways to use it: 1. Hosted at https://mcp.fuse.io/mcp — free, read-only, configured with Fuse's API keys. No setup beyond pointing your agent at the URL. 2. Self-hosted via Docker or node dist/index.js — required for any write tool (you must control the private key) and for higher rate limits. Three back-ends, layered: - viem JSON-RPC — chain primitives any public node can serve, plus EOA writes (send FUSE, ERC-20 transfers, generic contract calls, contract deployment, EIP-191 / EIP-712 signing). - Fusebox Web SDK — value-added read APIs (token prices, staking, portfolio, UserOp history) and ERC-4337 smart-account writes via UserOperations (optionally gasless via the Fuse paymaster). - Fusebox REST APIs — direct access to Notification, Smart Wallet, Trade, and Explorer endpoints. ---

Quick install for AI agents (hosted at mcp.fuse.io)

The hosted endpoint speaks the Streamable HTTP transport at https://mcp.fuse.io/mcp. All read tools are enabled; write tools are not (they need a server-side private key — see Self-hosting for writes below).

Claude Code

``bash claude mcp add fuse --transport http https://mcp.fuse.io/mcp ` To remove later: claude mcp remove fuse.

Cursor

Settings → MCP → Add new server, or edit
~/.cursor/mcp.json: `json { "mcpServers": { "fuse": { "url": "https://mcp.fuse.io/mcp" } } } `

Claude Desktop

Claude Desktop currently launches MCP servers as local subprocesses, so it talks to the hosted endpoint through the
mcp-remote bridge. Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows): `json { "mcpServers": { "fuse": { "command": "npx", "args": ["-y", "mcp-remote", "https://mcp.fuse.io/mcp"] } } } ` Restart Claude Desktop.

Continue (VS Code / JetBrains)

~/.continue/config.yaml: `yaml mcpServers: - name: fuse url: https://mcp.fuse.io/mcp `

Cline / Roo Code

Add via the MCP sidebar → "Add Remote Server", URL
https://mcp.fuse.io/mcp. Or edit ~/.cline/mcp_settings.json: `json { "mcpServers": { "fuse": { "url": "https://mcp.fuse.io/mcp", "transport": "streamable-http" } } } `

Zed

~/.config/zed/settings.json: `json { "context_servers": { "fuse": { "command": { "path": "npx", "args": ["-y", "mcp-remote", "https://mcp.fuse.io/mcp"] } } } } `

Anything else (generic Streamable HTTP client)

Endpoint:
https://mcp.fuse.io/mcp Transport: Streamable HTTP (POST + optional SSE upgrade) Auth: none on the hosted endpoint (it's read-only) ---

Self-hosting for writes

The hosted endpoint deliberately runs without
FUSE_PRIVATE_KEY — write tools refuse to operate. Run your own instance when you need to sign transactions, deploy contracts, or submit ERC-4337 UserOps.

Docker

`bash docker build -t fuse-mcp-server . docker run --rm -p 3000:3000 \ -e MCP_TRANSPORT=http \ -e FUSEBOX_PUBLIC_API_KEY=pk_live_... \ -e FUSE_PRIVATE_KEY=0x... \ -e FUSE_USE_PAYMASTER=true \ fuse-mcp-server ` Point your agent at http://127.0.0.1:3000/mcp. Same configs as above, swapping the URL.

docker-compose

Drop secrets into a
.env file next to docker-compose.yml: `env FUSEBOX_PUBLIC_API_KEY=pk_live_... FUSEBOX_SECRET_API_KEY=sk_live_... FUSE_PRIVATE_KEY=0x... FUSE_USE_PAYMASTER=true ` Then: `bash docker compose up -d `

Node directly (stdio mode for local subprocess clients)

`bash npm install npm run build FUSE_PRIVATE_KEY=0x... node dist/index.js ` For Claude Desktop / any client that spawns the server as a subprocess: `json { "mcpServers": { "fuse": { "command": "node", "args": ["/absolute/path/to/fuse-mcp-server/dist/index.js"], "env": { "FUSEBOX_PUBLIC_API_KEY": "pk_live_...", "FUSE_PRIVATE_KEY": "0x...", "FUSE_USE_PAYMASTER": "true" } } } } ` ---

Tools (v0.2) — 50 total

RPC reads — 8 _(no API key required)_

| Tool | Description | | --- | --- | |
fuse_get_balance | Native FUSE or ERC-20 balance. | | fuse_get_transaction | Fetch a transaction. | | fuse_get_receipt | Fetch a transaction receipt. | | fuse_read_contract | Call any view/pure function (ABI auto-fetched). | | fuse_get_token_metadata | name / symbol / decimals / totalSupply. | | fuse_get_gas_price | Current gas price + EIP-1559 fee suggestions. | | fuse_resolve_ens | Resolve an ENS name (requires ENS_RPC_URL). | | fuse_get_account_abstraction_info | ERC-4337 state for a smart account. |

Fusebox SDK reads — 10 _(requires FUSEBOX_PUBLIC_API_KEY)_

fuse_list_wallet_tokens, fuse_list_wallet_nfts, fuse_get_staking_options, fuse_get_staked_tokens, fuse_get_token_price, fuse_get_token_price_change, fuse_get_token_price_history, fuse_list_supported_tokens, fuse_get_trade_quote, fuse_get_user_operations.

Fusebox REST APIs — 14 _(requires FUSEBOX_PUBLIC_API_KEY; Notification also needs FUSEBOX_SECRET_API_KEY)_

Notification (8): fuse_notification_{create,get,list_project,update,delete}_webhook, fuse_notification_{add,remove,list}_addresses. Smart Wallet (2): fuse_smart_wallet_authenticate, fuse_smart_wallet_get_actions. Trade (3, non-SDK): fuse_trade_indicative_price, fuse_trade_liquidity_sources, fuse_trade_price_change_over_duration. Explorer (1 generic dispatcher): fuse_explorer_query — covers all 40+ etherscan-style endpoints.

EOA writes — 7 _(requires FUSE_PRIVATE_KEY)_

| Tool | Description | | --- | --- | | fuse_get_signer_address | Show which EOA the server controls. | | fuse_send_native | Transfer native FUSE. | | fuse_send_erc20 | Transfer an ERC-20 (decimals auto-detected). | | fuse_write_contract | State-mutating call (simulates first to surface revert reasons). | | fuse_deploy_contract | Deploy from bytecode + ABI + args. Optionally waits for the receipt. | | fuse_sign_message | EIP-191 (personal_sign) signature. No tx broadcast. | | fuse_sign_typed_data | EIP-712 structured-data signature. No tx broadcast. |

Smart-account writes (ERC-4337 UserOps) — 11 _(requires FUSE_PRIVATE_KEY + FUSEBOX_PUBLIC_API_KEY)_

fuse_smart_get_info, fuse_smart_transfer_{token,nft}, fuse_smart_approve_{token,nft}, fuse_smart_approve_and_call, fuse_smart_call_contract, fuse_smart_execute_batch, fuse_smart_swap_tokens, fuse_smart_stake_token, fuse_smart_unstake_token. Set FUSE_USE_PAYMASTER=true to route through the Fuse paymaster (gasless). ---

Configuration

| Variable | Default | Purpose | | --- | --- | --- | |
MCP_TRANSPORT | stdio | stdio (local subprocess) or http (Streamable HTTP for hosted/Docker). | | MCP_HTTP_HOST | 0.0.0.0 | HTTP bind host. | | MCP_HTTP_PORT | 3000 | HTTP listen port. | | MCP_HTTP_PATH | /mcp | HTTP route path. | | FUSE_NETWORK | mainnet | mainnet (chain 122) or spark (testnet, chain 123). | | FUSE_RPC_URL | network default | Override the JSON-RPC endpoint. | | FUSE_EXPLORER_URL | network default | Override the Blockscout explorer base URL. | | FUSE_ENTRYPOINT_ADDRESS | ERC-4337 v0.7 canonical | Override the EntryPoint. | | ENS_RPC_URL | _unset_ | Ethereum mainnet RPC for .eth resolution. | | FUSEBOX_PUBLIC_API_KEY | _unset_ | Public API key — required for SDK + REST + smart-account tools. | | FUSEBOX_SECRET_API_KEY | _unset_ | Secret API key (API-SECRET header). Required only by Notification API tools. | | FUSEBOX_BASE_URL | SDK default | Override the SDK's Fusebox API host. | | FUSEBOX_API_ORIGIN | https://api.fuse.io | Override the raw HTTP client's Fusebox API origin. | | FUSE_PRIVATE_KEY | _unset_ | 32-byte hex private key for the signer. Required by every write tool. Read once at startup; never accepted as a tool argument. | | FUSE_USE_PAYMASTER | false | When true, smart-account UserOps route through the Fuse paymaster (gasless). |

Security model

- Key handling. Private keys live in the server's environment only. They are never accepted as tool arguments — that would leak them into the agent's conversation transcript. The server reads
FUSE_PRIVATE_KEY once at startup and signs locally. - Hosted endpoint. https://mcp.fuse.io/mcp has no FUSE_PRIVATE_KEY configured. Write tools return an actionable error pointing users to self-hosting. The Fusebox public key bundled there is rate-limited for fair sharing. - Self-hosted production. Treat the server as a hot-wallet signer. Run it next to your application, lock down ingress, fund the EOA with the minimum FUSE you're willing to lose to a prompt-injection mishap, and prefer the paymaster (FUSE_USE_PAYMASTER=true) so the smart wallet can transact without holding gas. ---

Project layout

` . ├── Dockerfile Multi-stage build → distroless-ish Alpine runtime, non-root user ├── docker-compose.yml One-line local deploy ├── .dockerignore ├── package.json ├── tsconfig.json └── src/ ├── index.ts Transport dispatcher (stdio | http) ├── server.ts Builds the McpServer + ToolContext ├── config.ts Env loading ├── types.ts Shared tool types ├── transports/ │ ├── stdio.ts Local subprocess transport │ └── http.ts Streamable HTTP transport + /healthz ├── clients/ │ ├── rpc.ts viem PublicClient factories │ ├── signer.ts EOA signer (viem WalletClient + ethers v5 Wallet) │ ├── explorer.ts Blockscout ABI fetcher │ ├── fusebox.ts Fusebox SDK factories (read-only + credentialed) │ └── fuseboxApi.ts Raw HTTP client for Fusebox REST APIs ├── lib/ │ ├── address.ts Address validation, ENS heuristics, hex bytes │ ├── erc20.ts ERC-20 ABI (read + write) │ ├── units.ts parseAmount / fetchErc20Decimals │ ├── format.ts BigInt-safe JSON serialization │ └── userOp.ts UserOp response → JSON-safe summary └── tools/ ├── index.ts Registry (50 tools) ├── *.ts RPC reads (8) ├── listWalletTokens.ts … getUserOperations.ts Fusebox SDK reads (10) ├── notifications/ Fusebox Notification API (8) ├── smartWallets/ Fusebox Smart Wallet API (2) ├── tradeApi/ Fusebox Trade API non-SDK endpoints (3) ├── explorerApi/ Fusebox Explorer API dispatcher (1) ├── writes/ EOA writes (7) └── smart/ Smart-account writes (11) ``
No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.