web3-tools-mcp 2.0.1 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/CHANGELOG.md +117 -0
  2. package/README.md +5 -0
  3. package/dist/anvil.d.ts +17 -19
  4. package/dist/anvil.d.ts.map +1 -1
  5. package/dist/anvil.js +124 -228
  6. package/dist/anvil.js.map +1 -1
  7. package/dist/chains.d.ts +9 -1
  8. package/dist/chains.d.ts.map +1 -1
  9. package/dist/chains.js +11 -2
  10. package/dist/chains.js.map +1 -1
  11. package/dist/client.d.ts.map +1 -1
  12. package/dist/client.js.map +1 -1
  13. package/dist/context.d.ts +22 -0
  14. package/dist/context.d.ts.map +1 -0
  15. package/dist/context.js +24 -0
  16. package/dist/context.js.map +1 -0
  17. package/dist/hosted.d.ts +12 -0
  18. package/dist/hosted.d.ts.map +1 -0
  19. package/dist/hosted.js +12 -0
  20. package/dist/hosted.js.map +1 -0
  21. package/dist/http-server.d.ts +13 -0
  22. package/dist/http-server.d.ts.map +1 -1
  23. package/dist/http-server.js +13 -4
  24. package/dist/http-server.js.map +1 -1
  25. package/dist/index.js +19 -15
  26. package/dist/index.js.map +1 -1
  27. package/dist/lib.d.ts +24 -0
  28. package/dist/lib.d.ts.map +1 -0
  29. package/dist/lib.js +23 -0
  30. package/dist/lib.js.map +1 -0
  31. package/dist/log.d.ts +16 -0
  32. package/dist/log.d.ts.map +1 -0
  33. package/dist/log.js +20 -0
  34. package/dist/log.js.map +1 -0
  35. package/dist/mcp-server.d.ts +4 -0
  36. package/dist/mcp-server.d.ts.map +1 -0
  37. package/dist/mcp-server.js +43 -0
  38. package/dist/mcp-server.js.map +1 -0
  39. package/dist/oauth.d.ts +41 -6
  40. package/dist/oauth.d.ts.map +1 -1
  41. package/dist/oauth.js +75 -41
  42. package/dist/oauth.js.map +1 -1
  43. package/dist/preview.d.ts +7 -0
  44. package/dist/preview.d.ts.map +1 -1
  45. package/dist/preview.js +14 -2
  46. package/dist/preview.js.map +1 -1
  47. package/dist/signing-requests.d.ts +81 -0
  48. package/dist/signing-requests.d.ts.map +1 -0
  49. package/dist/signing-requests.js +138 -0
  50. package/dist/signing-requests.js.map +1 -0
  51. package/dist/tools/index.d.ts +27 -1
  52. package/dist/tools/index.d.ts.map +1 -1
  53. package/dist/tools/index.js +37 -15
  54. package/dist/tools/index.js.map +1 -1
  55. package/dist/tools/{advanced.d.ts → read/advanced.d.ts} +30 -26
  56. package/dist/tools/read/advanced.d.ts.map +1 -0
  57. package/dist/tools/{advanced.js → read/advanced.js} +10 -10
  58. package/dist/tools/read/advanced.js.map +1 -0
  59. package/dist/tools/{balance.d.ts → read/balance.d.ts} +8 -7
  60. package/dist/tools/read/balance.d.ts.map +1 -0
  61. package/dist/tools/{balance.js → read/balance.js} +2 -2
  62. package/dist/tools/read/balance.js.map +1 -0
  63. package/dist/tools/{contract-info.d.ts → read/contract-info.d.ts} +18 -15
  64. package/dist/tools/read/contract-info.d.ts.map +1 -0
  65. package/dist/tools/{contract-info.js → read/contract-info.js} +2 -2
  66. package/dist/tools/read/contract-info.js.map +1 -0
  67. package/dist/tools/{contract.d.ts → read/contract.d.ts} +14 -12
  68. package/dist/tools/read/contract.d.ts.map +1 -0
  69. package/dist/tools/{contract.js → read/contract.js} +2 -2
  70. package/dist/tools/read/contract.js.map +1 -0
  71. package/dist/tools/{ens.d.ts → read/ens.d.ts} +30 -25
  72. package/dist/tools/read/ens.d.ts.map +1 -0
  73. package/dist/tools/{ens.js → read/ens.js} +2 -2
  74. package/dist/tools/read/ens.js.map +1 -0
  75. package/dist/tools/read/gas.d.ts +171 -0
  76. package/dist/tools/read/gas.d.ts.map +1 -0
  77. package/dist/tools/read/gas.js +368 -0
  78. package/dist/tools/read/gas.js.map +1 -0
  79. package/dist/tools/{logs.d.ts → read/logs.d.ts} +6 -5
  80. package/dist/tools/read/logs.d.ts.map +1 -0
  81. package/dist/tools/{logs.js → read/logs.js} +2 -2
  82. package/dist/tools/read/logs.js.map +1 -0
  83. package/dist/tools/{signatures.d.ts → read/signatures.d.ts} +8 -4
  84. package/dist/tools/read/signatures.d.ts.map +1 -0
  85. package/dist/tools/{signatures.js → read/signatures.js} +1 -1
  86. package/dist/tools/read/signatures.js.map +1 -0
  87. package/dist/tools/read/signing.d.ts +27 -0
  88. package/dist/tools/read/signing.d.ts.map +1 -0
  89. package/dist/tools/read/signing.js +75 -0
  90. package/dist/tools/read/signing.js.map +1 -0
  91. package/dist/tools/sign/errors.d.ts +9 -0
  92. package/dist/tools/sign/errors.d.ts.map +1 -0
  93. package/dist/tools/sign/errors.js +29 -0
  94. package/dist/tools/sign/errors.js.map +1 -0
  95. package/dist/tools/{transactions.d.ts → sign/transactions.d.ts} +48 -62
  96. package/dist/tools/sign/transactions.d.ts.map +1 -0
  97. package/dist/tools/sign/transactions.js +316 -0
  98. package/dist/tools/sign/transactions.js.map +1 -0
  99. package/dist/tools/sign/wallet.d.ts +50 -0
  100. package/dist/tools/sign/wallet.d.ts.map +1 -0
  101. package/dist/tools/sign/wallet.js +180 -0
  102. package/dist/tools/sign/wallet.js.map +1 -0
  103. package/dist/utils.d.ts +5 -2
  104. package/dist/utils.d.ts.map +1 -1
  105. package/dist/utils.js +5 -2
  106. package/dist/utils.js.map +1 -1
  107. package/dist/wallet-client.d.ts +33 -4
  108. package/dist/wallet-client.d.ts.map +1 -1
  109. package/dist/wallet-client.js +90 -24
  110. package/dist/wallet-client.js.map +1 -1
  111. package/dist/walletconnect.d.ts +111 -13
  112. package/dist/walletconnect.d.ts.map +1 -1
  113. package/dist/walletconnect.js +248 -68
  114. package/dist/walletconnect.js.map +1 -1
  115. package/package.json +10 -4
  116. package/src/anvil.ts +150 -271
  117. package/src/chains.ts +14 -2
  118. package/src/client.ts +0 -1
  119. package/src/context.ts +27 -0
  120. package/src/hosted.ts +11 -0
  121. package/src/http-server.ts +30 -5
  122. package/src/index.ts +19 -16
  123. package/src/lib.ts +24 -0
  124. package/src/log.ts +25 -0
  125. package/src/mcp-server.ts +47 -0
  126. package/src/oauth.ts +98 -45
  127. package/src/preview.ts +21 -2
  128. package/src/signing-requests.ts +198 -0
  129. package/src/tools/index.ts +67 -16
  130. package/src/tools/{advanced.ts → read/advanced.ts} +13 -11
  131. package/src/tools/{balance.ts → read/balance.ts} +3 -3
  132. package/src/tools/{contract-info.ts → read/contract-info.ts} +3 -3
  133. package/src/tools/{contract.ts → read/contract.ts} +3 -3
  134. package/src/tools/{ens.ts → read/ens.ts} +3 -3
  135. package/src/tools/read/gas.ts +480 -0
  136. package/src/tools/{logs.ts → read/logs.ts} +3 -3
  137. package/src/tools/{signatures.ts → read/signatures.ts} +2 -2
  138. package/src/tools/read/signing.ts +86 -0
  139. package/src/tools/sign/errors.ts +28 -0
  140. package/src/tools/sign/transactions.ts +428 -0
  141. package/src/tools/sign/wallet.ts +216 -0
  142. package/src/utils.ts +5 -2
  143. package/src/wallet-client.ts +91 -22
  144. package/src/walletconnect.ts +286 -66
  145. package/dist/tools/advanced.d.ts.map +0 -1
  146. package/dist/tools/advanced.js.map +0 -1
  147. package/dist/tools/balance.d.ts.map +0 -1
  148. package/dist/tools/balance.js.map +0 -1
  149. package/dist/tools/contract-info.d.ts.map +0 -1
  150. package/dist/tools/contract-info.js.map +0 -1
  151. package/dist/tools/contract.d.ts.map +0 -1
  152. package/dist/tools/contract.js.map +0 -1
  153. package/dist/tools/ens.d.ts.map +0 -1
  154. package/dist/tools/ens.js.map +0 -1
  155. package/dist/tools/gas.d.ts +0 -99
  156. package/dist/tools/gas.d.ts.map +0 -1
  157. package/dist/tools/gas.js +0 -181
  158. package/dist/tools/gas.js.map +0 -1
  159. package/dist/tools/logs.d.ts.map +0 -1
  160. package/dist/tools/logs.js.map +0 -1
  161. package/dist/tools/signatures.d.ts.map +0 -1
  162. package/dist/tools/signatures.js.map +0 -1
  163. package/dist/tools/transactions.d.ts.map +0 -1
  164. package/dist/tools/transactions.js +0 -361
  165. package/dist/tools/transactions.js.map +0 -1
  166. package/src/tools/gas.ts +0 -219
  167. package/src/tools/transactions.ts +0 -452
