Prototype · Preview: every server in the official registry, synced every 30 minutes. Reviews and accounts come in a later step.
PopNx MCPMCP servers for people who use AI · explained in plain words

Ankr Agent RPC

by w3techversion 0.2.8i★ –iComputer or cloud
Registry nameio.github.w3tech/agent-rpc-mcp

Install

Overview

Description from the maker (original English)

Read chain data on 200+ networks and Sui: transactions, logs, balances, objects, ABI-decoded.

PopNx MCP’s three pillars

These three are never merged into one score: opinions, measurements and popularity are different things.

What you can do with it

We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.

  • Connection: Computer or cloud
  • Transport: stdio, Streamable HTTP
  • Category: Other
  • You need to fill in: ANKR_API_KEY, Authorization

Install

Pick the AI app you use, then copy the settings.

Before you install

Values marked secret are keys to your account. Never share them or paste them into a chat.

You need

  • Runs in the cloudNothing to install; it connects over the internet
  • npmNode.js installed (for the npx command)

Which app do you use?

Pick your app above. We remember it, so next time the button says “Install in …”.

This address needs a key in a request header, which the add-connector menu cannot set. Use Claude Code, Cursor or VS Code instead.

Or run it on your computer

Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json

{
  "mcpServers": {
    "agent-rpc": {
      "command": "npx",
      "args": [
        "-y",
        "@w3tech.io/agent-rpc-mcp"
      ],
      "env": {
        "ANKR_API_KEY": "your-value"
      }
    }
  }
}

Run this in your terminal

claude mcp add --transport http agent-rpc https://mcp.ankr.com/rpc --header 'Authorization: Bearer {ankr_api_key}'

Or run it on your computer

claude mcp add agent-rpc --env ANKR_API_KEY=your-value -- npx -y @w3tech.io/agent-rpc-mcp

Fill in the empty values before running it.

Open in Cursor

Or copy the settings yourself

Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json

{
  "mcpServers": {
    "agent-rpc": {
      "url": "https://mcp.ankr.com/rpc",
      "headers": {
        "Authorization": "Bearer {ankr_api_key}"
      }
    }
  }
}

Or run it on your computer

Open in Cursor

Or copy the settings yourself

Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json

{
  "mcpServers": {
    "agent-rpc": {
      "command": "npx",
      "args": [
        "-y",
        "@w3tech.io/agent-rpc-mcp"
      ],
      "env": {
        "ANKR_API_KEY": "your-value"
      }
    }
  }
}

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

Open in VS Code

Or copy the settings yourself

Paste into .vscode/mcp.json in your project

{
  "servers": {
    "agent-rpc": {
      "type": "http",
      "url": "https://mcp.ankr.com/rpc",
      "headers": {
        "Authorization": "Bearer {ankr_api_key}"
      }
    }
  }
}

Or run it on your computer

Open in VS Code

Or copy the settings yourself

Paste into .vscode/mcp.json in your project

{
  "servers": {
    "agent-rpc": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@w3tech.io/agent-rpc-mcp"
      ],
      "env": {
        "ANKR_API_KEY": "your-value"
      }
    }
  }
}

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

This address needs a key in a request header, which the add-connector menu cannot set. Use Claude Code, Cursor or VS Code instead.

Your choice stays on this device in a cookie; no account needed.

Values you fill in

  • ANKR_API_KEY secret required env
    Ankr API key. Create one at ankr.com/rpc.
  • Authorization secret HTTP header
    Your Ankr API key as a Bearer token (x-ankr-api-key also works). Create a key at ankr.com/rpc. Without a key, tool calls are paid per call over x402.

These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.

What it can do

