Femtos

xyz.femtosPublished by femtos.xyzOfficial publisherv1.2.0Updated Oct 26, 2026

Hyperliquid data on HyperCore, HyperEVM, Elysium: balances, prices, trades, token security, bridges

VerifiedStreamable HTTPWeb executableFinanceSecurity & MonitoringData & Analytics

Overview

AI-generated overview

Remote MCP server for Hyperliquid data across HyperCore, HyperEVM and Elysium: prices, markets, trades, wallets, token security and bridges.

What you can do
  • Look up markets, candles, trades, order books, prices and price history across HyperCore, HyperEVM and Elysium
  • Search tokens and coins, and read metadata, holders, pool overviews, launches, new tokens and new pools
  • Inspect wallets: balances, positions, position changes, transfers, transactions and bridge movements
  • Assess token safety with simulated buy, sell and transfer checks plus static contract checks
  • Review perp risk: liquidations, liquidation and stop maps, forced flow, triggered and wallet stop orders
  • Browse NFT collections and tokens, and run read-only JSON-RPC calls on the Elysium node
When to use it
Useful when an assistant needs on-chain Hyperliquid market, wallet or token data to answer trading, due-diligence or risk questions, including checking whether a token is safe to trade or where liquidity and stops sit around a perp market.
Requirements
A remote streamable HTTP endpoint; no local package. Requires a Femtos API key sent as a bearer token in the Authorization header. Network access to the Femtos API.
Before you install
The API key is a secret passed in the Authorization header. Some calls are billed, and price history windows over 30 days count as heavy calls, so usage can cost money. Token security results come from simulations and static checks, not a guarantee. Read-only data access; no trading or writes are described.

Installation

In SourceWeft

  1. Open Femtos in the dashboard and add it to a workspace.
  2. Connect Authorization token credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/xyz.femtos%2Fmcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "femtos": {
      "type": "http",
      "url": "https://api.femtos.xyz/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_TOKEN>"
      }
    }
  }
}

Tools

51

get_status

Layer status

State of each layer (HyperCore, HyperEVM, Elysium): indexed head block and time, lag behind the chain, live or syncing, Elysium network (mainnet), HyperCore <> HyperEVM bridge matching coverage. Check it when an answer looks stale. Free.

Takes no parameters.

list_markets

Markets and pools

Tradable markets of a layer, most traded first (24 h USD volume). hypercore: perps, spot, HIP-3 dex perps (dex:COIN), outcome markets; `id` is the coin to pass to get_candles / get_trades (BTC, @107, xyz:TSLA). hyperevm / elysium: DEX pools with price, priceUsd, 24 h volume, mcapUsd (Elysium); `id` is the pool key to pass to get_candles / get_trades / get_pool. `total` = markets matching. Next page: pass `next_cursor` as cursor.

Parametersqkindlayerrequiredlimitcursor

get_candles

OHLCV candles

OHLCV candles of one market, ascending, UTC-aligned. hypercore: market = coin (BTC, HYPE, @107 spot, xyz:TSLA), down to 1 s. hyperevm / elysium: market = pool key from list_markets; prices in quote plus `usd` and `mcap` OHLC (USD price and market cap). Or token instead of market: a token's candles in USD through its reference pool (most liquid; the answer names it), HyperCore: its USDC market. Without from: the `limit` candles ending now. Windows over 30 days are billed as heavy calls.

Parameterstfrequiredtofromlayerrequiredlimittokenmarket

get_trades

Trades / swaps, and swap history of a wallet, pool or token

Latest trades of a market, newest first. hypercore: fills of a coin (px, sz, side B = buyer aggressor / A, block time). hyperevm / elysium: DEX swaps of a pool (sender, amounts, px = pool price after the swap, USD value). History (hyperevm / elysium): pass trader (a wallet: every swap it sent), pool or token (more than 20 pools: its priced swaps only, `coverage: priced`), optionally side, minUsd (USD at the swap), from / to (Unix ms): newest first, each row with its pool and symbols; filtered pages may hold fewer rows than limit, keep paging with `next_cursor` (null = no more).

ParameterstofrompoolsidelayerlimittokencursormarketminUsdtraderincludeSpam