@@ -0,0 +1,138 @@
1
+ import { randomBytes } from 'node:crypto';
2
+ import { log } from './log.js';
3
+ /**
4
+ * A signature that outlives the tool call that asked for it.
5
+ *
6
+ * Approving happens on a human's schedule. A browser signer is told to come — the tab opens
7
+ * and the badge flashes — but a phone wallet is only as loud as the wallet itself, and some
8
+ * send no notification at all. So the wait routinely outlives whatever timeout the MCP
9
+ * client applies, and the agent is left holding a tool call that never returns while the
10
+ * request is still perfectly alive in the wallet.
11
+ *
12
+ * Each request gets an id and outlives its call. Settling quickly still returns inline, so
13
+ * the common case — a browser tab that pops up and is approved in seconds — is unchanged.
14
+ * Past that the call hands back the id and the agent collects the result later.
15
+ *
16
+ * Held in memory on purpose: a request is only meaningful while the socket or WalletConnect
17
+ * session that carries it is alive, and both die with the process anyway.
18
+ */
19
+ /**
20
+ * How long to wait on a signer that has been told to come — the browser page, whose tab
21
+ * opens and whose title flashes. Comfortably under any MCP client's tool timeout.
22
+ *
23
+ * A signer that cannot raise the alarm does not use this at all: it calls `waiting()` the
24
+ * moment the request is with the wallet, and the call returns then. Waiting on a phone that
25
+ * never buzzed is dead time either way.
26
+ */
27
+ export const GRACE_MS = 25_000;
28
+ /** How long a finished result stays collectable. */
29
+ const RESULT_TTL = 15 * 60_000;
30
+ const requests = new Map();
31
+ function sweep() {
32
+ const now = Date.now();
33
+ for (const [id, request] of requests) {
34
+ if (request.settledAt && now - request.settledAt > RESULT_TTL)
35
+ requests.delete(id);
36
+ }
37
+ }
38
+ function view(request) {
39
+ const { settled: _settled, ...rest } = request;
40
+ return rest;
41
+ }
42
+ /** Resolves when the request settles, or when the grace runs out — whichever comes first. */
43
+ function race(request, graceMs, handoff) {
44
+ return new Promise((resolve) => {
45
+ const timer = setTimeout(resolve, graceMs);
46
+ // A request nobody is waiting for must not keep a stdio server alive after its client
47
+ // has gone; shutdown is what ends it.
48
+ timer.unref?.();
49
+ const done = () => {
50
+ clearTimeout(timer);
51
+ resolve();
52
+ };
53
+ request.settled.then(done);
54
+ handoff?.then(done);
55
+ });
56
+ }
57
+ /**
58
+ * Run a signing request, waiting only as long as a tool call reasonably can.
59
+ *
60
+ * The work starts here either way — returning `done: false` means nobody has approved yet,
61
+ * never that nothing was asked.
62
+ */
63
+ export async function signingCall(context, run) {
64
+ sweep();
65
+ const id = randomBytes(16).toString('hex');
66
+ // Ends the wait: until it is called, a failure is a real error the caller should see
67
+ // rather than something to be collected later.
68
+ let handedOff;
69
+ const handoff = new Promise((resolve) => {
70
+ handedOff = resolve;
71
+ });
72
+ // Built before `run` starts, because a signer is free to report progress synchronously.
73
+ const request = {
74
+ id,
75
+ identity: context.identity,
76
+ summary: context.summary,
77
+ signer: context.signer,
78
+ stage: 'approval',
79
+ startedAt: Date.now(),
80
+ state: 'pending',
81
+ settled: Promise.resolve()
82
+ };
83
+ // Broadcasting does not end the wait. On a fast chain the receipt is seconds away, and a
84
+ // caller still inside its grace would rather have the mined result than a request id.
85
+ const started = run({
86
+ waiting: () => handedOff(),
87
+ mining: (txHash) => {
88
+ request.stage = 'mining';
89
+ request.txHash = txHash;
90
+ }
91
+ });
92
+ request.settled = started.then((result) => {
93
+ request.state = 'done';
94
+ request.result = result;
95
+ request.settledAt = Date.now();
96
+ }, (error) => {
97
+ request.state = 'failed';
98
+ request.error = error instanceof Error ? error.message : String(error);
99
+ request.settledAt = Date.now();
100
+ });
101
+ requests.set(id, request);
102
+ await race(request, context.graceMs ?? GRACE_MS, handoff);
103
+ if (request.state === 'done') {
104
+ requests.delete(id);
105
+ return { done: true, result: request.result };
106
+ }
107
+ if (request.state === 'failed') {
108
+ requests.delete(id);
109
+ throw new Error(request.error);
110
+ }
111
+ log('info', 'Signing', `${context.summary} is still waiting for approval — handed back as ${id.slice(0, 8)}`);
112
+ return { done: false, request: view(request) };
113
+ }
114
+ /**
115
+ * Collect a request handed back earlier, waiting out another grace period if it is still
116
+ * pending — so an agent that checks in a loop paces itself rather than spinning.
117
+ *
118
+ * Scoped to the caller: an id is unguessable, but on a server carrying several people that
119
+ * is not the reason one of them cannot read another's signature.
120
+ */
121
+ export async function collectSigningRequest(id, identity, graceMs = GRACE_MS) {
122
+ sweep();
123
+ const request = requests.get(id);
124
+ if (!request || request.identity !== identity) {
125
+ throw new Error(`No signing request ${id} is waiting. It may have been collected already, or it expired.`);
126
+ }
127
+ if (request.state === 'pending')
128
+ await race(request, graceMs);
129
+ if (request.state !== 'pending')
130
+ requests.delete(id);
131
+ return view(request);
132
+ }
133
+ /** Everything this identity still has in front of a wallet. */
134
+ export function pendingSigningRequests(identity) {
135
+ sweep();
136
+ return [...requests.values()].filter((request) => request.identity === identity && request.state === 'pending').map(view);
137
+ }
138
+ //# sourceMappingURL=signing-requests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signing-requests.js","sourceRoot":"","sources":["../src/signing-requests.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,29 @@
1
1
  import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function registerAllTools(server: McpServer): void;
