Agent skill

Multicall

by Nethereum in Nethereum/Nethereum

Batch multiple smart contract queries into a single call using Nethereum Multicall (.NET).

MITAuto-check passedBackend & APIs

Install Multicall

skills CLI
$ npx skills add Nethereum/Nethereum --skill multicall -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Nethereum/Nethereum multicall --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Nethereum/Nethereum.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/nethereum-skills/skills/multicall .claude/skills/multicall && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
multicall
GitHub stars
2.3k
Token cost
~1.9k tokens
SKILL.md length
307 words
Files
1
Skills in repo
71
Repo updated
First seen
Licence
MIT

At a glance

Batch multiple smart contract queries into a single call using Nethereum Multicall (.NET).

  • Works in 2 steps: Define Function and Output DTOs → Create MulticallInputOutput pairs
  • The user asks about batching contract calls
  • SKILL.md covers Key Namespaces, Step 1: Define Function and…, Step 2: Create… and Step 3a: Execute via Multicall…, plus 8 more sections
  • Reaches mainnet.infura.io

What it does

Multicall is an agent skill from Nethereum/Nethereum. Batch multiple smart contract queries into a single call using Nethereum Multicall (.NET). Use this skill whenever the user asks about batching contract calls, multicall, multiple balances query, batch RPC requests, or aggregating read operations with C or .NET.

Its SKILL.md is about 1.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Backend & APIs, covering Smart contracts. It works with .NET and C#. The repository describes itself as: Ethereum .Net cross platform integration library. The licence is MIT.

When your agent uses it

  • The user asks about batching contract calls
  • Multiple balances query
  • Batch RPC requests
  • Aggregating read operations with C

Example prompts

  • “/multicall”

Workflow steps

2 steps, taken from the step headings in SKILL.md.

  1. Define Function and Output DTOs
  2. Create MulticallInputOutput pairs

What it can do on your machine

Read from SKILL.md and the folder at commit 229f278. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are csharp).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • mainnet.infura.io

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Multicall loads about 1.9k tokens when it runs. Until then it costs about 68 tokens; SKILL.md has 307 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~68
When it runs · the whole SKILL.md, loaded when a task matches
~1.9k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from Nethereum/Nethereum at commit 229f278, republished under its MIT licence (© Nethereum). 307 words, ~1,877 tokens.

