Agents
Nine tools, three surfaces
The MCP server, the Pi extension and the OMP extension register the same nine tools, and every one of them goes through withProvider() with the operation's capability, so selection, keys and the one retry behave as in the CLI.
| Tool | Reads | Input |
|---|---|---|
explorers_providers | every registered provider with its capabilities and endpoint | none |
explorers_balance | native balance for one address or a list of up to twenty | address or address[] |
explorers_tx_history | normalized transactions involving an address | address, paging options |
explorers_tx_detail | one transaction by hash, OP_RETURN included on Mempool | hash |
explorers_contract | verification, compiler, creator, proxy, ABI and source metadata | address |
explorers_tokens | token holdings, optionally non-zero only | address, nonZeroOnly |
explorers_token_transfers | fungible transfers involving an address, one token or all | address, token, paging options |
explorers_gas | fee suggestions in the provider's unit | none |
explorers_block | one block by number | blockNumber |
Every tool takes an optional chain and provider. Addresses and ENS names are resolved before the read, so a model can pass vitalik.eth where it would pass hex. The answer is { provider, data } as JSON text, with provider naming the backend that actually answered, which after a retry is not always the first candidate.
MCP
explorers mcp
claude mcp add explorers --scope user -- npx -y @agntn/explorers mcp
Or in a client's config:
{
"mcpServers": {
"explorers": { "command": "npx", "args": ["-y", "@agntn/explorers", "mcp"] }
}
}
The server speaks MCP over stdio. createMcpServer() returns the same server for a host that brings its own transport. All nine tools carry readOnlyHint: true, because that is what they are: nothing here signs, sends or holds a key on the model's behalf.
Keys stay in the process
Keys come from the agent's process environment, ETHERSCAN_API_KEY and the rest, never from a tool argument. A model can choose a provider and a chain, it cannot supply a credential, and an error that reaches it has the key redacted already. A provider that needs a key the process does not have fails with an AuthError naming the provider, which a model can read and a session can survive.
Pi and OMP
omp install @agntn/explorers
pi install npm:@agntn/explorers
The package declares both extensions in package.json. Installing the OMP extension does not replace or reuse the Pi one; they are separate entrypoints that register the same nine tools and render their calls and results in the terminal. From a source checkout, omp install . links the local package.
What the answer is
The tools return the normalized objects, not prose. The Explorer shows the same objects for any public address, a quick way to check a model's summary of a wallet against the source.
functionName or a symbol become an instruction.