2
+ import type { ToolResult } from '../types.js';
3
+ /**
4
+ * What a tool does with a wallet, which is the line everything else divides along.
5
+ *
6
+ * `read` answers questions about a chain and costs an RPC call. `sign` puts a transaction
7
+ * in front of somebody's wallet, and is the reason identity and rooms exist. A host pricing
8
+ * or rate-limiting tool calls almost always wants this distinction, and taking it from the
9
+ * folder a tool lives in means it cannot drift from a hand-kept list.
10
+ */
11
+ export type ToolGroup = 'read' | 'sign';
12
+ /** The group a tool belongs to, for a host deciding what it costs or who may call it. */
13
+ export declare function toolGroup(name: string): ToolGroup | undefined;
14
+ /**
15
+ * Wraps every tool call, for a host that needs to say who may run what.
16
+ *
17
+ * Deliberately only the tool's name, its group and who is calling: enough to count calls,
18
+ * refuse them past a limit and record what was used, without this package taking a view on
19
+ * any of it. Throwing refuses the call, and the message reaches the agent — so it should
20
+ * say what to do about it. Whatever the returned promise settles as is what the caller
21
+ * sees, so a host can also time a call or meter it once it has succeeded.
22
+ */
23
+ export type ToolMiddleware = (call: {
24
+ tool: string;
25
+ group: ToolGroup;
26
+ identity: string;
27
+ }, run: () => Promise<ToolResult>) => Promise<ToolResult>;
28
+ export declare function registerAllTools(server: McpServer, middleware?: ToolMiddleware): void;
3
29
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AA0BxE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,QAcjD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAIxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAa7C;;;;;;;GAOG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,CAAA;AA2BvC,yFAAyF;AACzF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAE7D;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,cAAc,GAAG,CAC3B,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EAC1D,GAAG,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,KAC3B,OAAO,CAAC,UAAU,CAAC,CAAA;AAExB,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,cAAc,QAoB9E"}
@@ -1,13 +1,16 @@
1
- import advancedTools from './advanced.js';
2
- import balanceTools from './balance.js';
3
- import contractTools from './contract.js';
4
- import contractInfoTools from './contract-info.js';
5
- import ensTools from './ens.js';
6
- import gasTools from './gas.js';
7
- import logTools from './logs.js';
8
- import signatureTools from './signatures.js';
9
- import transactionTools from './transactions.js';
10
- const allToolDefinitions = {
1
+ import { identityFrom } from '../context.js';
2
+ import advancedTools from './read/advanced.js';
3
+ import balanceTools from './read/balance.js';
4
+ import contractTools from './read/contract.js';
5
+ import contractInfoTools from './read/contract-info.js';
6
+ import ensTools from './read/ens.js';
7
+ import gasTools from './read/gas.js';
8
+ import logTools from './read/logs.js';
9
+ import signatureTools from './read/signatures.js';
10
+ import signingRequestTools from './read/signing.js';
11
+ import transactionTools from './sign/transactions.js';
12
+ import walletTools from './sign/wallet.js';
13
+ const readTools = {
11
14
  ...signatureTools,
12
15
  ...contractTools,
13
16
  ...contractInfoTools,
@@ -16,17 +19,36 @@ const allToolDefinitions = {
16
19
  ...advancedTools,
17
20
  ...ensTools,
18
21
  ...gasTools,
19
- ...transactionTools
22
+ // A signature already asked for and paid for; collecting it is not a second request.
23
+ ...signingRequestTools
20
24
  };
21
- // Register all tools with the MCP server
22
- export function registerAllTools(server) {
25
+ const signTools = {
26
+ ...transactionTools,
27
+ ...walletTools
28
+ };
29
+ const allToolDefinitions = { ...readTools, ...signTools };
30
+ const groups = new Map([
31
+ ...Object.keys(readTools).map((name) => [name, 'read']),
32
+ ...Object.keys(signTools).map((name) => [name, 'sign'])
33
+ ]);
34
+ /** The group a tool belongs to, for a host deciding what it costs or who may call it. */
35
+ export function toolGroup(name) {
36
+ return groups.get(name);
37
+ }
38
+ export function registerAllTools(server, middleware) {
23
39
  Object.entries(allToolDefinitions).forEach(([name, tool]) => {
40
+ if (tool.available && !tool.available())
41
+ return;
24
42
  server.registerTool(name, {
25
43
  title: tool.title,
26
44
  description: tool.description,
27
45
  inputSchema: tool.schema.shape
28
- }, async (args, _extra) => {
29
- return await tool.handler(args);
46
+ }, async (args, extra) => {
47
+ // Passed to every handler; the ones that reach a signer must say whose it is.
48
+ const identity = identityFrom(extra.authInfo);
49
+ const run = () => tool.handler(args, identity);
50
+ const group = toolGroup(name);
51
+ return await (middleware ? middleware({ tool: name, group, identity }, run) : run());
30
52
  });
31
53
  });
32
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAGA,OAAO,aAAa,MAAM,eAAe,CAAA;AACzC,OAAO,YAAY,MAAM,cAAc,CAAA;AACvC,OAAO,aAAa,MAAM,eAAe,CAAA;AACzC,OAAO,iBAAiB,MAAM,oBAAoB,CAAA;AAClD,OAAO,QAAQ,MAAM,UAAU,CAAA;AAC/B,OAAO,QAAQ,MAAM,UAAU,CAAA;AAC/B,OAAO,QAAQ,MAAM,WAAW,CAAA;AAChC,OAAO,cAAc,MAAM,iBAAiB,CAAA;AAC5C,OAAO,gBAAgB,MAAM,mBAAmB,CAAA;AAEhD,MAAM,kBAAkB,GAAG;IACzB,GAAG,cAAc;IACjB,GAAG,aAAa;IAChB,GAAG,iBAAiB;IACpB,GAAG,YAAY;IACf,GAAG,QAAQ;IACX,GAAG,aAAa;IAChB,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,gBAAgB;CACX,CAAA;AAEV,yCAAyC;AACzC,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;QAC1D,MAAM,CAAC,YAAY,CACjB,IAAI,EACJ;YACE,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;SAC/B,EACD,KAAK,EAAE,IAAS,EAAE,MAA8D,EAAE,EAAE;YAClF,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACjC,CAAC,CACF,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,OAAO,aAAa,MAAM,oBAAoB,CAAA;AAC9C,OAAO,YAAY,MAAM,mBAAmB,CAAA;AAC5C,OAAO,aAAa,MAAM,oBAAoB,CAAA;AAC9C,OAAO,iBAAiB,MAAM,yBAAyB,CAAA;AACvD,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AACrC,OAAO,cAAc,MAAM,sBAAsB,CAAA;AACjD,OAAO,mBAAmB,MAAM,mBAAmB,CAAA;AACnD,OAAO,gBAAgB,MAAM,wBAAwB,CAAA;AACrD,OAAO,WAAW,MAAM,kBAAkB,CAAA;AAY1C,MAAM,SAAS,GAAG;IAChB,GAAG,cAAc;IACjB,GAAG,aAAa;IAChB,GAAG,iBAAiB;IACpB,GAAG,YAAY;IACf,GAAG,QAAQ;IACX,GAAG,aAAa;IAChB,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,qFAAqF;IACrF,GAAG,mBAAmB;CACd,CAAA;AAEV,MAAM,SAAS,GAAG;IAChB,GAAG,gBAAgB;IACnB,GAAG,WAAW;CACN,CAAA;AAEV,MAAM,kBAAkB,GAAG,EAAE,GAAG,SAAS,EAAE,GAAG,SAAS,EAAW,CAAA;AAElE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAoB;IACxC,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAU,CAAC;IAChE,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAU,CAAC;CACjE,CAAC,CAAA;AAEF,yFAAyF;AACzF,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAgBD,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,UAA2B;IAC7E,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;QAC1D,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YAAE,OAAM;QAE/C,MAAM,CAAC,YAAY,CACjB,IAAI,EACJ;YACE,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;SAC/B,EACD,KAAK,EAAE,IAAS,EAAE,KAA6D,EAAE,EAAE;YACjF,8EAA8E;YAC9E,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;YAC7C,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;YAC9C,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAc,CAAA;YAC1C,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA;QACtF,CAAC,CACF,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -4,85 +4,88 @@ declare const _default: {
4
4
  title: string;
5
5
  description: string;
6
6
  schema: z.ZodObject<{
7
- chain: z.ZodEnum<["arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost", ...("arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost")[]]>;
7
+ chain: z.ZodEnum<["mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost", ...("mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost")[]]>;
8
8
  address: z.ZodString;
9
9
  slot: z.ZodString;
10
10
  abiType: z.ZodString;
11
11
  blockNumber: z.ZodOptional<z.ZodString>;
12
12
  }, "strip", z.ZodTypeAny, {
13
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
13
14
  address: string;
14
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
15
15
  slot: string;
16
16
  abiType: string;
17
17
  blockNumber?: string | undefined;
18
18
  }, {
19
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
19
20
  address: string;
20
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
21
21
  slot: string;
22
22
  abiType: string;
23
23
  blockNumber?: string | undefined;
24
24
  }>;
25
25
  handler: (args: {
26
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
26
27
  address: string;
27
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
28
28
  slot: string;
29
29
  abiType: string;
30
30
  blockNumber?: string | undefined;
31
- }) => Promise<import("../types.js").ToolResult>;
31
+ }, identity: string) => Promise<import("../../types.js").ToolResult>;
32
+ available: (() => boolean) | undefined;
32
33
  };
33
34
  get_block_info: {
34
35
  title: string;
35
36
  description: string;
36
37
  schema: z.ZodObject<{
37
- chain: z.ZodEnum<["arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost", ...("arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost")[]]>;
38
+ chain: z.ZodEnum<["mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost", ...("mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost")[]]>;
38
39
  blockNumber: z.ZodOptional<z.ZodString>;
39
40
  }, "strip", z.ZodTypeAny, {
40
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
41
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
41
42
  blockNumber?: string | undefined;
42
43
  }, {
43
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
44
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
44
45
  blockNumber?: string | undefined;
45
46
  }>;
46
47
  handler: (args: {
47
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
48
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
48
49
  blockNumber?: string | undefined;
49
- }) => Promise<import("../types.js").ToolResult>;
50
+ }, identity: string) => Promise<import("../../types.js").ToolResult>;
51
+ available: (() => boolean) | undefined;
50
52
  };
