web3-tools-mcp 2.0.2 → 3.1.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 (180) hide show
  1. package/CHANGELOG.md +182 -1
  2. package/README.md +76 -47
  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/chain-meta.d.ts.map +1 -1
  8. package/dist/chain-meta.js +19 -8
  9. package/dist/chain-meta.js.map +1 -1
  10. package/dist/chains.d.ts +9 -1
  11. package/dist/chains.d.ts.map +1 -1
  12. package/dist/chains.js +11 -2
  13. package/dist/chains.js.map +1 -1
  14. package/dist/clear-signing.d.ts.map +1 -1
  15. package/dist/clear-signing.js +17 -6
  16. package/dist/clear-signing.js.map +1 -1
  17. package/dist/client.d.ts.map +1 -1
  18. package/dist/client.js.map +1 -1
  19. package/dist/context.d.ts +22 -0
  20. package/dist/context.d.ts.map +1 -0
  21. package/dist/context.js +24 -0
  22. package/dist/context.js.map +1 -0
  23. package/dist/hosted.d.ts +12 -0
  24. package/dist/hosted.d.ts.map +1 -0
  25. package/dist/hosted.js +12 -0
  26. package/dist/hosted.js.map +1 -0
  27. package/dist/http-server.d.ts +13 -0
  28. package/dist/http-server.d.ts.map +1 -1
  29. package/dist/http-server.js +22 -7
  30. package/dist/http-server.js.map +1 -1
  31. package/dist/index.js +20 -12
  32. package/dist/index.js.map +1 -1
  33. package/dist/kv-storage.d.ts +2 -1
  34. package/dist/kv-storage.d.ts.map +1 -1
  35. package/dist/kv-storage.js +5 -2
  36. package/dist/kv-storage.js.map +1 -1
  37. package/dist/lib.d.ts +24 -0
  38. package/dist/lib.d.ts.map +1 -0
  39. package/dist/lib.js +23 -0
  40. package/dist/lib.js.map +1 -0
  41. package/dist/mcp-server.d.ts +4 -0
  42. package/dist/mcp-server.d.ts.map +1 -0
  43. package/dist/mcp-server.js +43 -0
  44. package/dist/mcp-server.js.map +1 -0
  45. package/dist/oauth.d.ts +57 -8
  46. package/dist/oauth.d.ts.map +1 -1
  47. package/dist/oauth.js +133 -63
  48. package/dist/oauth.js.map +1 -1
  49. package/dist/preview.d.ts +7 -0
  50. package/dist/preview.d.ts.map +1 -1
  51. package/dist/preview.js +21 -7
  52. package/dist/preview.js.map +1 -1
  53. package/dist/signing-requests.d.ts +81 -0
  54. package/dist/signing-requests.d.ts.map +1 -0
  55. package/dist/signing-requests.js +138 -0
  56. package/dist/signing-requests.js.map +1 -0
  57. package/dist/tools/index.d.ts +27 -1
  58. package/dist/tools/index.d.ts.map +1 -1
  59. package/dist/tools/index.js +50 -15
  60. package/dist/tools/index.js.map +1 -1
  61. package/dist/tools/{advanced.d.ts → read/advanced.d.ts} +39 -30
  62. package/dist/tools/read/advanced.d.ts.map +1 -0
  63. package/dist/tools/{advanced.js → read/advanced.js} +53 -41
  64. package/dist/tools/read/advanced.js.map +1 -0
  65. package/dist/tools/{balance.d.ts → read/balance.d.ts} +8 -7
  66. package/dist/tools/read/balance.d.ts.map +1 -0
  67. package/dist/tools/{balance.js → read/balance.js} +18 -33
  68. package/dist/tools/read/balance.js.map +1 -0
  69. package/dist/tools/{contract-info.d.ts → read/contract-info.d.ts} +20 -15
  70. package/dist/tools/read/contract-info.d.ts.map +1 -0
  71. package/dist/tools/{contract-info.js → read/contract-info.js} +54 -123
  72. package/dist/tools/read/contract-info.js.map +1 -0
  73. package/dist/tools/{contract.d.ts → read/contract.d.ts} +14 -12
  74. package/dist/tools/read/contract.d.ts.map +1 -0
  75. package/dist/tools/{contract.js → read/contract.js} +3 -2
  76. package/dist/tools/read/contract.js.map +1 -0
  77. package/dist/tools/read/ens.d.ts +104 -0
  78. package/dist/tools/read/ens.d.ts.map +1 -0
  79. package/dist/tools/{ens.js → read/ens.js} +25 -33
  80. package/dist/tools/read/ens.js.map +1 -0
  81. package/dist/tools/read/gas.d.ts +171 -0
  82. package/dist/tools/read/gas.d.ts.map +1 -0
  83. package/dist/tools/read/gas.js +333 -0
  84. package/dist/tools/read/gas.js.map +1 -0
  85. package/dist/tools/read/logs.d.ts +101 -0
  86. package/dist/tools/read/logs.d.ts.map +1 -0
  87. package/dist/tools/read/logs.js +211 -0
  88. package/dist/tools/read/logs.js.map +1 -0
  89. package/dist/tools/{signatures.d.ts → read/signatures.d.ts} +8 -4
  90. package/dist/tools/read/signatures.d.ts.map +1 -0
  91. package/dist/tools/{signatures.js → read/signatures.js} +4 -3
  92. package/dist/tools/read/signatures.js.map +1 -0
  93. package/dist/tools/read/signing.d.ts +27 -0
  94. package/dist/tools/read/signing.d.ts.map +1 -0
  95. package/dist/tools/read/signing.js +81 -0
  96. package/dist/tools/read/signing.js.map +1 -0
  97. package/dist/tools/sign/errors.d.ts +9 -0
  98. package/dist/tools/sign/errors.d.ts.map +1 -0
  99. package/dist/tools/sign/errors.js +29 -0
  100. package/dist/tools/sign/errors.js.map +1 -0
  101. package/dist/tools/sign/transactions.d.ts +141 -0
  102. package/dist/tools/sign/transactions.d.ts.map +1 -0
  103. package/dist/tools/sign/transactions.js +361 -0
  104. package/dist/tools/sign/transactions.js.map +1 -0
  105. package/dist/tools/sign/wallet.d.ts +50 -0
  106. package/dist/tools/sign/wallet.d.ts.map +1 -0
  107. package/dist/tools/sign/wallet.js +180 -0
  108. package/dist/tools/sign/wallet.js.map +1 -0
  109. package/dist/utils.d.ts +23 -2
  110. package/dist/utils.d.ts.map +1 -1
  111. package/dist/utils.js +48 -3
  112. package/dist/utils.js.map +1 -1
  113. package/dist/wallet-client.d.ts +34 -4
  114. package/dist/wallet-client.d.ts.map +1 -1
  115. package/dist/wallet-client.js +106 -27
  116. package/dist/wallet-client.js.map +1 -1
  117. package/dist/walletconnect.d.ts +100 -13
  118. package/dist/walletconnect.d.ts.map +1 -1
  119. package/dist/walletconnect.js +215 -50
  120. package/dist/walletconnect.js.map +1 -1
  121. package/package.json +12 -9
  122. package/src/anvil.ts +150 -271
  123. package/src/chain-meta.ts +16 -7
  124. package/src/chains.ts +14 -2
  125. package/src/clear-signing.ts +15 -9
  126. package/src/client.ts +0 -1
  127. package/src/context.ts +27 -0
  128. package/src/hosted.ts +11 -0
  129. package/src/http-server.ts +38 -8
  130. package/src/index.ts +20 -13
  131. package/src/kv-storage.ts +6 -3
  132. package/src/lib.ts +24 -0
  133. package/src/mcp-server.ts +47 -0
  134. package/src/oauth.ts +181 -69
  135. package/src/preview.ts +28 -7
  136. package/src/signing-requests.ts +198 -0
  137. package/src/tools/index.ts +78 -16
  138. package/src/tools/{advanced.ts → read/advanced.ts} +74 -43
  139. package/src/tools/{balance.ts → read/balance.ts} +20 -35
  140. package/src/tools/{contract-info.ts → read/contract-info.ts} +66 -146
  141. package/src/tools/{contract.ts → read/contract.ts} +4 -3
  142. package/src/tools/{ens.ts → read/ens.ts} +27 -34
  143. package/src/tools/read/gas.ts +443 -0
  144. package/src/tools/read/logs.ts +281 -0
  145. package/src/tools/{signatures.ts → read/signatures.ts} +5 -5
  146. package/src/tools/read/signing.ts +92 -0
  147. package/src/tools/sign/errors.ts +28 -0
  148. package/src/tools/sign/transactions.ts +479 -0
  149. package/src/tools/sign/wallet.ts +216 -0
  150. package/src/utils.ts +52 -3
  151. package/src/wallet-client.ts +107 -24
  152. package/src/walletconnect.ts +250 -48
  153. package/dist/tools/advanced.d.ts.map +0 -1
  154. package/dist/tools/advanced.js.map +0 -1
  155. package/dist/tools/balance.d.ts.map +0 -1
  156. package/dist/tools/balance.js.map +0 -1
  157. package/dist/tools/contract-info.d.ts.map +0 -1
  158. package/dist/tools/contract-info.js.map +0 -1
  159. package/dist/tools/contract.d.ts.map +0 -1
  160. package/dist/tools/contract.js.map +0 -1
  161. package/dist/tools/ens.d.ts +0 -119
  162. package/dist/tools/ens.d.ts.map +0 -1
  163. package/dist/tools/ens.js.map +0 -1
  164. package/dist/tools/gas.d.ts +0 -99
  165. package/dist/tools/gas.d.ts.map +0 -1
  166. package/dist/tools/gas.js +0 -181
  167. package/dist/tools/gas.js.map +0 -1
  168. package/dist/tools/logs.d.ts +0 -39
  169. package/dist/tools/logs.d.ts.map +0 -1
  170. package/dist/tools/logs.js +0 -230
  171. package/dist/tools/logs.js.map +0 -1
  172. package/dist/tools/signatures.d.ts.map +0 -1
  173. package/dist/tools/signatures.js.map +0 -1
  174. package/dist/tools/transactions.d.ts +0 -155
  175. package/dist/tools/transactions.d.ts.map +0 -1
  176. package/dist/tools/transactions.js +0 -365
  177. package/dist/tools/transactions.js.map +0 -1
  178. package/src/tools/gas.ts +0 -219
  179. package/src/tools/logs.ts +0 -293
  180. package/src/tools/transactions.ts +0 -456