search_coins

Find tokens

Tokens by symbol, name or address, with their links across layers (Elysium <-> HyperEVM <-> HyperCore), decimals, supply and USD price. Without layer: every layer. An exact address always answers its token (spam flagged).

Parametersqrequiredlayerlimit

get_coin

One token

One token: its links across layers, the markets it trades on (most traded first) and its 5 largest holders. hypercore: id = token name (HYPE), index or token id; hyperevm / elysium: id = 0x address. Price, FDV, liquidity and 5m–24h windows over all its pools: get_token_overview.

Parametersidrequiredlayerrequired

get_holders

Token holders

Largest holders of a token and its concentration (top-10 share…); system addresses (pools, bridges, launchpad, zero/dead) counted apart. hypercore: token = name (HYPE), kind = balances (spot) or positions (perp open interest of a coin); hyperevm / elysium: token = 0x address. Named wallets carry `entity`.

ParameterskindlayerlimittokenrequiredexcludeSystem

list_launches

Token launches

Latest token launches, newest first: Elysium launchpad Ascend (default) or HyperEVM LiquidLaunch (launchpad = liquidlaunch). Each: token, pool (pair), creator, priceUsd, mcapUsd, 24 h volume, holders, top-10 / dev share, dev sold, Ascend progress (Elysium). Next page (Elysium): pass `next_cursor` as cursor.

ParametersqlayerlimitquotesinceuntilcursorcreatorlaunchpadminHoldersminMcapUsdincludeSpam+2 more

list_new_tokens

New tokens (chain-wide)

Every ERC-20 created on HyperEVM or Elysium, newest first (not only launchpad launches): creation block / tx / time, creator, the contract it was deployed through, launchpad (ascend, liquidlaunch… or null = direct), first pool (dex, quote, initial liquidity) and, once a pool exists, priceUsd, mcapUsd, liquidityUsd, 24 h volume, holders. Spam tokens left out. Filters: launchpad (name, none, any, 0x), hasPool, minLiquidityUsd, minHolders, creator, since (ms); security=summary adds the cached get_token_security verdict to each row. Filtered pages may hold fewer rows than limit: keep paging with `next_cursor` (null = no more). Live: WS <layer>.tokens.new.

ParameterslayerrequiredlimitsincecursorcreatorhasPoolsecuritylaunchpadminHolderssinceBlockincludeSpamminLiquidityUsd

list_new_pools

New pools (chain-wide)

Every new pair / pool of every DEX on HyperEVM or Elysium (V2, V3, V4, PancakeSwap Infinity, LiquidLaunch curves…), newest first: dex, factory, fee tier, hooks, both tokens with symbols and whether each was just created (newToken), creation block / tx / time, initial liquidity, current liquidity (V2 / V3 pools: token balances; USD of the priced sides), price, 24 h volume. Pools of a spam token left out. Filters: dex, token (either side), quote, minLiquidityUsd, newTokenOnly, since (ms). Filtered pages may hold fewer rows than limit: keep paging with `next_cursor` (null = no more). Live: WS <layer>.pools.new.

ParametersdexlayerrequiredlimitquotesincetokencursorsinceBlockincludeSpamnewTokenOnlynewWithinMinminLiquidityUsd

get_launch

One launch

The story of one launched token: launch event, market cap, volume, holders, dev wallet and its funding, early buyers with flags, coordination signals, fees (exact from the launchpad ledger when indexed), lifecycle stage across layers and, for Ascend, progress toward the "Ascended" criteria. Elysium first, then HyperEVM LiquidLaunch.

ParameterslayertokenrequiredminHoldersminMcapUsdminVolumeUsdmaxTop10ShareearlyWindowSecfundingLookbackSec

get_launch_timeline

Launch timeline

Replayable life of a launch, oldest first: launch, swaps and transfers with the running holder count and market cap, graduation links (bridge to HyperEVM, HyperCore listing). Long histories are cut to fit (see `truncated`).

Parameterslayertokenrequired

get_token_lifecycle

Token across the 3 layers