51
53
  trace_transaction: {
52
54
  title: string;
53
55
  description: string;
54
56
  schema: z.ZodObject<{
55
- chain: z.ZodEnum<["arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost", ...("arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost")[]]>;
57
+ chain: z.ZodEnum<["mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost", ...("mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost")[]]>;
56
58
  transactionHash: z.ZodString;
57
59
  traceType: z.ZodDefault<z.ZodOptional<z.ZodEnum<["trace", "vmTrace", "stateDiff"]>>>;
58
60
  useAnvil: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
59
61
  summarize: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
60
62
  }, "strip", z.ZodTypeAny, {
61
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
63
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
62
64
  transactionHash: string;
63
65
  traceType: "trace" | "vmTrace" | "stateDiff";
64
66
  useAnvil: boolean;
65
67
  summarize: boolean;
66
68
  }, {
67
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
69
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
68
70
  transactionHash: string;
69
71
  traceType?: "trace" | "vmTrace" | "stateDiff" | undefined;
70
72
  useAnvil?: boolean | undefined;
71
73
  summarize?: boolean | undefined;
72
74
  }>;
73
75
  handler: (args: {
74
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
76
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
75
77
  transactionHash: string;
76
78
  traceType: "trace" | "vmTrace" | "stateDiff";
77
79
  useAnvil: boolean;
78
80
  summarize: boolean;
79
- }) => Promise<import("../types.js").ToolResult>;
81
+ }, identity: string) => Promise<import("../../types.js").ToolResult>;
82
+ available: (() => boolean) | undefined;
80
83
  };
