Skip to main content
Glama
fomo-mcp

fomo-mcp

by ColinEdw

fomo-mcp

Unofficial API wrapper + MCP server for fomo.family. Same code both ways: import FomoClient in your own project, or point your agent at it over MCP.

Not affiliated with fomo.family. Endpoints can change without notice.

Auth

The app logs in through Privy (Apple / Google OAuth). After one login in a browser you get three tokens:

  • FOMO_ID_TOKEN — goes on every API call as the Bearer token. Lasts about an hour.

  • FOMO_ACCESS_TOKEN — Privy API token.

  • FOMO_REFRESH_TOKEN — long-lived. Keeps the Privy session alive via POST /api/v1/sessions.

  • FOMO_CA_ID — optional, binds requests to the session that minted the tokens.

To grab them: log in at fomo.family, open devtools, look at any request to prod-api.fomo.family for the Authorization: Bearer ... header (that's the ID token), and the response of POST https://auth.privy.io/api/v1/oauth/authenticate for all three.

Only /oauth/authenticate mints ID tokens — the refresh endpoint won't give you a new one. When calls start 401ing, log in again and swap in a fresh triple. Note each login method (Apple vs Google) can be a separate account, so use the one tied to your profile.

Related MCP server: Solana Sniper Bot MCP

Run it

Requires Google Chrome installed. API traffic runs through a headless Chrome window under the hood — the API edge rejects non-browser clients, so plain fetch/curl won't work.

npm install
npm run build

export FOMO_ID_TOKEN=... FOMO_ACCESS_TOKEN=... FOMO_REFRESH_TOKEN=...
node dist/server.js

As an MCP server (Claude Code, Claude Desktop, Codex, etc.):

{
  "mcpServers": {
    "fomo": {
      "command": "node",
      "args": ["/path/to/fomo-mcp/dist/server.js"],
      "env": {
        "FOMO_ID_TOKEN": "...",
        "FOMO_ACCESS_TOKEN": "...",
        "FOMO_REFRESH_TOKEN": "..."
      }
    }
  }
}

As a library:

import { FomoClient } from "fomo-mcp"; // src/client.ts
const fomo = new FomoClient(process.env.FOMO_ID_TOKEN!);
const me = await fomo.getUserByHandle("lxfts");

Two things learned the hard way: don't send accept-encoding: gzip manually (Node fetch handles it, raw clients need to decompress), and don't replay cached if-none-match headers or everything comes back 304.

Tools

Users / profile: fomo_get_user_by_handle, fomo_get_user, fomo_get_following_ids, fomo_search_users, fomo_get_user_swaps, fomo_get_user_rank, fomo_get_spotlight, fomo_get_recommended_users

Balances: fomo_get_balances, fomo_get_pnl_equity_series, fomo_get_snapshot_by_id

Leaderboards: fomo_get_leaderboard (24h / 7d / 30d / all), fomo_get_clan_leaderboard

Clans: fomo_search_clans, fomo_get_clan, fomo_get_clan_holdings, fomo_get_clan_holding_breakdown, fomo_get_clan_feed

Trades: fomo_get_trades, fomo_get_trade, fomo_get_trade_comments

Swaps: fomo_request_swap_quote — quotes only. Token ids look like <mint>:<chainId> (1399811149 = Solana, 4663 = EVM), amount in base units. Execution signs and submits on-chain (Jito), deliberately not exposed.

Tokens / market: fomo_filter_tokens, fomo_search_tokens, fomo_token_details, fomo_token_warnings, fomo_verified_tokens, fomo_top_holders, fomo_dev_holdings, fomo_friends_holdings, fomo_token_allow_list, fomo_ohlcv

Feed: fomo_token_feed, fomo_token_thesis, fomo_token_sorted_thesis, fomo_trading_activity

Watchlist / transfers / meta: fomo_get_watchlist, fomo_add_watchlist, fomo_remove_watchlist, fomo_transfers_with, fomo_supported_transfer_tokens, fomo_get_config

Live updates run over wss://prod-api.fomo.family/ws (plain GET upgrades to 101) — not wrapped yet.

Available Tools

42 tools
fomo_add_watchlistC

Add a token to the watchlist

Inputs: networkId (required), tokenAddress (required).

fomo_dev_holdingsC

Dev holdings for a token

Inputs: networkId (required), tokenAddress (required).

fomo_filter_tokensC

Batch token market data by token id

Inputs: tokenIds (required).

fomo_friends_holdingsC

Which friends hold which tokens

Inputs: tokens (required).

fomo_get_balancesC

Token balances for a user

Inputs: id (required).

fomo_get_clanC

Clan detail, optionally for a window (e.g. 7d)

Inputs: id (required), window.

fomo_get_clan_feedD

Clan activity feed

Inputs: id (required), limit, feedTypes.

fomo_get_clan_holding_breakdownC

Per-member breakdown of one clan holding

Inputs: id (required), networkId (required), tokenAddress (required).

fomo_get_clan_holdingsC

Token holdings of a clan

Inputs: id (required), limit.

fomo_get_clan_leaderboardC

Clan leaderboard by window

Inputs: limit, window.

fomo_get_configD

App config

Inputs: no named parameters.

fomo_get_following_idsB

Ids of users the current account follows

Inputs: no named parameters.

fomo_get_leaderboardC

User leaderboard. window: 24h, 7d, 30d, all

Inputs: window.

fomo_get_pnl_equity_seriesC

PnL/equity series. timestamp is ISO (start of window)

Inputs: userId (required), timestamp (required).

fomo_get_snapshot_by_idC

PnL/equity at one snapshot id

Inputs: userId (required), snapshotId (required).

fomo_get_spotlightC

Best trades and comments for a user

Inputs: id (required).

fomo_get_tradeC

Single trade with token metadata

Inputs: id (required).

fomo_get_trade_commentsC

Comments on a trade, paged by lastCommentId

Inputs: tradeId (required), lastCommentId.

fomo_get_tradesC

Trades, filterable by user, close order and token

Inputs: userId, orderBy, tokenAddress.

fomo_get_userC

Get a fomo.family user by id

Inputs: id (required).

fomo_get_user_by_handleB

Get a fomo.family user by handle

Inputs: handle (required).

fomo_get_user_rankC

Leaderboard rank cut for a user (all-time, 24h, 7d, 30d)

Inputs: id (required).

fomo_get_user_swapsA

Swap history for a user, optionally filtered to one token

Inputs: id (required), tokenAddress.

fomo_get_watchlistC

Current watchlist

Inputs: no named parameters.

fomo_ohlcvC

Candles. chain like evm:4663, period like 1m

Inputs: chain (required), address (required), period.

fomo_remove_watchlistB

Remove a token from the watchlist

Inputs: networkId (required), tokenAddress (required).

fomo_request_swap_quoteB

Quote a swap. Token ids are :, amount in base units

Inputs: amount (required), inTokenId (required), outTokenId (required).

fomo_search_clansC

Search clans by term

Inputs: searchTerm (required).

fomo_search_tokensC

Search tokens by phrase

Inputs: phrase (required).

fomo_search_usersA

Fuzzy-search users by term

Inputs: searchTerm (required).

fomo_supported_transfer_tokensC

Tokens supported for transfers

Inputs: no named parameters.

fomo_token_allow_listD

Detailed token allowlist

Inputs: no named parameters.

fomo_token_detailsB

Buy/sell counts, volumes, holders for a token id

Inputs: tokenId (required).

fomo_token_feedD

Swap feed for a token

Inputs: networkId (required), tokenAddress (required), limit, threshold, +1 more.

fomo_token_sorted_thesisD

Thesis posts with time paging

Inputs: networkId (required), tokenAddress (required), limit, afterTime, +2 more.

fomo_token_thesisD

Thesis posts for a token

Inputs: networkId (required), tokenAddress (required), limit, threshold.

fomo_token_warningsC

Allowlist / buy-sell flags for a token

Inputs: networkId (required), tokenAddress (required).

fomo_top_holdersC

Top holders for a list of tokens

Inputs: tokens (required).

fomo_trading_activityC

Global trading activity feed

Inputs: limit, threshold.

fomo_transfers_withD

Transfers with another user

Inputs: userId (required).

fomo_verified_tokensD

Verified token list

Inputs: no named parameters.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2/5.0

    Scored across 42 tools

    Disambiguation2/5

    Multiple tools overlap: fomo_token_warnings, fomo_token_allow_list, and fomo_verified_tokens all describe token status/allowlist data; fomo_token_thesis and fomo_token_sorted_thesis are near-duplicates; fomo_get_user_swaps, fomo_get_trades, fomo_trading_activity, and fomo_token_feed all expose trade/swap feeds. An agent would need to understand subtle scope differences to choose the right tool.

    Naming Consistency3/5

    Most tools share the fomo_ prefix and snake_case, and many use verb-first names like fomo_get_* and fomo_search_*. However, a substantial minority use bare noun phrases (fomo_ohlcv, fomo_token_details, fomo_top_holders, fomo_token_allow_list) and fomo_transfers_with is an odd verb form, so the pattern is readable but inconsistent.

    Tool Count2/5

    With 42 tools, the surface is well above the 25-tool threshold and creates significant selection overhead. Several tools could be consolidated, such as the thesis variants, token allowlist variants, and overlapping trade/swap feeds.

    Completeness3/5

    Read coverage is extensive across users, clans, trades, tokens, watchlist, and transfers, but the surface has dead ends: comments can be read but not created, swap quoting is present without swap execution, and transfer tools only query history. Core analytics workflows are covered, but transactional/social actions are missing.

    Maintenance

    ActivityStale
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      C
      maintenance
      MCP server for the Monad blockchain. Provides tools for balances, transfers, swaps, and DeFi with Privy wallet signing.
      133 npm
      2
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Read-only token intelligence for Robinhood Chain and Solana, providing safety checks, ticker resolution, deployer records, whale wallet tracking, and outcome measurements via a hosted MCP server.
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables AI agents to research, trade and move money across crypto spot and perpetuals, stocks, commodities, forex, prediction markets, onchain swaps and bridging, and memecoins through a single remote MCP connection with no installation or hosting required. It also supports wallet management, fiat on-ramps and token launches, with every write action asking the user for approval first.
      MIT