@@ -0,0 +1,81 @@
1
+ /**
2
+ * A signature that outlives the tool call that asked for it.
3
+ *
4
+ * Approving happens on a human's schedule. A browser signer is told to come — the tab opens
5
+ * and the badge flashes — but a phone wallet is only as loud as the wallet itself, and some
6
+ * send no notification at all. So the wait routinely outlives whatever timeout the MCP
7
+ * client applies, and the agent is left holding a tool call that never returns while the
8
+ * request is still perfectly alive in the wallet.
9
+ *
10
+ * Each request gets an id and outlives its call. Settling quickly still returns inline, so
11
+ * the common case — a browser tab that pops up and is approved in seconds — is unchanged.
12
+ * Past that the call hands back the id and the agent collects the result later.
13
+ *
14
+ * Held in memory on purpose: a request is only meaningful while the socket or WalletConnect
15
+ * session that carries it is alive, and both die with the process anyway.
16
+ */
17
+ /**
18
+ * How long to wait on a signer that has been told to come — the browser page, whose tab
19
+ * opens and whose title flashes. Comfortably under any MCP client's tool timeout.
20
+ *
21
+ * A signer that cannot raise the alarm does not use this at all: it calls `waiting()` the
22
+ * moment the request is with the wallet, and the call returns then. Waiting on a phone that
23
+ * never buzzed is dead time either way.
24
+ */
25
+ export declare const GRACE_MS = 25000;
26
+ export type SigningState = 'pending' | 'done' | 'failed';
27
+ export interface SigningRequest {
28
+ id: string;
29
+ identity: string;
30
+ /** What is being asked for, in a line, so a later check can say what it was. */
31
+ summary: string;
32
+ signer: 'browser' | 'phone';
33
+ /** Waiting on a person, or on the chain. They deserve different things said about them. */
34
+ stage: 'approval' | 'mining';
35
+ /** Known once approved, so a request can be followed on an explorer before it settles. */
36
+ txHash?: string;
37
+ startedAt: number;
38
+ state: SigningState;
39
+ settledAt?: number;
40
+ result?: unknown;
41
+ error?: string;
42
+ }
43
+ /** How a signing job says where it has got to. */
44
+ export interface SigningProgress {
45
+ /**
46
+ * The request is with the wallet and only a human is left. Everything that fails quickly —
47
+ * no session, an unapproved chain, a reverted simulation — has already thrown.
48
+ */
49
+ waiting: () => void;
50
+ /** Approved and broadcast. Nothing is settled until it is mined. */
51
+ mining: (txHash: string) => void;
52
+ }
53
+ /**
54
+ * Run a signing request, waiting only as long as a tool call reasonably can.
55
+ *
56
+ * The work starts here either way — returning `done: false` means nobody has approved yet,
57
+ * never that nothing was asked.
58
+ */
59
+ export declare function signingCall<T>(context: {
60
+ identity: string;
61
+ summary: string;
62
+ signer: 'browser' | 'phone';
63
+ graceMs?: number;
64
+ }, run: (progress: SigningProgress) => Promise<T>): Promise<{
65
+ done: true;
66
+ result: T;
67
+ } | {
68
+ done: false;
69
+ request: SigningRequest;
70
+ }>;
71
+ /**
72
+ * Collect a request handed back earlier, waiting out another grace period if it is still
73
+ * pending — so an agent that checks in a loop paces itself rather than spinning.
74
+ *
75
+ * Scoped to the caller: an id is unguessable, but on a server carrying several people that
76
+ * is not the reason one of them cannot read another's signature.
77
+ */
78
+ export declare function collectSigningRequest(id: string, identity: string, graceMs?: number): Promise<SigningRequest>;
79
+ /** Everything this identity still has in front of a wallet. */
80
+ export declare function pendingSigningRequests(identity: string): SigningRequest[];
81
+ //# sourceMappingURL=signing-requests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signing-requests.d.ts","sourceRoot":"","sources":["../src/signing-requests.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;GAeG;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,QAAS,CAAA;AAK9B,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAA;AAExD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,gFAAgF;IAChF,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,SAAS,GAAG,OAAO,CAAA;IAC3B,2FAA2F;IAC3F,KAAK,EAAE,UAAU,GAAG,QAAQ,CAAA;IAC5B,0FAA0F;IAC1F,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,YAAY,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,oEAAoE;IACpE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CACjC;AAuCD;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,OAAO,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EAC7F,GAAG,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,GAC7C,OAAO,CAAC;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,cAAc,CAAA;CAAE,CAAC,CA6D/E;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,SAAW,GAAG,OAAO,CAAC,cAAc,CAAC,CAYrH;AAED,+DAA+D;AAC/D,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,EAAE,CAGzE"}
@@ -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;AAKxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAc7C;;;;;;;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,QA6B9E"}
@@ -1,13 +1,18 @@
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 { getClientManager } from '../client.js';
2
+ import { identityFrom } from '../context.js';
3
+ import { redactSecrets } from '../utils.js';
4
+ import advancedTools from './read/advanced.js';
5
+ import balanceTools from './read/balance.js';
6
+ import contractTools from './read/contract.js';
7
+ import contractInfoTools from './read/contract-info.js';
8
+ import ensTools from './read/ens.js';
9
+ import gasTools from './read/gas.js';
10
+ import logTools from './read/logs.js';
11
+ import signatureTools from './read/signatures.js';
12
+ import signingRequestTools from './read/signing.js';
13
+ import transactionTools from './sign/transactions.js';
14
+ import walletTools from './sign/wallet.js';
15
+ const readTools = {
11
16
  ...signatureTools,
12
17
  ...contractTools,
13
18
  ...contractInfoTools,
@@ -16,17 +21,47 @@ const allToolDefinitions = {
16
21
  ...advancedTools,
17
22
  ...ensTools,
18
23
  ...gasTools,
19
- ...transactionTools
24
+ // A signature already asked for and paid for; collecting it is not a second request.
25
+ ...signingRequestTools
20
26
  };
21
- // Register all tools with the MCP server
22
- export function registerAllTools(server) {
27
+ const signTools = {
28
+ ...transactionTools,
29
+ ...walletTools
30
+ };
31
+ const allToolDefinitions = { ...readTools, ...signTools };
32
+ const groups = new Map([
33
+ ...Object.keys(readTools).map((name) => [name, 'read']),
34
+ ...Object.keys(signTools).map((name) => [name, 'sign'])
35
+ ]);
36
+ /** The group a tool belongs to, for a host deciding what it costs or who may call it. */
37
+ export function toolGroup(name) {
38
+ return groups.get(name);
39
+ }
40
+ export function registerAllTools(server, middleware) {
23
41
  Object.entries(allToolDefinitions).forEach(([name, tool]) => {
42
+ if (tool.available && !tool.available())
43
+ return;
24
44
  server.registerTool(name, {
25
45
  title: tool.title,
26
46
  description: tool.description,
27
47
  inputSchema: tool.schema.shape
28
- }, async (args, _extra) => {
29
- return await tool.handler(args);
48
+ }, async (args, extra) => {
49
+ // Passed to every handler; the ones that reach a signer must say whose it is.
50
+ const identity = identityFrom(extra.authInfo);
51
+ const run = () => tool.handler(args, identity);
52
+ const group = toolGroup(name);
53
+ // Anything a tool returns or throws may quote an RPC URL, and those carry provider keys.
54
+ const config = getClientManager().getConfig();
55
+ try {
56
+ const result = await (middleware ? middleware({ tool: name, group, identity }, run) : run());
57
+ return { ...result, content: result.content.map((item) => ({ ...item, text: redactSecrets(item.text, config) })) };
58
+ }
59
+ catch (error) {
60
+ if (!(error instanceof Error))
61
+ throw new Error(redactSecrets(String(error), config));
62
+ error.message = redactSecrets(error.message, config);
63
+ throw error;
64
+ }
30
65
  });
31
66
  });
32
67
  }
@@ -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":"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"}
@@ -1,88 +1,96 @@
1
1
  import { z } from 'zod';
2
+ /** The trace itself if it fits, otherwise its JSON cut short. */
3
+ export declare function boundTrace(trace: unknown): {
4
+ trace: unknown;
5
+ truncated?: true;
6
+ };
2
7
  declare const _default: {
3
8
  get_storage_at: {
4
9
  title: string;
5
10
  description: string;
6
11
  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")[]]>;
12
+ 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
13
  address: z.ZodString;
9
14
  slot: z.ZodString;
10
15
  abiType: z.ZodString;
11
16
  blockNumber: z.ZodOptional<z.ZodString>;
12
17
  }, "strip", z.ZodTypeAny, {
18
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
13
19
  address: string;
14
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
15
20
  slot: string;
16
21
  abiType: string;
17
22
  blockNumber?: string | undefined;
18
23
  }, {
24
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
19
25
  address: string;
20
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
21
26
  slot: string;
22
27
  abiType: string;
23
28
  blockNumber?: string | undefined;
24
29
  }>;
25
30
  handler: (args: {
31
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
26
32
  address: string;
27
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
28
33
  slot: string;
29
34
  abiType: string;
30
35
  blockNumber?: string | undefined;
31
- }) => Promise<import("../types.js").ToolResult>;
36
+ }, identity: string) => Promise<import("../../types.js").ToolResult>;
37
+ available: (() => boolean) | undefined;
32
38
  };