81
84
  debug_call: {
82
85
  title: string;
83
86
  description: string;
84
87
  schema: z.ZodObject<{
85
- chain: z.ZodEnum<["arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost", ...("arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost")[]]>;
88
+ chain: z.ZodEnum<["mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost", ...("mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost")[]]>;
86
89
  to: z.ZodString;
87
90
  data: z.ZodOptional<z.ZodString>;
88
91
  functionAbi: z.ZodOptional<z.ZodString>;
@@ -93,40 +96,41 @@ declare const _default: {
93
96
  traceType: z.ZodDefault<z.ZodOptional<z.ZodEnum<["callTracer", "prestateTracer"]>>>;
94
97
  summarize: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
95
98
  }, "strip", z.ZodTypeAny, {
96
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
99
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
97
100
  to: string;
98
101
  traceType: "callTracer" | "prestateTracer";
99
102
  summarize: boolean;
100
- data?: string | undefined;
103
+ blockNumber?: string | undefined;
101
104
  from?: string | undefined;
102
105
  value?: string | undefined;
103
- blockNumber?: string | undefined;
106
+ data?: string | undefined;
104
107
  args?: (string | number | boolean)[] | undefined;
105
108
  functionAbi?: string | undefined;
106
109
  }, {
107
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
110
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
108
111
  to: string;
109
- data?: string | undefined;
112
+ blockNumber?: string | undefined;
110
113
  from?: string | undefined;
111
114
  value?: string | undefined;
112
- blockNumber?: string | undefined;
115
+ data?: string | undefined;
113
116
  args?: (string | number | boolean)[] | undefined;
114
117
  traceType?: "callTracer" | "prestateTracer" | undefined;
115
118
  summarize?: boolean | undefined;
116
119
  functionAbi?: string | undefined;
117
120
  }>;
118
121
  handler: (args: {
119
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
122
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
120
123
  to: string;
121
124
  traceType: "callTracer" | "prestateTracer";
122
125
  summarize: boolean;
123
- data?: string | undefined;
126
+ blockNumber?: string | undefined;
124
127
  from?: string | undefined;
125
128
  value?: string | undefined;
126
- blockNumber?: string | undefined;
129
+ data?: string | undefined;
127
130
  args?: (string | number | boolean)[] | undefined;
128
131
  functionAbi?: string | undefined;
129
- }) => Promise<import("../types.js").ToolResult>;
132
+ }, identity: string) => Promise<import("../../types.js").ToolResult>;
133
+ available: (() => boolean) | undefined;
130
134
  };
