mcpField
C
chainlens

chainlens

Local
github.com/CloudCorpRecordsFinance0Updated 1w ago

About chainlens

chainlens queries EVM chain data through Blockscout for developers and agents inspecting addresses, transactions, and contracts. It includes six built-in chains and tools for blocks, tokens, NFTs, and verified contract data.

Key features

  1. 01Query six built-in EVM chains
  2. 02Retrieve address balances and transactions
  3. 03Inspect blocks and transaction details
  4. 04View token balances, transfers, and NFTs
  5. 05Retrieve verified contract ABIs and source
  6. 06Read contract methods and call APIs

Use cases

  1. 01Check tokens and NFTs held by an address
  2. 02Track address transactions and token transfers
  3. 03Inspect block or transaction details
  4. 04Read data from verified contracts

MCP support

The MCP server provides Blockscout data-query tools for chains, addresses, blocks, transactions, tokens, NFTs, and contracts. Apart from local tools such as chain-list filtering, queries use each chain's public Blockscout API v2.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"cloudcorprecords-chainlens": {
"command": "npx",
"args": [
"-y",
"@reneturcios/chainlens"
]
}
}
}
Run commandnpx -y @reneturcios/chainlens

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
npm@reneturcios/chainlens0.1.0
ocighcr.io/cloudcorprecords/chainlens:0.1.0

Tools

16

Saved tool list · updated 1w ago

This tool takes no parameters.

Details

From the project README

chainlens

chainlens looks into EVM blockchains through Blockscout: what an address holds and has done, what is in a block or a transaction, which tokens and NFTs sit in a wallet, and what a verified contract's ABI and source say. Six chains are built in — Ethereum, Optimism, Gnosis, Polygon, Base, and Arbitrum One — and every answer comes from that chain's public Blockscout API v2 instance.

This package is a clean-room rebuild of the 16 tools documented in the README of the original Blockscout MCP server. The full documented set is covered; the wire mapping is described below, including the parts that are reconstructions.

How it talks to the service

No API key is required — public Blockscout instances are keyless:

# Optional: send a key as an x-api-key header
export BLOCKSCOUT_API_KEY="your key"
# Optional: override the per-chain base URL for any chain
export BLOCKSCOUT_API_URL="https://eth.blockscout.com/api/v2"

The base URL is chosen per chain_id from a built-in map: 1 Ethereum, 10 Optimism, 100 Gnosis, 137 Polygon, 8453 Base, 42161 Arbitrum One. An unknown chain_id is an error naming the known chains (unless BLOCKSCOUT_API_URL is set, in which case the override wins for any chain).

Wire-format notes. The original server routes most data tools through its PRO gateway; this rebuild maps them onto the public Blockscout API v2 (/addresses/..., /blocks/..., /transactions/..., /smart-contracts/..., /search). A few shapings are documented reconstructions and first live-smoke checks:

  • ENS resolution uses mainnet /search?q=<name> and picks the first result carrying an address.
  • read_contract POSTs {function_name, args, abi} to /smart-contracts/{address}/methods/read — the least-proven mapping.
  • cursor arguments are forwarded as a cursor query parameter; Blockscout v2 paging normally uses next_page_params, so cursor support is a drift risk.
  • age_from / age_to (and methods / token) filters are applied client-side over the first fetched page, not forwarded upstream.

Two tools never touch the network: __unlock_blockchain_analysis__ returns local guidance plus the chain list, and get_chains_list filters that list locally by name, chain id, or currency substring.

Install

npx @reneturcios/chainlens get_block_number '{"chain_id":"1"}'

Or run the container image:

docker run -i ghcr.io/cloudcorprecords/chainlens

The container defaults to the MCP server. Pass CLI arguments to use it as a CLI instead.

CLI

The CLI mirrors the tools: one subcommand per tool, taking its arguments as a single JSON object.

chainlens get_chains_list '{"query":"base"}'
chainlens get_address_info '{"chain_id":"1","address":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"}'
chainlens get_transactions_by_address '{"chain_id":"1","address":"0x...","age_from":"2026-10-01T00:00:00Z","age_to":"2026-10-26T23:59:59Z"}'
chainlens get_block_info '{"chain_id":"8453","number_or_hash":"latest"}'
chainlens --version

Exit codes: 0 on success, 1 on an API or validation error (the error names the problem), 2 for usage errors.

MCP server

One bin serves both faces. The mcp subcommand starts a stdio MCP server:

npx -y @reneturcios/chainlens mcp

MCP client configuration:

{
  "mcpServers": {
    "chainlens": {
      "command": "npx",
      "args": ["-y", "@reneturcios/chainlens", "mcp"]
    }
  }
}
Tools
ToolInputWhat it does
__unlock_blockchain_analysis__—Local: returns status, guidance, and the supported chain list.
get_chains_listqueryLocal: the 6-chain list filtered by a name/id/currency substring.
get_address_by_ens_namename (required)Resolve an ENS name via mainnet search; returns the first result with an address.
lookup_token_by_symbolchain_id, symbol (required)Search a chain; returns token-type items (fallback: all items).
get_contract_abichain_id, address (required)The ABI of a verified contract.
inspect_contract_codechain_id, address (required), file_nameSource code and creation status of a verified contract.
get_address_infochain_id, address (required)Address balance, type, and metadata.
get_tokens_by_addresschain_id, address (required), cursorToken balances held by an address.
get_block_numberchain_id (required), datetimeLatest block number and timestamp; echoes the requested datetime.
get_transactions_by_addresschain_id, address, age_from, age_to (required), methods, cursorAddress transactions; age and method filters applied client-side over the first page.
get_token_transfers_by_addresschain_id, address, age_from, age_to (required), token, cursorERC-20 transfers; age and token filters applied client-side over the first page.
nft_tokens_by_addresschain_id, address (required), cursorNFT tokens (ERC-721, ERC-1155) held by an address.
get_block_infochain_id, number_or_hash (required), include_transactionsBlock details by number or hash.
get_transaction_infochain_id, hash (required), include_raw_inputTransaction details by hash.
read_contractchain_id, address, abi, function_name (required), args (JSON string, default []), blockRead a contract function (reconstructed wire mapping, see notes).
direct_api_callchain_id, endpoint_path (required), query_params, method, json_body, cursorCall any Blockscout API v2 endpoint path directly.

Development

npm install
npm run build   # tsc -> dist/
npm test        # node test runner over test/*.test.ts, fake fetch only, no network
npm run dev     # run the CLI from source via tsx

License

MIT — see LICENSE.

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.