33
39
  get_block_info: {
34
40
  title: string;
35
41
  description: string;
36
42
  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")[]]>;
43
+ 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
44
  blockNumber: z.ZodOptional<z.ZodString>;
39
45
  }, "strip", z.ZodTypeAny, {
40
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
46
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
41
47
  blockNumber?: string | undefined;
42
48
  }, {
43
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
49
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
44
50
  blockNumber?: string | undefined;
45
51
  }>;
46
52
  handler: (args: {
47
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
53
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
48
54
  blockNumber?: string | undefined;
49
- }) => Promise<import("../types.js").ToolResult>;
55
+ }, identity: string) => Promise<import("../../types.js").ToolResult>;
56
+ available: (() => boolean) | undefined;
50
57
  };
51
58
  trace_transaction: {
52
59
  title: string;
53
60
  description: string;
54
61
  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")[]]>;
62
+ 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
63
  transactionHash: z.ZodString;
57
- traceType: z.ZodDefault<z.ZodOptional<z.ZodEnum<["trace", "vmTrace", "stateDiff"]>>>;
64
+ traceType: z.ZodDefault<z.ZodOptional<z.ZodEnum<["trace", "prestate", "stateDiff"]>>>;
58
65
  useAnvil: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
59
66
  summarize: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
60
67
  }, "strip", z.ZodTypeAny, {
61
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
68
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
62
69
  transactionHash: string;
63
- traceType: "trace" | "vmTrace" | "stateDiff";
70
+ traceType: "trace" | "prestate" | "stateDiff";
64
71
  useAnvil: boolean;
65
72
  summarize: boolean;
66
73
  }, {
67
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
74
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
68
75
  transactionHash: string;
69
- traceType?: "trace" | "vmTrace" | "stateDiff" | undefined;
76
+ traceType?: "trace" | "prestate" | "stateDiff" | undefined;
70
77
  useAnvil?: boolean | undefined;
71
78
  summarize?: boolean | undefined;
72
79
  }>;