Download SKILL.mdSave it as .claude/skills/multicall/SKILL.md (or your agent's skills folder).
name
multicall
description
Batch multiple smart contract queries into a single call using Nethereum Multicall (.NET). Use this skill whenever the user asks about batching contract calls, multicall, multiple balances query, batch RPC requests, or aggregating read operations with C# or .NET.
user-invocable
true

Multicall & Batch Queries with Nethereum

NuGet: Nethereum.Web3

Key Namespaces

csharp
using Nethereum.ABI.FunctionEncoding.Attributes;
using Nethereum.Contracts;
using Nethereum.Contracts.QueryHandlers.MultiCall;

Step 1: Define Function and Output DTOs

csharp
[Function("balanceOf", "uint256")]
public class BalanceOfFunction : FunctionMessage
{
    [Parameter("address", "owner", 1)]
    public string Owner { get; set; }
}

[FunctionOutput]
public class BalanceOfOutputDTO : IFunctionOutputDTO
{
    [Parameter("uint256", "balance", 1)]
    public BigInteger Balance { get; set; }
}

Step 2: Create MulticallInputOutput pairs

Each pair binds a function message (input) with its output DTO and a target contract address:

csharp
var balanceOfMessage1 = new BalanceOfFunction()
{
    Owner = "0x5d3a536e4d6dbd6114cc1ead35777bab948e3643"
};
var call1 = new MulticallInputOutput<BalanceOfFunction, BalanceOfOutputDTO>(
    balanceOfMessage1,
    "0x6b175474e89094c44da98b954eedeac495271d0f"); // DAI contract

var balanceOfMessage2 = new BalanceOfFunction()
{
    Owner = "0x6c6bc977e13df9b0de53b251522280bb72383700"
};
var call2 = new MulticallInputOutput<BalanceOfFunction, BalanceOfOutputDTO>(
    balanceOfMessage2,
    "0x6b175474e89094c44da98b954eedeac495271d0f"); // DAI contract

Step 3a: Execute via Multicall Contract (single eth_call)

Uses the on-chain Multicall3 contract to aggregate calls into one eth_call:

csharp
var web3 = new Web3("https://mainnet.infura.io/v3/YOUR-PROJECT-ID");

await web3.Eth.GetMultiQueryHandler().MultiCallAsync(call1, call2);

Console.WriteLine($"Balance 1: {call1.Output.Balance}");
Console.WriteLine($"Balance 2: {call2.Output.Balance}");

Source: MultiCallTest.ShouldCheckBalanceOfMultipleAccounts

Custom Multicall address
csharp
var handler = web3.Eth.GetMultiQueryHandler("0xYourMulticallAddress");
await handler.MultiCallV1Async(call1, call2);

Step 3b: Execute via RPC Batch (no on-chain contract)

Sends individual eth_call requests in a single JSON-RPC batch:

csharp
var web3 = new Web3("https://mainnet.infura.io/v3/YOUR-PROJECT-ID");

await web3.Eth.GetMultiQueryBatchRpcHandler().MultiCallAsync(call1, call2);

Console.WriteLine($"Balance 1: {call1.Output.Balance}");
Console.WriteLine($"Balance 2: {call2.Output.Balance}");

Source: MultiCallTest.ShouldCheckBalanceOfMultipleAccountsUsingRpcBatch

Manual batch items for advanced scenarios
csharp
var multiQueryBatchRpcHandler = web3.Eth.GetMultiQueryBatchRpcHandler();

var batchItems = multiQueryBatchRpcHandler
    .CreateMulticallInputOutputRpcBatchItems(0, call1, call2);

Choosing Between Approaches

  • Multicall contract -- single eth_call, guarantees atomic read at same block, requires Multicall3 deployed on the network.
  • RPC batch -- single HTTP request with multiple eth_call, works on any chain without an on-chain contract.

Use Multicall on public networks (Mainnet, Sepolia, Polygon, etc.) where Multicall3 is available. Use RPC batch on private/app chains or when combining with other RPC calls.

Querying Multiple Different Functions

You can mix different function types in the same batch. Each MulticallInputOutput pair is independent:

csharp
[Function("name", "string")]
public class NameFunction : FunctionMessage { }

[FunctionOutput]
public class NameOutputDTO : IFunctionOutputDTO
{
    [Parameter("string", "", 1)]
    public string Name { get; set; }
}

[Function("totalSupply", "uint256")]
public class TotalSupplyFunction : FunctionMessage { }

[FunctionOutput]
public class TotalSupplyOutputDTO : IFunctionOutputDTO
{
    [Parameter("uint256", "", 1)]
    public BigInteger TotalSupply { get; set; }
}

var nameCall = new MulticallInputOutput<NameFunction, NameOutputDTO>(
    new NameFunction(), daiAddress);
var supplyCall = new MulticallInputOutput<TotalSupplyFunction, TotalSupplyOutputDTO>(
    new TotalSupplyFunction(), daiAddress);
var balanceCall = new MulticallInputOutput<BalanceOfFunction, BalanceOfOutputDTO>(
    new BalanceOfFunction { Owner = userAddress }, daiAddress);

await web3.Eth.GetMultiQueryHandler().MultiCallAsync(nameCall, supplyCall, balanceCall);

Console.WriteLine($"Token: {nameCall.Output.Name}");
Console.WriteLine($"Supply: {supplyCall.Output.TotalSupply}");
Console.WriteLine($"Balance: {balanceCall.Output.Balance}");

Querying Multiple Contracts

Pass different contract addresses to each MulticallInputOutput:

csharp
var daiBalance = new MulticallInputOutput<BalanceOfFunction, BalanceOfOutputDTO>(
    new BalanceOfFunction { Owner = userAddress },
    "0x6b175474e89094c44da98b954eedeac495271d0f"); // DAI

var usdcBalance = new MulticallInputOutput<BalanceOfFunction, BalanceOfOutputDTO>(
    new BalanceOfFunction { Owner = userAddress },
    "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"); // USDC

var wethBalance = new MulticallInputOutput<BalanceOfFunction, BalanceOfOutputDTO>(
    new BalanceOfFunction { Owner = userAddress },
    "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"); // WETH

await web3.Eth.GetMultiQueryHandler().MultiCallAsync(daiBalance, usdcBalance, wethBalance);

Block Parameter Support

Query at a specific block height:

csharp
var handler = web3.Eth.GetMultiQueryBatchRpcHandler();
await handler.MultiCallAsync(
    new Nethereum.RPC.Eth.DTOs.BlockParameter(15000000),
    MultiQueryBatchRpcHandler.DEFAULT_CALLS_PER_REQUEST,
    call1, call2);

MulticallInput vs MulticallInputOutput

  • MulticallInputOutput<TFunction, TOutput> -- use when you need decoded output (most common). Results are decoded into call.Output.
  • MulticallInput<TFunction> -- use when you only need to send a call but don't need to decode the output.

Both implement IMulticallInput and work with both handlers.

MultiSend (Batched Write Transactions)

Unlike Multicall (read-only), MultiSend batches write transactions through a GnosisSafe-style MultiSend contract:

csharp
using Nethereum.Contracts.TransactionHandlers.MultiSend;

var input1 = new MultiSendFunctionInput<TransferFunction>(
    new TransferFunction { To = recipient1, Value = amount1 }, tokenAddress1);
var input2 = new MultiSendFunctionInput<TransferFunction>(
    new TransferFunction { To = recipient2, Value = amount2 }, tokenAddress2);

var multiSendFunction = new MultiSendFunction(new IMultiSendInput[] { input1, input2 });

Reference

  • MulticallInputOutput<TFunctionInput, TFunctionOutput> -- pairs a function message with its output DTO and target address
  • MulticallInput<TFunction> -- input-only wrapper (no output decoding)
  • MultiSendFunction -- batched write transactions via MultiSend contract
  • MultiSendFunctionInput<T> -- wraps function message with target and value for MultiSend
  • web3.Eth.GetMultiQueryHandler() -- returns handler using on-chain Multicall contract
  • web3.Eth.GetMultiQueryBatchRpcHandler() -- returns handler using JSON-RPC batching
  • MultiQueryBatchRpcHandler.DEFAULT_CALLS_PER_REQUEST -- default page size (3000)
  • CreateMulticallInputOutputRpcBatchItems() -- creates batch items for manual composition

© Nethereum, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in plugins/nethereum-skills/skills/multicall of Nethereum/Nethereum.

Open the folder on GitHubat commit 229f278

Compare with similar skills

Multicall next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Multicall compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Multicall this skillNethereum/Nethereum2.3k—~1.9kAutomated safety check: PassMIT
.NET API Compatibility DesignAaronontheweb/dotnet-skills1.2k2 repos~2.7kAutomated safety check: PassMIT
Tsp Csharpquerylenshq/ef-querylens225—~1.3kAutomated safety check: PassMIT
XML DocumentationVonage/vonage-dotnet-sdk118—~2.7kAutomated safety check: PassApache-2.0
Dotnet 10 Csharp 14sketch7/FluentlyHttpClient121—~2.2kAutomated safety check: PassMIT
DisCatSharp Discord DevelopmentAiko-IT-Systems/DisCatSharp140—~1.2kAutomated safety check: PassMIT

Similar skills

  • .NET API Compatibility Design

    Aaronontheweb/dotnet-skills

    Applies extend-only design rules to NuGet packages and distributed systems, covering source, binary and wire compatibility and how to deprecate members safely.

    1.2k GitHub starsUsed in 2 repos~2.7k tokens
    Backend & APIsAuto-check passed
  • Tsp Csharp

    querylenshq/ef-querylens

    Comprehensive C and .NET development skill for TSP projects.

    225 GitHub stars~1.3k tokensUpdated 1 mo ago
    Backend & APIsAuto-check passed
  • XML Documentation

    Vonage/vonage-dotnet-sdk

    Improve XML documentation in the Vonage .NET SDK. An agent skill from Vonage/vonage-dotnet-sdk.

    118 GitHub stars~2.7k tokensUpdated 3 mo ago
    Backend & APIsAuto-check passed
  • Dotnet 10 Csharp 14

    sketch7/FluentlyHttpClient

    A skill your agent uses when building .NET 10 or C 14 applications; when using minimal APIs, modular monolith patterns, or feature folders; when implementing HTTP resilience, Options pattern…

    121 GitHub stars~2.2k tokensUpdated 19 days ago
    Backend & APIsAuto-check passed
  • DisCatSharp Discord Development

    Aiko-IT-Systems/DisCatSharp

    Helps build, explain and troubleshoot C# Discord apps on DisCatSharp, answering from the project's installed version and the library's documentation rather than guesses.

    140 GitHub stars~1.2k tokensUpdated 2 days ago
    Backend & APIsAuto-check passed
  • Foundationdb Advanced Layers

    SnowBankSDK/foundationdb-dotnet-client

    Advanced engineering for sophisticated FoundationDB layers with the .NET client (FoundationDB.Client / SnowBank) — the cluster model and transaction lifecycle (proxies, resolvers, tlogs, storage…

    158 GitHub stars~3.4k tokensUpdated 6 days ago
    Backend & APIsAuto-check passed

More from Nethereum/Nethereum

All 71 skills in this repo
  • Aa Batching Paymasters

    Nethereum/Nethereum

    Help users batch multiple calls into a single UserOperation and sponsor gas with paymasters using Nethereum Account Abstraction.

    2.3k GitHub stars~1.5k tokensUpdated 2 days ago
    Auto-check passed
  • Aa Bundler

    Nethereum/Nethereum

    Help users run an ERC-4337 bundler using Nethereum — set up in-process or standalone bundlers with mempool, validation, reputation, and JSON-RPC server.

    2.3k GitHub stars~1.2k tokensUpdated 2 days ago
    Auto-check passed
  • Abi Encoding

    Nethereum/Nethereum

    Encode and decode Ethereum ABI data with Nethereum. An agent skill from Nethereum/Nethereum.

    2.3k GitHub stars~1.3k tokensUpdated 2 days ago
    Auto-check passed
  • Abi Retrieval

    Nethereum/Nethereum

    Fetch contract ABIs from Sourcify, Etherscan, and 4Byte Directory using the composite ABIInfoStorage pattern (.NET/C).

    2.3k GitHub stars~1.5k tokensUpdated 2 days ago
    Auto-check passed
  • Account Abstraction

    Nethereum/Nethereum

    Help users implement ERC-4337 Account Abstraction with Nethereum — send UserOperations, use smart accounts, route contract calls through a bundler, enable gasless transactions, or work with AA in…

    2.3k GitHub stars~1.7k tokensUpdated 2 days ago
    Auto-check passed
  • Address Utils

    Nethereum/Nethereum

    Validate and format Ethereum addresses with Nethereum. An agent skill from Nethereum/Nethereum.

    2.3k GitHub stars~1.2k tokensUpdated 2 days ago
    Auto-check passed

Works with

Categories

Questions about Multicall

What does Multicall do?

Batch multiple smart contract queries into a single call using Nethereum Multicall (.NET). Multicall is an agent skill from Nethereum/Nethereum.NET).

When should I use Multicall?

Multicall fits situations like: the user asks about batching contract calls; multiple balances query; batch RPC requests; aggregating read operations with C.

How do I install Multicall in Claude Code?

Run `npx skills add Nethereum/Nethereum --skill multicall -a claude-code`. Or copy the skill folder (plugins/nethereum-skills/skills/multicall in Nethereum/Nethereum) into .claude/skills/multicall in your project. Claude Code loads it when a task matches its description.

How do I install Multicall in Codex?

Run `npx skills add Nethereum/Nethereum --skill multicall -a codex`. Or copy the skill folder (plugins/nethereum-skills/skills/multicall in Nethereum/Nethereum) into .agents/skills/multicall in your project. Codex loads it when a task matches its description.

Can I use Multicall in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Nethereum/Nethereum --skill multicall -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/multicall, .gemini/skills/multicall, .github/skills/multicall and .opencode/skills/multicall in your project.

What does Multicall need to run?

SKILL.md names no scripts, command-line tools or credentials: Multicall is instructions for the agent only.

Does Multicall access the network?

SKILL.md names 1 domain. In commands or code: mainnet.infura.io; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Multicall safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Multicall use?

Multicall is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Multicall use?

About 1.9k tokens (SKILL.md is roughly 7.5k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Multicall?

Skills that share tags, products or a category with Multicall: .NET API Compatibility Design (Aaronontheweb/dotnet-skills, 1.2k stars), Tsp Csharp (querylenshq/ef-querylens, 225 stars), XML Documentation (Vonage/vonage-dotnet-sdk, 118 stars) and Dotnet 10 Csharp 14 (sketch7/FluentlyHttpClient, 121 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Multicall?

Nethereum (a GitHub organization) maintains it in Nethereum/Nethereum, which has 2,260 GitHub stars. The repository holds 71 skills in this directory. The repository was last updated on October 5, 2026.

Source: Nethereum/Nethereum on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.