131
135
  };
132
136
  export default _default;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advanced.d.ts","sourceRoot":"","sources":["../../../src/tools/read/advanced.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMvB,wBAuZC"}
@@ -1,8 +1,8 @@
1
1
  import { decodeAbiParameters, isAddress, parseAbiParameters } from 'viem';
2
2
  import { z } from 'zod';
3
- import { isAnvilInstalled, simulateCallWithTrace, traceTransactionWithAnvil } from '../anvil.js';
4
- import { getClientManager, SUPPORTED_CHAINS } from '../client.js';
5
- import { createTool, formatResponse, summarizeTrace } from '../utils.js';
3
+ import { isDebugNodeAvailable, simulateCallWithTrace, traceTransactionWithAnvil } from '../../anvil.js';
4
+ import { getClientManager, SUPPORTED_CHAINS } from '../../client.js';
5
+ import { createTool, formatResponse, summarizeTrace } from '../../utils.js';
6
6
  export default {
7
7
  get_storage_at: createTool('Read Contract Storage', '⚠️ ADVANCED: Direct storage slot access with type decoding. Use for low-level contract inspection.', z.object({
8
8
  chain: z.enum(SUPPORTED_CHAINS).describe('The blockchain network to use'),
@@ -132,7 +132,7 @@ export default {
132
132
  useAnvil: z
133
133
  .boolean()
134
134
  .optional()
135
- .describe('Force using Anvil for tracing (requires Foundry installed). Auto-used as fallback when RPC tracing fails.')
135
+ .describe('Force tracing through the debug node (ANVIL_RPC_URL). Used automatically as a fallback when the RPC cannot trace.')
136
136
  .default(false),
137
137
  summarize: z
138
138
  .boolean()
@@ -182,13 +182,13 @@ export default {
182
182
  if (traceResult === null ||
183
183
  (traceResult && typeof traceResult === 'object' && 'rpcError' in traceResult) ||
184
184
  args.useAnvil) {
185
- const anvilAvailable = await isAnvilInstalled();
185
+ const anvilAvailable = await isDebugNodeAvailable();
186
186
  if (anvilAvailable) {
187
187
  usedAnvil = true; // Mark as used before attempting (even if it fails)
188
188
  try {
189
189
  const forkUrl = clientManager.getRpcUrl(args.chain);
190
190
  const blockNumber = transaction.blockNumber ?? 0n;
191
- traceResult = await traceTransactionWithAnvil(forkUrl, args.transactionHash, blockNumber, tracer, args.chain);
191
+ traceResult = await traceTransactionWithAnvil(forkUrl, args.transactionHash, blockNumber, tracer);
192
192
  }
193
193
  catch (anvilError) {
194
194
  // Anvil tracing also failed
@@ -203,7 +203,7 @@ export default {
203
203
  else if (!traceResult || (typeof traceResult === 'object' && 'rpcError' in traceResult)) {
204
204
  // Anvil not available and RPC failed
205
205
  traceResult = {
206
- error: 'Tracing not available. Install Foundry (anvil) for local tracing: https://book.getfoundry.sh/getting-started/installation',
206
+ error: 'Tracing not available. Point ANVIL_RPC_URL at a node exposing debug_traceCall — a local Anvil on 127.0.0.1:8545 is picked up automatically.',
207
207
  rpcError: traceResult && typeof traceResult === 'object' && 'rpcError' in traceResult
208
208
  ? traceResult.rpcError
209
209
  : 'RPC does not support debug_traceTransaction'
@@ -256,7 +256,7 @@ export default {
256
256
  };
257
257
  return formatResponse(result);
258
258
  }),
259
- debug_call: createTool('Debug Contract Call', 'Simulate a contract call with full trace output. Requires Foundry (anvil) installed. Useful for debugging reverts and understanding call execution.', z.object({
259
+ debug_call: createTool('Debug Contract Call', 'Simulate a contract call with full trace output. Needs a node exposing debug_traceCall (a local Anvil, or ANVIL_RPC_URL). Useful for debugging reverts and understanding call execution.', z.object({
260
260
  chain: z.enum(SUPPORTED_CHAINS).describe('The blockchain network to fork'),
261
261
  to: z.string().describe('Contract address to call'),
262
262
  data: z.string().optional().describe('Calldata (hex encoded). Either provide this or functionAbi + args.'),
@@ -283,9 +283,9 @@ export default {
283
283
  .default(false)
284
284
  }), async (args) => {
285
285
  // Check if Anvil is installed
286
- const anvilAvailable = await isAnvilInstalled();
286
+ const anvilAvailable = await isDebugNodeAvailable();
287
287
  if (!anvilAvailable) {
288
- throw new Error('Anvil is not installed. Please install Foundry: https://book.getfoundry.sh/getting-started/installation');
288
+ throw new Error('No tracing node reachable. Run a local Anvil, or set ANVIL_RPC_URL to a node exposing debug_traceCall.');
289
289
  }
290
290
  const clientManager = getClientManager();
291
291
  const forkUrl = clientManager.getRpcUrl(args.chain);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advanced.js","sourceRoot":"","sources":["../../../src/tools/read/advanced.ts"],"names":[],"mappings":"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"}
@@ -5,36 +5,36 @@ declare const _default: {
5
5
  description: string;
6
6
  schema: z.ZodObject<{
7
7
  queries: z.ZodArray<z.ZodObject<{
8
- chain: z.ZodEnum<["arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost", ...("arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost")[]]>;
8
+ chain: z.ZodEnum<["mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost", ...("mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost")[]]>;
9
9
  address: z.ZodString;
10
10
  tokenAddress: z.ZodOptional<z.ZodString>;
11
11
  blockNumber: z.ZodOptional<z.ZodString>;
12
12
  label: z.ZodOptional<z.ZodString>;
13
13
  }, "strip", z.ZodTypeAny, {
14
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
14
15
  address: string;
15
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
16
16
  blockNumber?: string | undefined;
17
17
  tokenAddress?: string | undefined;
18
18
  label?: string | undefined;
19
19
  }, {
20
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
20
21
  address: string;
21
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
22
22
  blockNumber?: string | undefined;
23
23
  tokenAddress?: string | undefined;
24
24
  label?: string | undefined;
25
25
  }>, "many">;
26
26
  }, "strip", z.ZodTypeAny, {
27
27
  queries: {
28
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
28
29
  address: string;
29
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
30
30
  blockNumber?: string | undefined;
31
31
  tokenAddress?: string | undefined;
32
32
  label?: string | undefined;
33
33
  }[];
34
34
  }, {
35
35
  queries: {
36
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
36
37
  address: string;
37
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
38
38
  blockNumber?: string | undefined;
39
39
  tokenAddress?: string | undefined;
40
40
  label?: string | undefined;
@@ -42,13 +42,14 @@ declare const _default: {
42
42
  }>;
43
43
  handler: (args: {
44
44
  queries: {
45
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
45
46
  address: string;
46
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
47
47
  blockNumber?: string | undefined;
48
48
  tokenAddress?: string | undefined;
49
49
  label?: string | undefined;
50
50
  }[];
51
- }) => Promise<import("../types.js").ToolResult>;
51
+ }, identity: string) => Promise<import("../../types.js").ToolResult>;
52
+ available: (() => boolean) | undefined;
52
53
  };
53
54
  };
54
55
  export default _default;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../../src/tools/read/balance.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAavB,wBA4JC"}
@@ -1,7 +1,7 @@
1
1
  import { formatEther, formatUnits, isAddress } from 'viem';
2
2
  import { z } from 'zod';
3
- import { getClientManager, SUPPORTED_CHAINS } from '../client.js';
4
- import { createTool, formatResponse } from '../utils.js';
3
+ import { getClientManager, SUPPORTED_CHAINS } from '../../client.js';
4
+ import { createTool, formatResponse } from '../../utils.js';
5
5
  const BalanceQuerySchema = z.object({
6
6
  chain: z.enum(SUPPORTED_CHAINS).describe('The blockchain network to use'),
7
7
  address: z.string().describe('The address to check balance for'),