Ankr Agent RPC
Read chain data on 200+ networks and Sui: transactions, logs, balances, objects, ABI-decoded.
Connector by w3tech · GitHub account verified by the MCP Registry
Install
Works with Claude Code, VS Code, Codex, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.
npx agentmarket install connector/w3tech-agent-rpc-mcp
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Remote endpoint
https://mcp.ankr.com/rpcRemote (HTTP)
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.
- Tools
- 25 read · 0 write · 0 deleteRead-only
- Secrets
- 2 (API keys, tokens or passwords)
- Install scripts
- Not scanned yet
- Runs as
- Node.js package
Tools by what they do 25
From the running server's own tool list (tools/list) on Oct 25, 2026.
Read 25 · Look things up without changing anything.
describeMethodsexpandResultgetAccountBalancegetBalancesgetBlockgetInteractionsgetLogsgetNFTsgetTokenHoldersgetTokenPricegetTokenPriceHistorygetTransaction
Show 13 more tools
getWalletActivitylistChainsresolveContractrpcCallsearchChainsuiGetFunctionsuiGetObjectssuiGetPackagesuiListDynamicFieldssuiListOwnedObjectssuiResolveNamesuiSimulateTransactionsuiWatchEvents
Secrets and settings it asks for
Secrets: values you paste in that let it act as you.
ANKR_API_KEYAuthorization
Network hosts it talks to 1
mcp.ankr.com· found in remote endpoint, install command
Tools (25)
As the server listed them on Oct 25, 2026. Descriptions are the server’s own words; hidden characters are shown as [U+…].
describeMethodsDescribe JSON-RPC method shapes and availabilityread-onlyWhat 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 explicit methods list (max 12) to also ask the node, so served reflects your key, your tenant and the chain's blockchain schema instead of a guess: yes, no, restricted, or unknown. A refused method is never sent. Without methods it returns the whole catalogue and does not probe. The catalogue is SHAPE guidance, not a coverag…
expandResultExpand a truncated resultread-onlyContinue 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 a replay of the earlier answer). Returns the next page of compact items plus a new cursor if more remains.
getAccountBalanceAccount balance by chainread-onlyBalance 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 maxTokens/minUsd, or call getBalances for structured JSON. Anything the indexer PRICED at zero or below minUsd is summarised as a dust count instead of being listed. An asset with NO indexer price is not dust: it reads "USD value unknown" and ranks after every priced asset, so on a wallet holding more priced assets than…
getBalancesWallet balances, native and tokensread-onlyAn 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 default; tune with maxTokens/minUsd. Anything PRICED at zero or below minUsd goes to `dust` (count + USD total); `full_count` is how many assets exist. UNPRICED assets are not dust: usd: null, unpriced: true, ranked after every priced one, counted by `unpriced_on_page`/`unpriced_total`, never summed. A raw balance >=2^128 is…
getBlockBlock by number or tagread-onlyGet 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 back raw (hex); _meta.tier says which, and dropping includeTxs gets the header decoded. Sui: `block` is a checkpoint number or digest.
getInteractionsChains an address has usedread-onlyList 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.
getLogsEvent logsread-onlyEvent 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 before reading `event` or `args`. With both bounds concrete block NUMBERS (toBlock may be omitted/"latest") the range is walked in ascending chunks, stopping once the display cap fills: the reply says `range_fully_scanned: false`, carries a cursor, and `note` says why. `more_available` means more logs were seen than shown;…
getNFTsNFTs held by an addressread-onlyNFTs one wallet holds on one chain: collection, name, token id, contract, standard (ERC721/1155), image URL. For fungible tokens use getBalances.
getTokenHoldersHolders of a tokenread-onlyWho 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.
getTokenPriceToken priceread-onlyUSD 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 indexer's view is. A native-coin query is priced from the WRAPPED token, which is why priced_via_contract is a wrapped-token address rather than the coin itself.
getTokenPriceHistoryToken price historyread-onlyHistorical 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 `possibly_truncated: true`: this endpoint returns NO continuation token, so a clipped series and a series that simply ends are indistinguishable, and there is no cursor to page with. Treat such a series as incomplete-of-unknown-length rather than the full history; raise `limit` or walk `fromTimestamp`/`toTimestamp` yourse…
getTransactionTransaction by hashread-onlyGet 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 field names: tx, block, block_hash, from, to, value, gas_limit, gas_price, gas_used, status ("success"|"failed"), function, args (named object), logs[] ({ contract, event, args } when decoded, else { address, topics, data, _event_unknown }). All numeric values are decimal strings and all addresses are EIP-55 checksummed. …
getWalletActivityWallet transaction activityread-onlyAn 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 (decimal string, RAW WEI, not ether and not token units), block (decimal), time { unix_seconds, iso }, status ("success"/"failed"), and selector (the raw 4-byte function selector, e.g. "0xa9059cbb"). The selector is NOT a resolved function name: this indexer does not return one, and mapping a selector to a name needs a…
listChainsList supported chainsread-onlyWhich 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 sui* tools and the generic tools the reply's suiNote names. Raw-RPC tools (getTransaction, getLogs, getBlock) and rpcCall are not limited to these lists: they take any rpc.ankr.com/<chain> slug, 200+ chains. Each reply reports how it was shaped in _meta.tier and _meta.tier_source.
resolveContractIdentify a contractread-onlyInspect 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 best-effort and may be absent on a non-standard contract.
Show 10 more tools
rpcCallRaw JSON-RPC call, reads onlyread-onlyCall 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 is a read/data tool, never a wallet. It REFUSES anything that would change state, on every chain family: transaction broadcast and signing (eth_sendRawTransaction, MEV bundle/private-tx, personal_*/eth_sign*, Solana sendTransaction/requestAirdrop, BTC sendrawtransaction and bumpfee/psbtbumpfee, Sui sui_executeTransactio…
searchChainSearch a chainread-onlyResolve 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: ticker symbols, token or contract NAMES, labels, or any other free-form text. "USDC", "uniswap" and "the biggest holder" all return kind:"unknown" with a note, because that needs a label registry this server does not have. ENS names (*.eth) are also NOT resolved; they return kind:"ens" with a note. Do not call this tool t…
suiGetFunctionMove function signatureread-onlyOne 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. A name the package does not declare is refused by the node rather than approximated.
suiGetObjectsSui objects by idread-onlyMove 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 under failed, with its request index, the id asked for and the gRPC status, never dropped in silence. Reads only.
suiGetPackageMove modules in a Sui packageread-onlyWhat 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 one module in full instead — every function signature and every datatype it declares. The whole package is never returned; the 0x2 framework alone is around 484 KB. This method has no upstream paging, so a truncated index carries no cursor: the way past the cap is maxModules, then `module`, then suiGetFunction for a sing…
suiListDynamicFieldsDynamic fields of a Sui objectread-onlyWhatever 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 this answer; hand that field id to suiGetObjects and it comes back decoded. 50 rows unless asked otherwise and 200 at the outside, with a cursor for as long as the parent has more. Reads only.
suiListOwnedObjectsObjects owned by a Sui addressread-onlyEvery 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; when the node holds more, an opaque cursor comes back and expandResult returns the following page in this same shape. Reads only.
suiResolveNameSuiNS name and addressread-onlyResolve 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 and the record — target address included — is returned but must not be trusted as a destination; no_target_address, the name is registered and points nowhere; not_registered, the registry holds no record. All four are answers, not errors. Reverse is NOT the inverse: an address answers with its OWN default name, which nee…
suiSimulateTransactionSimulate a Sui transactionread-onlyRun 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 command's return values decoded, and any events it would emit. Takes the base64 BCS TransactionData your wallet or SDK produces — the same argument sui_dryRunTransactionBlock takes; no signature, and none is accepted. Nothing is broadcast: this server cannot reach Sui's execute rpc at all. `cursor` re-runs it unshaped thro…
suiWatchEventsWatch Sui Move eventsread-onlyFollow 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 since and returns the next one, so no event falls in the gap between two polls. That is the whole difference from getLogs, which scans a checkpoint range you name and cannot resume across calls. Filter by address (the emitting package[::module]), eventType and sender; rows and body keys are getLogs'. Sui executes about 4 …
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit
- Oct 22, 2026 (7 days ago)
- Last release
- Oct 22, 2026 (7 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- Registry name
io.github.w3tech/agent-rpc-mcp- Version
- 0.2.7
- Auth
- Bearer token, API key
- Packages
- npm @w3tech.io/agent-rpc-mcp
- License
- MIT
- Repository
- github.com/w3tech/agent-rpc-mcp-public
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
More from w3tech
Cite this page
Ankr Agent RPC MCP server. Agent Mart. https://agentmart.dev/connectors/w3tech-agent-rpc-mcp (last updated 2026-10-24)