Tool names and descriptions exactly as the server reported them on Nov 6, 2026. The maker wrote them, not us; we show them as plain text.

  • getAccountBalance

    Balance of an account across many blockchains, by 0x address or ENS name, via the Ankr Advanced API indexer. Assets are ranked by USD value descending and only the top 20 are listed by default (a real wallet can hold 1000+ assets, over half of them priced at $0); tune that with m

  • getTokenPrice

    USD price of a token on one blockchain: pass a contract address for an ERC-20, or leave it empty for the native coin. Returns { chain, asset, usd, priced_via_contract, as_of: { timestamp, blockNumber, lag, status } }. Read as_of before reporting a price; it says how stale the ind

  • getTransaction

    Get a transaction by its hash on one blockchain, with tier-2 decoding requested. Check tier_degraded before reading `function` or `args`. By default the receipt is fetched too (status, gas used, decoded logs). Set include to "transaction" to skip it and halve the cost. Tier-2 fie

  • getLogs

    Event logs on one chain, filtered by address and/or topics over a block range. Tier 2 emits each log as { contract, event, args }, dropping logsBloom and per-log block duplication; an undecodable one stays raw as { address, topics, data, _event_unknown }. Check tier_degraded befo

  • getBlock

    Get a block by a 0x-64 hash, a block number (decimal or 0x-hex), or a tag (latest, finalized, safe, earliest, pending). Tier 2 drops the verbose header roots and bloom and, with includeTxs, ABI-decodes and compacts the embedded transactions. A large block with includeTxs may come

  • getBalances

    An address's balances on ONE chain: native via eth_getBalance plus, by default, ERC-20 balances with USD from the Ankr Advanced API indexer (tier 0). ENS resolves for the token lookup only; a raw-RPC-only chain returns native alone. Tokens rank by USD descending, top 20 by defaul

  • getWalletActivity

    An address's recent transactions on one blockchain, newest first, via the Ankr Advanced API indexer. Items are returned under `activity`, exactly once per page, on this first page and on every continuation alike. There is no second alias key. Each item: hash, from, to, value_wei

  • resolveContract

    Inspect an address on a chain: whether it is a contract, best-effort ERC-20 token metadata (name, symbol, decimals), and EIP-1967 proxy detection (implementation address). Built from eth_getCode / eth_call / eth_getStorageAt, which are plain JSON-RPC passthrough. The metadata is

  • searchChain

    Resolve an on-chain IDENTIFIER to the object it names. Accepts exactly THREE shapes, and nothing else: - 0x + 64 hex -> transaction (falls back to block hash if there is no such tx) - 0x + 40 hex -> address (reports contract vs EOA) - all digits -> block number NOT SUPPORTED: tic

  • expandResult

    Continue a paged result using the opaque cursor returned by a previous tool call. Supported cursor sources: getWalletActivity, getLogs (a block range, or a Sui checkpoint scan), getBalances (asset offset), Sui views (tier 0 re-reads the view unshaped: a fresh upstream call, never

  • rpcCall

    Call ANY JSON-RPC method on a supported chain: the escape hatch beyond the routed tools (eth_call, eth_estimateGas, eth_getCode, debug_trace*, trace_*). Prefer getTransaction/getLogs/getBlock where they fit. TORPC tier is negotiated per call (contract 2); check _meta.tier. This i

  • suiGetObjects

    Move objects by id, in ONE batch call: each answer carries the object's id, type, version, owner and its decoded Move fields under json. Up to 50 ids per request and nothing is trimmed from the reply, so no cursor is issued. An id the node cannot serve is reported POSITIONALLY un

  • suiListOwnedObjects

    Every object an address owns, page by page, out of the node's own owner index. Narrow it with type: a bare Move type such as 0x2::coin::Coin matches any type parameter, while a fully applied one matches only that instantiation. A page holds 50 entries by default and 200 at most;

  • suiListDynamicFields

    Whatever a Move package stored under one object's UID: tables, bags and dynamic object fields, listed from the parent id. A row names the field's own object id, its kind, the name it is keyed by and the Move type of its value. The value itself is a BCS blob and is left out of thi

  • suiGetPackage

    What a published Move package declares, so a caller can pick what to inspect next. By default this answers with an INDEX: one row per module carrying its name and how many functions and datatypes it holds, capped at 50 rows (raise it with maxModules). Pass `module` to get that on

  • suiGetFunction

    One Move function's signature: visibility, whether it is an entry function, its type parameters, its parameter types and its return types — what a programmable transaction block needs in order to call it. Never capped or paged. Take the package and module names from suiGetPackage

  • suiResolveName

    Resolve a SuiNS name (something.sui) to the address it points at, or an address back to its name. Give exactly one of `name` or `address`. READ `status` BEFORE the record. It is one of: resolved, the registration is live and the record is good; expired, the registration lapsed an

  • suiSimulateTransaction

    Run a transaction against current state and report what it WOULD do, without submitting it: whether it succeeds or which Move abort stops it and in which command, the gas it consumes, the objects it creates, mutates and deletes, the balance changes per address and coin, each comm

  • suiWatchEvents

    Follow Move events from now on, by POLLING — nothing is pushed. This first call only establishes a start position: it reads the executed tip from a Sui event subscription, returns NO events, and hands back a cursor. Each expandResult on that cursor lists what has been emitted sin

  • getNFTs

    NFTs one wallet holds on one chain: collection, name, token id, contract, standard (ERC721/1155), image URL. For fungible tokens use getBalances.

  • getTokenHolders

    Who holds an ERC-20 token on one chain, largest balance first, plus the total holder count. `balance` already has decimals applied, so do not divide it again. For one wallet's tokens use getBalances.

  • getTokenPriceHistory

    Historical USD price series for a token contract on a chain, via the Ankr Advanced API indexer: a list of { timestamp, usd, block } quotes. `limit_applied` reports the cap the call was actually made with (default 100, max 1000). When `count` reaches that cap the response sets `po

  • getInteractions

    List the blockchains an address has interacted with, via the Ankr Advanced API indexer. Cross-chain, so there is no chain argument. Useful as a first step before fetching balances or activity per chain.

  • listChains

    Which chains each tool family reaches. aapiChains is where the indexer tools work (getAccountBalance, getWalletActivity, getNFTs, getTokenHolders, getTokenPrice, getTokenPriceHistory); call this before one of them on an unfamiliar chain. suiChains are answered over gRPC, by the s

  • describeMethods

    What a JSON-RPC method takes, and whether this key can actually call it on this chain. Returns the positional param shape and a worked example for every method rpcCall can validate, plus rpcCall's own verdict (permitted, or refused as a write path). Pass probe:true with an explic

Basic checksi

We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 7, 2026

  • ✓ Pass

    Maker matches the repo

    The registry name was verified with the GitHub account w3tech, which owns the repo

  • … Not checked yet

    Still maintained

    We have not read this repo from GitHub yet

  • … Not checked yet

    Has a licence

    We have not read this repo from GitHub yet

  • ✓ Pass

    Endpoint responds

    Responded in 51 ms (HTTP 200)

  • – Not applicable

    Sign-in with OAuth

    No sign-in needed

  • ✓ Pass

    No hidden instructions in tool descriptions

    Read 25 tool descriptions and found no hidden instructions to the AI

Compared with others in Otheri

  • More stars than 0% of the other 32583 servers in this category
  • Published to the registry more recently than 88% of the other 32583 servers in this category
  • Basic checks equal to or better than 100% of the other 32583 servers in this category

Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.

Common questions

Is Ankr Agent RPC safe?

It passed 3 of 3 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.

What keys or codes does it need?

You need to fill in: ANKR_API_KEY, Authorization

Does it run on my computer or in the cloud?

Either way works: install it on your computer or connect to the cloud version.

Is it still maintained?

The GitHub repo last changed –, and the latest version (0.2.8) reached the registry 4 days ago.

Which apps can use it?

Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. It connects by URL, so apps that accept remote MCP servers work too, such as ChatGPT in developer mode.

What can I use instead?

In the same category: Spec Driven Development, Remote Desktop Commander, sync. labs

Alternatives

Servers in the same category from other makers, sorted by stars.

Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi

Spec Driven Development

by formulahendry

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

Runs on your computer★ 440MITUpdated 14 months ago
Install

Remote Desktop Commander

by desktop-commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

Runs in the cloud★ 211Updated yesterday
Install

sync. labs

by synchronicity-labs

Lipsync videos, dub them into other languages, make talking videos and open sync. Studio.

Computer or cloudUpdated today
Install

README from the maker

Open the README

Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.

Ankr Agent RPC — MCP Server

A Model Context Protocol server that gives AI agents token-efficient access to blockchain data through Ankr RPC.

Reads go out with the TORPC Accept-Token-Tier: 2 header. Tier 1 already renames the fields, turns hex into decimal and drops the service fields (logsBloom, cumulativeGasUsed, header roots). Tier 2 adds the ABI decode on top, so contract calls and event logs come back as named arguments.

A live run over 21 methods and 25 Ethereum mainnet blocks, token-weighted and counted with o200k_base over the full HTTP body, came out 48.4% smaller at tier 2 and 35.3% smaller at tier 1. Decode-heavy reads save the most: eth_getTransactionByHash 69.0%, eth_getTransactionReceipt 64.5%, eth_getBlockReceipts 60.3%, the block methods 40.4%, eth_getLogs 28.9%; scalar reads save 9–19%. Per-method figures: live-token-savings-2026-07-17.md.


Quick start

Get a free API key at ankr.com/rpc.

Hosted (no install)

The server runs at https://mcp.ankr.com/rpc. Send your key as the x-ankr-api-key header (or Authorization: Bearer ); each request carries the caller's own key, and the server holds no credential of yours.

{

"mcpServers": { "ankr-agent-rpc": { "url": "https://mcp.ankr.com/rpc", "headers": { "x-ankr-api-key": " " } } } }

Local (stdio)
{

"mcpServers": { "ankr-agent-rpc": { "command": "npx", "args": ["-y", "@w3tech.io/agent-rpc-mcp"], "env": { "ANKR_API_KEY": " " } } } }

That JSON goes in your client's MCP config: Claude Desktop (claude_desktop_config.json), Cursor, Windsurf, or any other MCP client. Cursor also accepts the command form:

env ANKR_API_KEY=<YOUR_KEY> npx -y @w3tech.io/agent-rpc-mcp

Tools

Raw RPC, TORPC tier 2

ToolWhat it answers
getTransactiontransaction + receipt by hash, ABI-decoded
getLogsevent logs, decoded; wide block ranges are chunk-scanned and paged
getBlockblock header, optionally with decoded transactions

Indexed and mixed

ToolWhat it answers
getBalancesnative coin + ERC-20 balances with USD
getAccountBalancebalances across many chains at once
getWalletActivityan address's transaction history, paged
getNFTsNFTs held by an address
getTokenHoldersholders of an ERC-20, paged
getTokenPriceUSD price with chain, asset and as_of provenance
getTokenPriceHistoryhistorical price series for a token
getInteractionswhich chains an address has touched, cross-chain
resolveContractis-contract, best-effort ERC-20 metadata, EIP-1967 proxy
searchChainresolve a tx/block hash, an address, or a block number
expandResultcontinue any paged result from its cursor

Discovery and escape hatch

ToolWhat it answers
listChainssupported chains, max TORPC tier, indexer availability
describeMethodsthe param shape and a worked example per JSON-RPC method, plus whether your key may call it on that chain
rpcCallany read method the routed tools do not cover

Sui

Sui is not an EVM chain and is not reached through the JSON-RPC proxy at all: a Sui call goes out over gRPC. getBalances, getBlock, getTransaction, getWalletActivity, getLogs and rpcCall take chain: "sui" and route themselves — getLogs reads Move events over a checkpoint range, filtered by emitting package or module, event type and sender. resolveContract and searchChain are built from eth_* calls Sui has never had and refuse there, naming the tool that answers instead. A Move event row is {contract, event, args}, the same shape an EVM tier-2 log has — but its args arrives at tier 0, decoded by the node rather than from an ABI, so on this path it is not evidence of a tier.

Eight tools serve what Sui has and an EVM chain does not:

ToolWhat it answers
suiGetObjectsMove objects by id, batched, with their decoded fields
suiListOwnedObjectsevery object an address owns, paged, filterable by Move type
suiListDynamicFieldstables, bags and dynamic object fields under one object's UID
suiGetPackagethe modules a published Move package declares
suiGetFunctionone Move function's signature
suiResolveNamea SuiNS name to its address, or an address to its name
suiSimulateTransactionwhat a transaction would do, run against current state, never submitted
suiWatchEventsMove events from the executed tip on, polled from a resumable cursor

That is the whole set: 25 tools.

What rpcCall will and will not do

rpcCall is a read and data escape hatch, never a wallet. It is a write denylist, not a read allowlist: it refuses transaction broadcast and signing, transaction _building_, node and dev-node administration, mutating verbs, and the node-operation half of geth's debug_* namespace — on every chain family — and forwards everything else.

It therefore keeps no list of permitted reads. Which reads exist is decided per chain by the endpoint's blockchain schema and by what your tenant may call, so a forwarded read can still come back refused (Method disabled, reason: restricted by blockchain schema). That refusal is the authoritative answer; listChains reports coverage.

Sign and send transactions with your own wallet or signer.


Reading a response

Two fields decide how to read every result, and an agent that skips them will misread output that is technically correct.

`_meta.tier` — the TORPC tier is negotiated per call and is not guaranteed. On the proxy path a response comes back at tier 0 (raw, undecoded, no args) when it is above the proxy's compression budget, and also when the method is one the proxy does not compress at all, such as eth_call, eth_getCode and eth_getStorageAt. Every successful response carries the tier actually applied in _meta.tier, so check it before looking for decoded fields; an error result carries _meta.error_code instead and no tier at all. Some tools additionally report tier_degraded: true in the body, with a note on how to narrow the request, when they asked for tier 2 on your behalf and got less. Not all of them do, so _meta.tier is the field to rely on. _meta.tier_source says who applied the tier, and the shape rule above is the proxy's alone: on the Sui gRPC path (tier_source: "local") a Move event row carries contract, event and args at tier 0, because the node decodes a Move struct itself.

Decoded amounts are raw base units, with no decimals applied. args.value: "41695680" on a 6-decimal token is 41.69568, not 41 million. Read the token's decimals with resolveContract before reporting a human number.

_meta.token_count is a real o200k_base count of the emitted text, not a chars/4 estimate. It is exact up to 256 KB of emitted text, which covers every display-capped response; above that it is extrapolated and the response carries _meta.token_count_estimated: true. Responses are minified JSON, so a model with a different tokenizer sees a similar but not identical number.

Tool inputs are strict: an unknown argument is rejected with a validation error rather than silently dropped, so a misspelled argument name is reported instead of ignored. Block numbers above 2^53 must be passed as strings, because a JSON number that large is not exact.


TORPC tiers

TierMeaning
0passthrough — standard JSON-RPC
1field rename, hex → decimal, and the service fields dropped: logsBloom, cumulativeGasUsed, contractAddress, type, the header roots
2tier 1 plus the ABI decode — each log becomes {contract, event, args}, calldata becomes a decoded function with named args

Negotiation is by header: Accept-Token-Tier: 0|1|2 on the request, Token-Tier on the response. The proxy applies the requested tier only while the response stays inside its compression budget, and that budget is internal to the proxy — so this server never predicts the tier, it detects the applied one and reports it.

On a JSON-RPC batch that header describes the array, not any one element: a response array carries a single Token-Tier, and its value is the minimum tier applied across the elements. v1 defines no per-element tier signal, elements may sit above that floor, and a client reads each element's own tier from the shape the proxy left on it — renamed fields and decimal strings for tier 1, event/args for tier 2 — rather than from the header. So the header is a floor and a signal that a transform was applied; which methods reach tier 2 is declared per method in the descriptor at https://mcp.ankr.com/.well-known/torpc.json, which also ships in the npm package at static/.well-known/torpc.json.

Specification: w3tech/torpc, released under CC0-1.0, with the TORPC docs page as the narrative version. The reference decoder is published as @w3tech.io/torpc-decoder (Apache-2.0); its source and the benchmark harness live in w3tech/torpc-js, under codec/. The EVM tier-1 and tier-2 rules are normative in the spec today; the conformance suite is a scaffold, so no implementation, this one included, claims conformance yet.


Discovery

Two machine-readable documents describe this deployment. Both are public, carry no credential, and are readable cross-origin.

DocumentServed at

Only the beginning is shown; read the rest in the repo

Ask PopNx