One token from launch to perp across Elysium, HyperEVM and HyperCore: its address on each layer, the stages reached (Elysium launch, listing desk, HyperEVM mirror, HyperCore spot, perps) with chain evidence, and the links between them, each exact or inferred. address: an Elysium / HyperEVM address, core:<index>, a HyperCore token id or name, or a perp coin (dex:COIN).

ParametersaddressrequiredminHoldersminMcapUsdminVolumeUsdmaxTop10Share

get_token_security

Token security / honeypot check

Is this HyperEVM or Elysium ERC-20 safe to trade: a buy, a transfer and a sell simulated on our node through its most liquid pool (state overrides, nothing sent): canBuy, canSell, buy / sell / transfer tax, gas, revert reason; static checks of its code (owner and renounced, mintable, pausable, blacklist, max tx / wallet, cooldown, tax setters, upgradeable proxy, selfdestruct, ownership reclaim); holders (top 10 share and its part in EOAs, creator / owner share), liquidity and LP burned / held. Verdict ok / caution / danger / honeypot with reasons; each check has a severity (info, warn, danger). Cached 60 s per token. Medium call.

Parameterslayertokenrequired

get_prices

Token prices (batch)

Current USD price of up to 100 tokens in one call, each with its source and provenance: hl_mid (HYPE / WHYPE: HyperCore spot mid; hl_oracle when no mid is recorded), hl_spot (HyperCore tokens and HyperEVM tokens linked to one: last trade of its USDC market), hl_perp, unit (USDC), pool (HyperEVM / Elysium: last swap of the token's reference pool, the most liquid one, with block / tx / logIndex). hypercore: tokens = names (HYPE, PURR) or perp coins (BTC).

Parameterslayertokensrequired

get_price_history

Token price history (batch)

USD prices in the past. With at (Unix ms): the price of up to 100 tokens at that time (last observation at or before it). With from / to / interval: USD closes per unit (1m 5m 15m 1h 4h 1d) of up to 25 tokens, gap-filled. Same sources as get_prices. Windows over 30 days are billed as heavy calls.

Parametersattofromlayerlimittokensrequiredinterval

get_tokens

Token metadata (batch)

Metadata of up to 100 tokens: symbol, name, decimals, total supply, creator and creation time, logo / description / socials when indexed (launchpad metadata), token family, cross-layer links, spam flag. Unknown addresses come back in `missing`.

Parameterslayeraddressesrequired

get_token_overview

Token overview (all pools)

One token across all its pools on HyperEVM or Elysium (DexScreener style): USD price and source, FDV, market cap, liquidity, volume / trades / buys / sells / price change over 5m, 1h, 6h, 24h, holders and top-10 share, pool count, the 5 best pools and the reference one, creator and creation time.

Parameterslayeraddressrequired

get_bridges

Bridge movements

Bridge movements, newest first, with 24 h stats. route core_evm: HyperCore <> HyperEVM transfers, both legs matched (status, latency, how they were paired); route evm_elysium: HyperEVM <> Elysium (Orbit) deposits and withdrawals. Filter by account to follow one wallet across layers. Medium call.

ParameterslimitroutetokensystemaccountdirectionincludeSpam

get_wallet

Cross-layer wallet

One address on HyperCore, HyperEVM and Elysium at once: HyperCore perp account (value, positions with liquidation price) and spot balances, HyperEVM and Elysium token balances and NFTs with USD values, bridge legs in flight and journeys across the layers, latest events (fills, ledger, swaps, transfers, bridges), each section with its freshness. Medium call; balances alone: get_balances (a REST call).

ParametersaddressrequiredincludeSpam

get_balances

Token balances

What an address holds, one flat list: HyperCore spot tokens (live), HyperEVM and Elysium ERC-20s and native HYPE (indexed head), each with raw units, amount, USD price and value, largest first; spam tokens left out; HyperCore perp accounts (account value, withdrawable) apart in `perp`; totals per layer and overall, each layer with its source, height and asOf. Past balances: block or at (Unix ms) on one layer (EVM: needs tokens, read on our archive node; HyperCore: the holder snapshot at or before it, 7 days kept). verify: EVM rows read again on the node at the same block (indexer drift shows as onchain.match false).

ParametersatsortblocklayerlimitminUsdtokensverifyaddressrequiredincludeSpam

get_token_balance

One token balance

The balance of one token for one address: HyperCore coin name (USDC, HYPE…), or a HyperEVM / Elysium token address (`native` = HYPE; layer hyperevm unless elysium is given). 0 when not held. block / at for a past balance, verify to compare with the node.

Parametersatblocklayertokenrequiredverifyaddressrequired

get_token_volume

Daily token volume

Daily USD swap volume of an EVM token (both sides of every priced swap), oldest first, up to the indexed head (the last day is partial).

Parametersdayslayerrequiredtokenrequired

get_erc20_transfers

ERC-20 transfers (of a token, or from / to an address)

ERC-20 Transfer events, newest first (from, to, amount, block, tx). address: the transfers sent / received by a wallet (direction in, out or any), optionally of one token, in a window (from / to, Unix ms) or above minUsd (amount × current token price); each row with token, symbol, direction and USD value. Without address: the transfers of one token. Filtered pages may hold fewer rows than limit: keep paging with `next_cursor` (null = no more).

ParameterstofromlayerrequiredlimittokencursorminUsdaddressdirectionincludeSpam

get_pool

One pool

One DEX pool of HyperEVM or Elysium: dex, factory, fee tier, hooks, tokens with USD prices, creation block / tx, price, liquidity with its USD value and how it is measured (pool balances for V2 / V3; virtual reserves of the in-range liquidity for V4 / Infinity pools: not TVL), depth to ±2 %, trades / buys / sells / USD volume / price change over 5m, 1h, 6h, 24h, and for V2-style pools the largest LP holders.

Parameterslayerrequiredaddressrequired

get_transaction

One transaction

One transaction by hash, HyperEVM then Elysium (or layer): status, block, from / to, value, gas and fee (HYPE and USD), decoded ERC-20 transfers, swaps, liquidity events, pools created and NFT transfers, the raw logs we do not decode (from our node), and when it is a bridge leg its legs, matched bridge rows and the cross-layer journey it belongs to. A transaction not indexed yet comes from the node (source: rpc, nothing decoded).

Parametershashrequiredlayer

elysium_rpc

Elysium JSON-RPC (read only)

One read-only JSON-RPC call on our Elysium mainnet (chain 99901) node, free: eth_chainId, eth_blockNumber, net_version, net_listening, web3_clientVersion, eth_syncing, eth_getBlockByNumber, eth_getBlockByHash, eth_getBlockTransactionCountByNumber, eth_getBlockTransactionCountByHash, eth_getTransactionByHash, eth_getTransactionByBlockNumberAndIndex, eth_getTransactionByBlockHashAndIndex, eth_getTransactionReceipt, eth_getBlockReceipts, eth_getBalance, eth_getCode, eth_getStorageAt, eth_getTransactionCount, eth_call, eth_estimateGas, eth_gasPrice, eth_maxPriorityFeePerGas, eth_feeHistory, eth_getLogs, eth_getProof. The answer is the node's {jsonrpc, id, result} or {error}. eth_getLogs over at most 1000 blocks; state (eth_call, eth_getBalance…) of the last 128 blocks only. No transaction sending. Limited per IP (5/s, 60/min): use the indexed tools for history.

Parametersmethodrequiredparams

get_book

Order book

Live L2 order book of one HyperCore market from our own node: bids and asks best first as [px, sz, n] (price, size, order count), and the block it was read at. coin: perp name (BTC), spot @index (@107) or HIP-3 dex:COIN.

Parameterscoinrequireddepth

get_liquidations

Liquidations

HyperCore perp liquidations, newest first: one row per account, coin and block (side of the liquidated position, market or backstop, size, notional, average and mark price). Default window: the last 24 h; `from` older than 7 days (30 with a coin) is clamped, the answer's `from` says where it starts. Named wallets carry `entity`.

ParameterstocoinfromuserlimitminNotional

get_liquidation_stats

Liquidation stats

HyperCore liquidations over a window (1h, 24h, 7d, 30d), every perp or one coin: totals (notional, count, accounts, long / short, market / backstop), per coin, per time bucket, the most liquidated accounts and the largest events.

Parameterscoinwindow

get_positions

Open positions

Open positions of one HyperCore perp, current to a few seconds (the node state rolled forward with every fill, funding payment and ledger update): account, size, side, entry price, notional, unrealized PnL at the mark, leverage, margin mode and liquidation price when known. Sort by notional (default), upnl or liqDistance (closest to liquidation first). Named wallets carry `entity`.

Parameterscoinrequiredsidesortlimitorder

get_position_changes

Large position changes

Past HyperCore perp position changes of one coin over a notional, one row per account and block (opens, closes, increases, reductions, flips, with size, average price and whether a liquidation moved it): the history of the WS hc.positions channel. Default window: the last 24 h; `from` older than 30 days is clamped. sort=notional for the largest of the window. Named wallets carry `entity`.

ParameterstocoinrequiredfromsortlimitminNotional

get_stop_map

Stop-loss / take-profit map

Open trigger orders (stop-loss and take-profit) of one HyperCore market bucketed by trigger price around the mark (default ±10 %, 20 round-width buckets): per bucket the count, size and notional (size × trigger price) of stops and take-profits, sell (closes longs) and buy (closes shorts), market and limit. Position TP/SL that close the whole position (size 0) are counted apart under `whole`, sized from the open positions (a few seconds old) when the position is open. `totals` cover every open trigger order of the coin, `below` / `above` those outside the grid. Cut at `height` (block) / `asOf`.

ParameterscoinrequiredstepbucketsrangePct

get_liquidation_map

Liquidation price map

Liquidation prices of the open perp positions of one HyperCore market, bucketed by price around the mark: per bucket the longs (liquidated by a forced sell as price falls to them) and the shorts (forced buy), count, |size| and |size| × liquidation price. Real per-position prices: every account's positions a few seconds old (the node state rolled forward with every fill, funding payment and ledger update), each liquidation price from Hyperliquid's formula on the account state, not a leverage model; `coverage` gives the share of open interest that has one (portfolio-margin cross accounts have none). Same grid parameters as get_stop_map: the buckets line up.

ParameterscoinrequiredstepbucketsrangePct

get_forced_flow

Forced flow map (stops + liquidations)

Open stop-loss / take-profit orders and the liquidation prices of open positions of one HyperCore market on the same price buckets: per bucket the stops by kind and side, the liquidations by side, the cascade (what fires with the move: sell = sell stop-losses + long liquidations, buy = buy stop-losses + short liquidations) and forced = cascade + take-profits (which fire against the move: sell ones above the mark, buy ones below), each with its running total from the mark outward (cumCascadeSell / cumSell downward, cumCascadeBuy / cumBuy upward); summary = cascade selling under the mark and buying over it, take-profits on the far side, and the forced totals, inside the grid. Same grid parameters as get_stop_map.

ParameterscoinrequiredstepbucketsrangePct

get_triggered_stops

Triggered stops

Stop-loss and take-profit orders of one HyperCore market that fired, newest first: wallet, side, trigger and limit price, size (0 = whole position), the order the trigger placed (its status in the trigger block) and its fills there (size, average price, notional). Window: since / until, default the last hour, at most 24 h per call and 7 days back. Named wallets carry `entity`. Next page: pass `next_cursor` as cursor.

Parameterscoinrequiredlimitsinceuntilcursor

get_wallet_stops

A wallet's stops

A wallet's open HyperCore trigger orders (stop-loss / take-profit): coin, side, trigger and limit price, size (0 = whole position), reduce-only, placed at. history: true lists instead every status event of its trigger orders over the last 3 days at most (placed, triggered, canceled, rejected, and the fill or cancel of the order a trigger placed, `triggered: true`), newest first (a heavy call; next page: pass `next_cursor` as cursor).

Parameterslimitsinceuntilcursorstatusaddressrequiredhistory

list_nft_collections

NFT collections

Most active NFT collections of an EVM layer over the last 1 h or 24 h before the indexed head: transfers, mints, burns, with each collection's name, symbol and standard.

Parameterslayerrequiredlimitwindow

get_nft_collection

One NFT collection

One NFT collection of an EVM layer: metadata, standards, token ids seen (counted up to 1,000), transfers / mints / burns over the 24 h before the indexed head.

Parameterslayerrequiredaddressrequired

get_nft_tokens

NFT tokens

Tokens of one collection by token id, ascending: current ERC-721 owner (null for ERC-1155), metadata URI. Next page: pass `next_cursor` as cursor.

Parameterslayerrequiredlimitcursorcollectionrequired

get_nfts_owned

NFTs of a wallet

NFTs an address holds on an EVM layer at the indexed head: ERC-721 tokens and ERC-1155 balances, counted per collection, the tokens listed up to limit.

Parameterslayerrequiredlimitownerrequired

get_nft_transfers

NFT transfers

Transfers (mints and burns included) of one collection or one of its tokens, newest first: from, to, token id, amount, block, tx. Next page: pass `next_cursor` as cursor.

ParameterslayerrequiredlimitcursorwindowtokenIdcollectionrequired

search_entities

Named wallets

Named wallets (KOLs, traders, funds, market makers) and their wallets, from public attribution lists (not verified identities). A named wallet's address is given as its handle <entityId>.<hex>, usable as an address in every tool. Use the entity id with kol_activity. Next page: pass `next_cursor` as cursor.

Parametersqviakindsortlimitcursorconfidence

kol_leaderboard

Named-wallet leaderboard

Named wallets ranked by their trading on a layer. hypercore: PnL, volume, fills, win rate, open notional (default 7d, sort netPnl). hyperevm / elysium: swaps, transfers, net buy, holdings, bridge legs (default 24h, sort volume).

Parameterskindsortlayerlimitwindow

kol_activity

Named-wallet moves

Latest moves of named wallets, newest first: HyperCore fills (minNotional USD, default 1000), HyperEVM / Elysium swaps and transfers. Optionally one entity (id from search_entities). Next page: pass `next_cursor` as cursor.

ParameterslayerlimitcursorentityminNotional

create_webhook

Create a webhook

Create an outgoing webhook: we POST the events of its subscriptions to your HTTPS URL (port 443 or 8443, public address), signed (Standard Webhooks: webhook-id, webhook-timestamp, webhook-signature = v1,<base64 HMAC-SHA256 of "id.timestamp.body" with the secret>). Channels (WebSocket vocabulary): bridge.transfers and elysium.bridge (matched bridge legs), wallet (filter.address: up to 100 addresses, filter.channel: event kinds), hc.liquidations and hc.positions (filter.min_notional; positions >= 10000), elysium.launches, hyperevm.launches. Your URL first gets a webhook.verification POST: answer {"challenge": "<data.challenge>"} within 10 s, nothing else is sent before. The answer carries the secret once. Free tier: 2 webhooks, 5 subscriptions, 10k deliveries a day.

Parametersurlrequireddescriptionsubscriptionsrequired

list_webhooks

Your webhooks

Your account's webhooks: URL, state (pending_verification, active, disabled with the reason and how to enable), failures in a row, subscriptions. A rotated key sees the same webhooks. Next page: pass `next_cursor` as cursor.

Parameterslimitcursor

delete_webhook

Delete a webhook

Delete one of your webhooks and its pending deliveries. Cannot be undone.

Parametersidrequired

test_webhook

Test a webhook

Queue a webhook.test delivery to a verified webhook (not billed); its result shows in get_webhook_deliveries within seconds.

Parametersidrequired

get_webhook_deliveries

Webhook deliveries

Deliveries of one webhook, newest first (kept 7 days): msgId (the webhook-id header), type, status pending / delivered / dead, and each attempt with its HTTP status, latency, error and the first 4 KiB of your answer. Next page: pass `next_cursor` as cursor.

Parametersidrequiredlimitcursorstatus

replay_webhook

Replay webhook deliveries

Send deliveries again, same webhook-id (dedupe on it): one (msgId, delivered or dead), or every dead one since a time (since, Unix ms within 7 days; status all: delivered ones too).

ParametersidrequiredmsgIdsincestatus

Version history

2
  1. v1.2.0LatestOct 22, 2026
  2. v1.1.0Oct 21, 2026

Score

83% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts

    Declare a GitHub repository with a README, or serve resource_documentation in the OAuth protected-resource metadata.

  • LicenseNot applicable

    A hosted service is used under its provider's terms, so no license is expected here. This check is left out of the percentage.