73
80
  handler: (args: {
74
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
81
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
75
82
  transactionHash: string;
76
- traceType: "trace" | "vmTrace" | "stateDiff";
83
+ traceType: "trace" | "prestate" | "stateDiff";
77
84
  useAnvil: boolean;
78
85
  summarize: boolean;
79
- }) => Promise<import("../types.js").ToolResult>;
86
+ }, identity: string) => Promise<import("../../types.js").ToolResult>;
87
+ available: (() => boolean) | undefined;
80
88
  };
81
89
  debug_call: {
82
90
  title: string;
83
91
  description: string;
84
92
  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")[]]>;
93
+ 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
94
  to: z.ZodString;
87
95
  data: z.ZodOptional<z.ZodString>;
88
96
  functionAbi: z.ZodOptional<z.ZodString>;
@@ -93,40 +101,41 @@ declare const _default: {
93
101
  traceType: z.ZodDefault<z.ZodOptional<z.ZodEnum<["callTracer", "prestateTracer"]>>>;
94
102
  summarize: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
95
103
  }, "strip", z.ZodTypeAny, {
96
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
104
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
97
105
  to: string;
98
106
  traceType: "callTracer" | "prestateTracer";
99
107
  summarize: boolean;
100
- data?: string | undefined;
108
+ blockNumber?: string | undefined;
101
109
  from?: string | undefined;
102
110
  value?: string | undefined;
103
- blockNumber?: string | undefined;
111
+ data?: string | undefined;
104
112
  args?: (string | number | boolean)[] | undefined;
105
113
  functionAbi?: string | undefined;
106
114
  }, {
107
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
115
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
108
116
  to: string;
109
- data?: string | undefined;
117
+ blockNumber?: string | undefined;
110
118
  from?: string | undefined;
111
119
  value?: string | undefined;
112
- blockNumber?: string | undefined;
120
+ data?: string | undefined;
113
121
  args?: (string | number | boolean)[] | undefined;
114
122
  traceType?: "callTracer" | "prestateTracer" | undefined;
115
123
  summarize?: boolean | undefined;
116
124
  functionAbi?: string | undefined;
117
125
  }>;
118
126
  handler: (args: {
119
- chain: "arbitrum" | "mainnet" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
127
+ chain: "mainnet" | "arbitrum" | "avalanche" | "base" | "bnb" | "gnosis" | "sonic" | "optimism" | "polygon" | "zksync" | "linea" | "unichain" | "localhost";
120
128
  to: string;
121
129
  traceType: "callTracer" | "prestateTracer";
122
130
  summarize: boolean;
123
- data?: string | undefined;
131
+ blockNumber?: string | undefined;
124
132
  from?: string | undefined;
125
133
  value?: string | undefined;
126
- blockNumber?: string | undefined;
134
+ data?: string | undefined;
127
135
  args?: (string | number | boolean)[] | undefined;
128
136
  functionAbi?: string | undefined;
129
- }) => Promise<import("../types.js").ToolResult>;
137
+ }, identity: string) => Promise<import("../../types.js").ToolResult>;
138
+ available: (() => boolean) | undefined;
130
139
  };
131
140
  };
132
141
  export default _default;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advanced.d.ts","sourceRoot":"","sources":["../../../src/tools/read/advanced.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAcvB,iEAAiE;AACjE,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,IAAI,CAAA;CAAE,CAG/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQD,wBAwZC"}