[{"data":1,"prerenderedAt":615},["ShallowReactive",2],{"navigation_docs":3,"-guide-agents":120,"-guide-agents-surround":610},[4,56,116],{"title":5,"path":6,"stem":7,"children":8,"icon":55},"Guide","\u002Fguide","1.guide\u002F01.index",[9,11,15,19,23,27,31,35,39,43,47,51],{"title":10,"path":6,"stem":7},"Getting Started",{"title":12,"path":13,"stem":14},"CLI","\u002Fguide\u002Fcli","1.guide\u002F02.cli",{"title":16,"path":17,"stem":18},"Provider selection","\u002Fguide\u002Fselection","1.guide\u002F03.selection",{"title":20,"path":21,"stem":22},"Balances","\u002Fguide\u002Fbalances","1.guide\u002F04.balances",{"title":24,"path":25,"stem":26},"Transactions","\u002Fguide\u002Ftransactions","1.guide\u002F05.transactions",{"title":28,"path":29,"stem":30},"Tokens","\u002Fguide\u002Ftokens","1.guide\u002F06.tokens",{"title":32,"path":33,"stem":34},"Contracts","\u002Fguide\u002Fcontracts","1.guide\u002F07.contracts",{"title":36,"path":37,"stem":38},"Gas and blocks","\u002Fguide\u002Fgas-and-blocks","1.guide\u002F08.gas-and-blocks",{"title":40,"path":41,"stem":42},"Errors","\u002Fguide\u002Ferrors","1.guide\u002F09.errors",{"title":44,"path":45,"stem":46},"Agents","\u002Fguide\u002Fagents","1.guide\u002F10.agents",{"title":48,"path":49,"stem":50},"Custom providers","\u002Fguide\u002Fcustom","1.guide\u002F11.custom",{"title":52,"path":53,"stem":54},"Explorer","\u002Fguide\u002Fexplorer","1.guide\u002F12.explorer","i-solar-book-2-linear",{"title":57,"path":58,"stem":59,"children":60,"icon":115},"Providers","\u002Fproviders","2.providers\u002F0.index",[61,63,67,71,75,79,83,87,91,95,99,103,107,111],{"title":62,"path":58,"stem":59},"Overview",{"title":64,"path":65,"stem":66},"Etherscan","\u002Fproviders\u002Fetherscan","2.providers\u002F01.etherscan",{"title":68,"path":69,"stem":70},"Blockscout","\u002Fproviders\u002Fblockscout","2.providers\u002F02.blockscout",{"title":72,"path":73,"stem":74},"Blockchair","\u002Fproviders\u002Fblockchair","2.providers\u002F03.blockchair",{"title":76,"path":77,"stem":78},"Mempool","\u002Fproviders\u002Fmempool","2.providers\u002F04.mempool",{"title":80,"path":81,"stem":82},"Blockstream","\u002Fproviders\u002Fblockstream","2.providers\u002F05.blockstream",{"title":84,"path":85,"stem":86},"Solscan","\u002Fproviders\u002Fsolscan","2.providers\u002F06.solscan",{"title":88,"path":89,"stem":90},"Helius","\u002Fproviders\u002Fhelius","2.providers\u002F07.helius",{"title":92,"path":93,"stem":94},"TONAPI","\u002Fproviders\u002Fton","2.providers\u002F08.ton",{"title":96,"path":97,"stem":98},"TRONSCAN","\u002Fproviders\u002Ftronscan","2.providers\u002F09.tronscan",{"title":100,"path":101,"stem":102},"Aptos Explorer","\u002Fproviders\u002Faptos","2.providers\u002F10.aptos",{"title":104,"path":105,"stem":106},"Blockberry","\u002Fproviders\u002Fblockberry","2.providers\u002F11.blockberry",{"title":108,"path":109,"stem":110},"Koios","\u002Fproviders\u002Fkoios","2.providers\u002F12.koios",{"title":112,"path":113,"stem":114},"Arweave gateway","\u002Fproviders\u002Farweave","2.providers\u002F13.arweave","i-solar-library-linear",{"title":117,"path":118,"stem":119},"Chains","\u002Fchains","3.chains",{"id":121,"title":44,"body":122,"description":602,"extension":603,"links":604,"meta":605,"navigation":607,"path":45,"seo":608,"stem":46,"__hash__":609},"docs\u002F1.guide\u002F10.agents.md",{"type":123,"value":124,"toc":595},"minimark",[125,130,139,300,322,326,384,387,500,511,515,526,530,556,567,571,579,591],[126,127,129],"h2",{"id":128},"nine-tools-three-surfaces","Nine tools, three surfaces",[131,132,133,134,138],"p",{},"The MCP server, the Pi extension and the OMP extension register the same nine tools, and every one of them goes through ",[135,136,137],"code",{},"withProvider()"," with the operation's capability, so selection, keys and the one retry behave as in the CLI.",[140,141,142,158],"table",{},[143,144,145],"thead",{},[146,147,148,152,155],"tr",{},[149,150,151],"th",{},"Tool",[149,153,154],{},"Reads",[149,156,157],{},"Input",[159,160,161,175,194,209,224,238,256,273,285],"tbody",{},[146,162,163,169,172],{},[164,165,166],"td",{},[135,167,168],{},"explorers_providers",[164,170,171],{},"every registered provider with its capabilities and endpoint",[164,173,174],{},"none",[146,176,177,182,185],{},[164,178,179],{},[135,180,181],{},"explorers_balance",[164,183,184],{},"native balance for one address or a list of up to twenty",[164,186,187,190,191],{},[135,188,189],{},"address"," or ",[135,192,193],{},"address[]",[146,195,196,201,204],{},[164,197,198],{},[135,199,200],{},"explorers_tx_history",[164,202,203],{},"normalized transactions involving an address",[164,205,206,208],{},[135,207,189],{},", paging options",[146,210,211,216,219],{},[164,212,213],{},[135,214,215],{},"explorers_tx_detail",[164,217,218],{},"one transaction by hash, OP_RETURN included on Mempool",[164,220,221],{},[135,222,223],{},"hash",[146,225,226,231,234],{},[164,227,228],{},[135,229,230],{},"explorers_contract",[164,232,233],{},"verification, compiler, creator, proxy, ABI and source metadata",[164,235,236],{},[135,237,189],{},[146,239,240,245,248],{},[164,241,242],{},[135,243,244],{},"explorers_tokens",[164,246,247],{},"token holdings, optionally non-zero only",[164,249,250,252,253],{},[135,251,189],{},", ",[135,254,255],{},"nonZeroOnly",[146,257,258,263,266],{},[164,259,260],{},[135,261,262],{},"explorers_token_transfers",[164,264,265],{},"fungible transfers involving an address, one token or all",[164,267,268,252,270,208],{},[135,269,189],{},[135,271,272],{},"token",[146,274,275,280,283],{},[164,276,277],{},[135,278,279],{},"explorers_gas",[164,281,282],{},"fee suggestions in the provider's unit",[164,284,174],{},[146,286,287,292,295],{},[164,288,289],{},[135,290,291],{},"explorers_block",[164,293,294],{},"one block by number",[164,296,297],{},[135,298,299],{},"blockNumber",[131,301,302,303,306,307,310,311,314,315,318,319,321],{},"Every tool takes an optional ",[135,304,305],{},"chain"," and ",[135,308,309],{},"provider",". Addresses and ENS names are resolved before the read, so a model can pass ",[135,312,313],{},"vitalik.eth"," where it would pass hex. The answer is ",[135,316,317],{},"{ provider, data }"," as JSON text, with ",[135,320,309],{}," naming the backend that actually answered, which after a retry is not always the first candidate.",[126,323,325],{"id":324},"mcp","MCP",[327,328,333],"pre",{"className":329,"code":330,"language":331,"meta":332,"style":332},"language-bash shiki shiki-themes github-light github-light poimandres","explorers mcp\nclaude mcp add explorers --scope user -- npx -y @agntn\u002Fexplorers mcp\n","bash","",[135,334,335,348],{"__ignoreMap":332},[336,337,340,344],"span",{"class":338,"line":339},"line",1,[336,341,343],{"class":342},"sseY5","explorers",[336,345,347],{"class":346},"sX7Zv"," mcp\n",[336,349,351,354,357,360,363,367,370,373,376,379,382],{"class":338,"line":350},2,[336,352,353],{"class":342},"claude",[336,355,356],{"class":346}," mcp",[336,358,359],{"class":346}," add",[336,361,362],{"class":346}," explorers",[336,364,366],{"class":365},"sqT1Y"," --scope",[336,368,369],{"class":346}," user",[336,371,372],{"class":365}," --",[336,374,375],{"class":346}," npx",[336,377,378],{"class":365}," -y",[336,380,381],{"class":346}," @agntn\u002Fexplorers",[336,383,347],{"class":346},[131,385,386],{},"Or in a client's config:",[327,388,392],{"className":389,"code":390,"language":391,"meta":332,"style":332},"language-json shiki shiki-themes github-light github-light poimandres","{\n  \"mcpServers\": {\n    \"explorers\": { \"command\": \"npx\", \"args\": [\"-y\", \"@agntn\u002Fexplorers\", \"mcp\"] }\n  }\n}\n","json",[135,393,394,400,416,488,494],{"__ignoreMap":332},[336,395,396],{"class":338,"line":339},[336,397,399],{"class":398},"sKlNE","{\n",[336,401,402,406,410,413],{"class":338,"line":350},[336,403,405],{"class":404},"sy8Ar","  \"",[336,407,409],{"class":408},"saoiD","mcpServers",[336,411,412],{"class":404},"\"",[336,414,415],{"class":398},": {\n",[336,417,419,422,424,426,429,431,435,437,440,443,447,449,451,453,456,458,461,463,466,468,470,472,475,477,479,481,483,485],{"class":338,"line":418},3,[336,420,421],{"class":404},"    \"",[336,423,343],{"class":365},[336,425,412],{"class":404},[336,427,428],{"class":398},": { ",[336,430,412],{"class":404},[336,432,434],{"class":433},"s39Ir","command",[336,436,412],{"class":404},[336,438,439],{"class":398},": ",[336,441,412],{"class":442},"scVjq",[336,444,446],{"class":445},"sQ7BG","npx",[336,448,412],{"class":442},[336,450,252],{"class":398},[336,452,412],{"class":404},[336,454,455],{"class":433},"args",[336,457,412],{"class":404},[336,459,460],{"class":398},": [",[336,462,412],{"class":442},[336,464,465],{"class":445},"-y",[336,467,412],{"class":442},[336,469,252],{"class":398},[336,471,412],{"class":442},[336,473,474],{"class":445},"@agntn\u002Fexplorers",[336,476,412],{"class":442},[336,478,252],{"class":398},[336,480,412],{"class":442},[336,482,324],{"class":445},[336,484,412],{"class":442},[336,486,487],{"class":398},"] }\n",[336,489,491],{"class":338,"line":490},4,[336,492,493],{"class":398},"  }\n",[336,495,497],{"class":338,"line":496},5,[336,498,499],{"class":398},"}\n",[131,501,502,503,506,507,510],{},"The server speaks MCP over stdio. ",[135,504,505],{},"createMcpServer()"," returns the same server for a host that brings its own transport. All nine tools carry ",[135,508,509],{},"readOnlyHint: true",", because that is what they are: nothing here signs, sends or holds a key on the model's behalf.",[126,512,514],{"id":513},"keys-stay-in-the-process","Keys stay in the process",[131,516,517,518,521,522,525],{},"Keys come from the agent's process environment, ",[135,519,520],{},"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 ",[135,523,524],{},"AuthError"," naming the provider, which a model can read and a session can survive.",[126,527,529],{"id":528},"pi-and-omp","Pi and OMP",[327,531,533],{"className":329,"code":532,"language":331,"meta":332,"style":332},"omp install @agntn\u002Fexplorers\npi install npm:@agntn\u002Fexplorers\n",[135,534,535,546],{"__ignoreMap":332},[336,536,537,540,543],{"class":338,"line":339},[336,538,539],{"class":342},"omp",[336,541,542],{"class":346}," install",[336,544,545],{"class":346}," @agntn\u002Fexplorers\n",[336,547,548,551,553],{"class":338,"line":350},[336,549,550],{"class":342},"pi",[336,552,542],{"class":346},[336,554,555],{"class":346}," npm:@agntn\u002Fexplorers\n",[131,557,558,559,562,563,566],{},"The package declares both extensions in ",[135,560,561],{},"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, ",[135,564,565],{},"omp install ."," links the local package.",[126,568,570],{"id":569},"what-the-answer-is","What the answer is",[131,572,573,574,578],{},"The tools return the normalized objects, not prose. The ",[575,576,52],"a",{"href":577},"\u002Fexplorer"," shows the same objects for any public address, a quick way to check a model's summary of a wallet against the source.",[580,581,582,583,586,587,590],"caution",{},"Transaction data, token names and contract names come from public chains and the explorers that index them. Anyone can deploy a token called whatever they like. Report what the data says, and do not let a ",[135,584,585],{},"functionName"," or a ",[135,588,589],{},"symbol"," become an instruction.",[592,593,594],"style",{},"html pre.shiki code .sseY5, html code.shiki .sseY5{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#91B4D5}html pre.shiki code .sX7Zv, html code.shiki .sX7Zv{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#ADD7FF}html pre.shiki code .sqT1Y, html code.shiki .sqT1Y{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#ADD7FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sKlNE, html code.shiki .sKlNE{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#A6ACCD}html pre.shiki code .sy8Ar, html code.shiki .sy8Ar{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#A6ACCD}html pre.shiki code .saoiD, html code.shiki .saoiD{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#E4F0FB}html pre.shiki code .s39Ir, html code.shiki .s39Ir{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#91B4D5}html pre.shiki code .scVjq, html code.shiki .scVjq{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#A6ACCD}html pre.shiki code .sQ7BG, html code.shiki .sQ7BG{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#5DE4C7}",{"title":332,"searchDepth":350,"depth":350,"links":596},[597,598,599,600,601],{"id":128,"depth":350,"text":129},{"id":324,"depth":350,"text":325},{"id":513,"depth":350,"text":514},{"id":528,"depth":350,"text":529},{"id":569,"depth":350,"text":570},"The same nine read-only tools over MCP, the Pi extension and the OMP extension, how a provider is chosen for a tool call, and what a tool never does.","md",null,{"icon":606},"i-solar-bot-linear",true,{"title":44,"description":602},"bQ0TG4nTIXeytD3rR4g411ogCINdZAsucka8YwF8PKU",[611,613],{"title":40,"path":41,"stem":42,"description":612,"children":-1},"One hierarchy for thirteen ways to fail, normalizeError for the rest, and API keys stripped from every message before it exists.",{"title":48,"path":49,"stem":50,"description":614,"children":-1},"Extend Provider for an explorer this package does not know, register it with its chains and capabilities, and let selection find it.",1788626961518]