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
@@ -1,13 +1,49 @@
1
1
  import { mkdirSync } from 'node:fs';
2
+ import { createRequire } from 'node:module';
2
3
  import { homedir } from 'node:os';
3
4
  import { join } from 'node:path';
4
5
  import { getClientManager } from './client.js';
6
+ import { DEFAULT_IDENTITY } from './context.js';
5
7
  import { getKeyValueStorage } from './kv-storage.js';
8
+ import { log } from './log.js';
6
9
  async function importSignClient() {
7
10
  // Imported lazily: several MB of SDK that is pointless to load without a project ID.
8
11
  const { SignClient } = await import('@walletconnect/sign-client');
9
12
  return SignClient;
10
13
  }
14
+ /** Sessions do not record who paired them, so the mapping is kept alongside in the same store. */
15
+ const BINDINGS_KEY = 'web3-tools-mcp:session-identities';
16
+ /**
17
+ * The sessions an identity may sign with.
18
+ *
19
+ * Matched by the binding recorded when the session was approved, never by the accounts it
20
+ * reports — a wallet states its own account list, so trusting that would let a peer claim
21
+ * someone else's address and be handed their signing requests.
22
+ *
23
+ * An unbound session is one paired before bindings existed. It counts only for the shared
24
+ * identity, which is a server with a single user; under a real identity it belongs to
25
+ * nobody rather than to whoever asks first.
26
+ */
27
+ export function ownedSessions(live, bindings, identity) {
28
+ return live.filter((s) => bindings[s.topic] === identity || (identity === DEFAULT_IDENTITY && !bindings[s.topic]));
29
+ }
30
+ /**
31
+ * Bindings with no session behind them any more.
32
+ *
33
+ * An empty session list yields nothing: a store that has not hydrated looks exactly like one
34
+ * with no sessions, and clearing every binding would strand wallets that are still paired.
35
+ */
36
+ export function orphanedBindings(live, bindings) {
37
+ if (live.length === 0)
38
+ return [];
39
+ const known = new Set(live.map((session) => session.topic));
40
+ return Object.keys(bindings).filter((topic) => !known.has(topic));
41
+ }
42
+ /** What was paired before and is not paired now — a wallet that ended its own session. */
43
+ export function droppedSessions(before, after) {
44
+ const live = new Set(after.map((session) => session.topic));
45
+ return before.filter((session) => !live.has(session.topic));
46
+ }
11
47
  const METHODS = ['eth_sendTransaction', 'personal_sign', 'eth_signTypedData_v4'];
12
48
  const EVENTS = ['chainChanged', 'accountsChanged'];
13
49
  const APPROVAL_TIMEOUT = 300_000;
@@ -16,11 +52,7 @@ const APPROVAL_TIMEOUT = 300_000;
16
52
  * a local one is only reachable from the machine it runs on, and says so.
17
53
  */
18
54
  function serverUrl() {
19
- if (process.env.MCP_PUBLIC_URL)
20
- return process.env.MCP_PUBLIC_URL.replace(/\/$/, '');
21
- if (process.env.MCP_HTTP_PORT)
22
- return `http://localhost:${process.env.MCP_HTTP_PORT}`;
23
- return 'http://localhost';
55
+ return process.env.MCP_PUBLIC_URL?.replace(/\/$/, '') ?? 'http://localhost';
24
56
  }
25
57
  function storePath() {
26
58
  const dir = join(process.env.XDG_CONFIG_HOME ?? join(homedir(), '.config'), 'web3-tools-mcp');
@@ -34,6 +66,8 @@ export class PhoneSigner {
34
66
  pairing;
35
67
  /** Label shown in the wallet; whoever is driving this server says who they are. */
36
68
  agent;
69
+ /** The last edit of the bindings key; the next one queues behind it. */
70
+ bindingsEdit = Promise.resolve();
37
71
  constructor(projectId) {
38
72
  this.projectId = projectId;
39
73
  }
@@ -66,47 +100,129 @@ export class PhoneSigner {
66
100
  });
67
101
  return this.starting;
68
102
  }
69
- /** The most recent still-valid session, if the phone is already paired. */
70
- async session() {
103
+ /**
104
+ * Who each session belongs to, kept in the client's own store so it lands in the file or
105
+ * in Redis exactly as the sessions themselves do.
106
+ */
107
+ async bindings() {
108
+ return (await this.client?.core.storage.getItem(BINDINGS_KEY)) ?? {};
109
+ }
110
+ /**
111
+ * All bindings live under one key, so an edit is a read-modify-write — and two approvals
112
+ * settling together would each read the same map and the second would erase the first.
113
+ * Edits queue behind each other instead.
114
+ *
115
+ * ponytail: serialised per process only. Several server processes on one Redis still
116
+ * race; one key per topic would end that.
117
+ */
118
+ updateBindings(edit) {
119
+ const next = this.bindingsEdit.then(async () => {
120
+ const bindings = await this.bindings();
121
+ edit(bindings);
122
+ await this.client?.core.storage.setItem(BINDINGS_KEY, bindings);
123
+ });
124
+ this.bindingsEdit = next.catch(() => { });
125
+ return next;
126
+ }
127
+ bind(topic, identity) {
128
+ return this.updateBindings((bindings) => {
129
+ bindings[topic] = identity;
130
+ });
131
+ }
132
+ /**
133
+ * Some wallets keep one session per site, so approving a second pairing in the same app
134
+ * ends the first — the session vanishes from the store and the binding is left pointing at
135
+ * nothing. Worth saying out loud: `pair_phone_wallet` has just listed that wallet as still
136
+ * paired, and the next `wallet_status` will quietly show one fewer.
137
+ */
138
+ async reportReplaced(identity, before) {
139
+ const dropped = droppedSessions(before, await this.sessions(identity));
140
+ if (dropped.length === 0)
141
+ return;
142
+ for (const session of dropped) {
143
+ log('warning', 'WalletConnect', `${session.peer ?? 'A wallet'} ended its earlier pairing for ${session.accounts[0] ?? 'an account'} when this one was approved — ` +
144
+ 'it keeps one session per site. Pair a different wallet app to hold both at once.');
145
+ }
146
+ await this.sweepBindings();
147
+ }
148
+ /**
149
+ * Bindings outlive the sessions they point at, so they accumulate. Swept here rather than
150
+ * on every read: a pairing has just settled, which is the one moment the session store is
151
+ * known to be populated.
152
+ */
153
+ async sweepBindings() {
154
+ const orphans = orphanedBindings(this.client?.session.getAll() ?? [], await this.bindings());
155
+ if (orphans.length === 0)
156
+ return;
157
+ await this.updateBindings((bindings) => {
158
+ for (const topic of orphans)
159
+ delete bindings[topic];
160
+ });
161
+ log('info', 'WalletConnect', `Cleared ${orphans.length} binding(s) whose session is gone`);
162
+ }
163
+ /** Every session this identity owns, live or not — what disconnecting should sweep. */
164
+ async owned(identity) {
71
165
  await this.start();
72
- const sessions = this.client?.session.getAll() ?? [];
73
- const live = sessions.filter((s) => s.expiry * 1000 > Date.now());
74
- const session = live[live.length - 1];
75
- if (!session)
76
- return undefined;
77
- const accounts = session.namespaces.eip155?.accounts ?? [];
78
- return {
79
- topic: session.topic,
80
- // "eip155:8453:0xabc…" → address / chain id
81
- accounts: [...new Set(accounts.map((a) => a.split(':')[2]))],
82
- chains: [...new Set(accounts.map((a) => Number(a.split(':')[1])))],
83
- peer: session.peer?.metadata?.name
84
- };
166
+ return ownedSessions(this.client?.session.getAll() ?? [], await this.bindings(), identity);
85
167
  }
86
- async isPaired() {
87
- return Boolean(await this.session());
168
+ /**
169
+ * One of this identity's paired wallets.
170
+ *
171
+ * `account` picks between them when more than one is paired; without it the most recent
172
+ * wins, which is the only one most people have. Selecting by address is safe here in a
173
+ * way that *identifying* by address would not be: the candidates are already narrowed to
174
+ * sessions this identity was bound to when they were approved, so a wallet claiming an
175
+ * address it does not hold can only reach its own owner.
176
+ */
177
+ async session(identity = DEFAULT_IDENTITY, account) {
178
+ const paired = await this.sessions(identity);
179
+ if (!account)
180
+ return paired[paired.length - 1];
181
+ const wanted = account.toLowerCase();
182
+ return paired.find((session) => session.accounts.some((a) => a.toLowerCase() === wanted));
183
+ }
184
+ async isPaired(identity) {
185
+ return Boolean(await this.session(identity));
88
186
  }
89
187
  /**
90
188
  * Start a pairing and return its URI immediately, resolving the wallet's approval in the
91
189
  * background — a tool result only reaches the user once it returns, so blocking here
92
190
  * would hide the QR they are supposed to scan.
93
191
  */
94
- async pair(chains, agent) {
95
- // Metadata is fixed when the client starts, so a new label needs a new client. Only
96
- // safe while nothing is connected — an existing session owns the old client.
97
- if (agent && agent !== this.agent && this.client && this.client.session.getAll().length === 0) {
98
- // Close it rather than dropping the reference. Two clients sharing one storage
99
- // directory overwrite each other's subscription record, and the one that loses stops
100
- // receiving replies on its own session — a signing request then reaches the wallet,
101
- // gets approved, and the answer is published where nobody is listening.
102
- await this.client.core.relayer.transportClose().catch(() => { });
103
- this.client = undefined;
104
- }
105
- if (agent)
192
+ /**
193
+ * Name who is asking, for the wallet's approval dialog. Takes effect only before the
194
+ * client starts, because WalletConnect fixes metadata at init — call it first.
195
+ *
196
+ * There is deliberately no way to relabel a running client. Replacing it leaves the old
197
+ * one's engine alive, and its heartbeat sweeps "orphaned" subscriptions against its own,
198
+ * empty session list — unsubscribing the new session's topic two seconds after it
199
+ * settles, so every reply the wallet sends goes to a topic nobody is listening on. A
200
+ * stale name in the dialog is a far smaller cost than signing that silently hangs.
201
+ */
202
+ /**
203
+ * Hand every session one identity owns to another. A login pairs before anybody is known,
204
+ * under a placeholder, and the wallet it proved becomes that person's to sign with.
205
+ */
206
+ async rebind(from, to) {
207
+ await this.start();
208
+ await this.updateBindings((bindings) => {
209
+ for (const [topic, identity] of Object.entries(bindings)) {
210
+ if (identity === from)
211
+ bindings[topic] = to;
212
+ }
213
+ });
214
+ }
215
+ nameAgent(agent) {
216
+ if (agent && !this.client)
106
217
  this.agent = agent;
218
+ }
219
+ async pair(chains, identity = DEFAULT_IDENTITY) {
107
220
  await this.start();
221
+ log('info', 'WalletConnect', `Pairing as "${this.agent ?? 'default name'}" for ${chains.length} chain(s)`);
108
222
  if (!this.client)
109
223
  throw new Error('WalletConnect failed to start');
224
+ // What this identity had before, so the approval can tell whether the wallet kept it.
225
+ const before = await this.sessions(identity);
110
226
  const clientManager = getClientManager();
111
227
  const eip155 = chains.map((chain) => `eip155:${clientManager.getChainId(chain)}`);
112
228
  const { uri, approval } = await this.client.connect({
@@ -118,60 +234,103 @@ export class PhoneSigner {
118
234
  throw new Error('WalletConnect did not return a pairing URI');
119
235
  this.pairing = { uri, expiresAt: Date.now() + APPROVAL_TIMEOUT };
120
236
  approval()
121
- .then((session) => console.error(`[WalletConnect] Paired with ${session.peer?.metadata?.name ?? 'a wallet'}`))
122
- .catch((error) => console.error('[WalletConnect] Pairing was not completed:', error.message));
237
+ .then(async (session) => {
238
+ // Recorded as the session settles: whoever asked for this pairing owns it.
239
+ await this.bind(session.topic, identity);
240
+ log('info', 'WalletConnect', `Paired with ${session.peer?.metadata?.name ?? 'a wallet'}`);
241
+ await this.reportReplaced(identity, before);
242
+ })
243
+ .catch((error) => log('warning', 'WalletConnect', `Pairing was not completed: ${error.message}`));
123
244
  return uri;
124
245
  }
125
- /** Send a request to the paired wallet. Throws if the chain is outside the session. */
126
- async request(chain, method, params) {
127
- const session = await this.session();
128
- if (!session || !this.client)
129
- throw new Error('No phone wallet paired');
246
+ /** Send a request to one of this identity's wallets. Throws if the chain is outside the session. */
247
+ async request(chain, method, params, target = {}) {
248
+ const session = await this.session(target.identity, target.account);
249
+ if (!session || !this.client) {
250
+ throw new Error(target.account ? `No phone wallet paired for account ${target.account}` : 'No phone wallet paired');
251
+ }
130
252
  const chainId = getClientManager().getChainId(chain);
131
253
  if (!session.chains.includes(chainId)) {
132
254
  throw new Error(`The paired wallet did not approve ${chain} (chain ${chainId}). It approved: ${session.chains.join(', ')}. Re-pair to add it.`);
133
255
  }
134
- return this.client.request({
135
- topic: session.topic,
136
- chainId: `eip155:${chainId}`,
137
- request: { method, params }
138
- });
256
+ const started = Date.now();
257
+ log('info', 'WalletConnect', `→ ${method} on ${chain}, session ${session.topic.slice(0, 8)}, waiting for ${session.peer ?? 'wallet'}`);
258
+ try {
259
+ const answer = this.client.request({
260
+ topic: session.topic,
261
+ chainId: `eip155:${chainId}`,
262
+ request: { method, params }
263
+ });
264
+ // Neither MetaMask nor Rabby pushes a notification, so nobody is going to notice this
265
+ // in the next few seconds unless they already had the wallet open.
266
+ target.onWaiting?.();
267
+ const result = await answer;
268
+ log('info', 'WalletConnect', `← ${method} answered in ${Date.now() - started}ms`);
269
+ return result;
270
+ }
271
+ catch (error) {
272
+ const reason = error?.message ?? String(error);
273
+ log('warning', 'WalletConnect', `← ${method} failed after ${Date.now() - started}ms: ${reason}`);
274
+ throw error;
275
+ }
139
276
  }
140
- /** Every live session, not just the one that would be used for signing. */
141
- async sessions() {
142
- await this.start();
143
- return (this.client?.session.getAll() ?? []).map((session) => ({
144
- topic: session.topic,
145
- accounts: [...new Set((session.namespaces.eip155?.accounts ?? []).map((a) => a.split(':')[2]))],
146
- chains: [...new Set((session.namespaces.eip155?.accounts ?? []).map((a) => Number(a.split(':')[1])))],
147
- peer: session.peer?.metadata?.name
148
- }));
277
+ /** Every wallet this identity can currently sign with, oldest pairing first. */
278
+ async sessions(identity = DEFAULT_IDENTITY) {
279
+ const live = (await this.owned(identity)).filter((session) => session.expiry * 1000 > Date.now());
280
+ return live.map((session) => {
281
+ // "eip155:8453:0xabc…" → address / chain id
282
+ const accounts = session.namespaces.eip155?.accounts ?? [];
283
+ return {
284
+ topic: session.topic,
285
+ accounts: [...new Set(accounts.map((a) => a.split(':')[2]))],
286
+ chains: [...new Set(accounts.map((a) => Number(a.split(':')[1])))],
287
+ peer: session.peer?.metadata?.name
288
+ };
289
+ });
149
290
  }
150
291
  /**
151
- * Disconnect everything: sessions, and the pairings underneath them. Each pairing
152
- * attempt leaves one behind whether or not a wallet ever approved it, so they
153
- * accumulate quietly in the store.
292
+ * Disconnect one of this identity's wallets, or all of them when no account is named.
293
+ *
294
+ * Pairings underneath are swept only once no session is left at all. Each pairing attempt
295
+ * leaves one behind whether or not a wallet ever approved it, so they accumulate quietly —
296
+ * but a pairing does not record who made it, so dropping them while anyone still has a
297
+ * session could take somebody else's with it.
154
298
  */
155
- async disconnectAll() {
299
+ async disconnect(identity = DEFAULT_IDENTITY, account) {
156
300
  await this.start();
157
301
  if (!this.client)
158
302
  return { sessions: 0, pairings: 0 };
159
- const sessions = this.client.session.getAll();
160
- for (const session of sessions) {
303
+ let topics;
304
+ if (account) {
305
+ // Same rule that picks a wallet to sign with, so you can drop exactly what you chose.
306
+ const match = await this.session(identity, account);
307
+ if (!match)
308
+ throw new Error(`No paired wallet holds ${account}`);
309
+ topics = new Set([match.topic]);
310
+ }
311
+ else {
312
+ // Expired sessions included: they are still this identity's to clean up.
313
+ topics = new Set((await this.owned(identity)).map((session) => session.topic));
314
+ }
315
+ for (const topic of topics) {
161
316
  await this.client
162
- .disconnect({ topic: session.topic, reason: { code: 6000, message: 'User disconnected' } })
163
- .catch((error) => console.error('[WalletConnect] Could not disconnect a session:', error.message));
317
+ .disconnect({ topic, reason: { code: 6000, message: 'User disconnected' } })
318
+ .catch((error) => log('warning', 'WalletConnect', `Could not disconnect a session: ${error.message}`));
164
319
  }
320
+ await this.updateBindings((bindings) => {
321
+ for (const topic of topics)
322
+ delete bindings[topic];
323
+ });
324
+ const remaining = this.client.session.getAll().length;
325
+ if (remaining > 0)
326
+ return { sessions: topics.size, pairings: 0 };
165
327
  const pairings = this.client.core.pairing.getPairings();
166
328
  for (const pairing of pairings) {
167
329
  await this.client.core.pairing
168
330
  .disconnect({ topic: pairing.topic })
169
- .catch((error) => console.error('[WalletConnect] Could not drop a pairing:', error.message));
331
+ .catch((error) => log('warning', 'WalletConnect', `Could not drop a pairing: ${error.message}`));
170
332
  }
171
- return { sessions: sessions.length, pairings: pairings.length };
172
- }
173
- async unpair() {
174
- await this.disconnectAll();
333
+ return { sessions: topics.size, pairings: pairings.length };
175
334
  }
176
335
  }
177
336
  let wallets;
@@ -213,6 +372,27 @@ export async function pairingLinks(projectId, uri, search) {
213
372
  return [wallet.name, `${base}wc?uri=${encoded}`];
214
373
  }));
215
374
  }
375
+ // qrcode-terminal's own encoder, already a dependency for the chat QR; it ships untyped.
376
+ const require = createRequire(import.meta.url);
377
+ const QRCode = require('qrcode-terminal/vendor/QRCode');
378
+ const LOW_CORRECTION = 1;
379
+ /** A QR as SVG, for a page to show. The terminal QR is only legible in monospace. */
380
+ export function qrSvg(text) {
381
+ const qr = new QRCode(-1, LOW_CORRECTION);
382
+ qr.addData(text);
383
+ qr.make();
384
+ const size = qr.getModuleCount();
385
+ const quiet = 4;
386
+ let path = '';
387
+ for (let row = 0; row < size; row++) {
388
+ for (let col = 0; col < size; col++) {
389
+ if (qr.isDark(row, col))
390
+ path += `M${col + quiet} ${row + quiet}h1v1h-1z`;
391
+ }
392
+ }
393
+ const box = size + quiet * 2;
394
+ return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${box} ${box}" shape-rendering="crispEdges"><rect width="${box}" height="${box}" fill="#fff"/><path d="${path}"/></svg>`;
395
+ }
216
396
  let signer = null;
217
397
  /** Configured only when a WalletConnect project id is present. */
218
398
  export function getPhoneSigner() {
@@ -1 +1 @@
1
- {"version":3,"file":"walletconnect.js","sourceRoot":"","sources":["../src/walletconnect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"walletconnect.js","sourceRoot":"","sources":["../src/walletconnect.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,16 @@
1
1
  {
2
2
  "name": "web3-tools-mcp",
3
- "version": "2.0.1",
3
+ "version": "3.0.0",
4
4
  "description": "Model Context Protocol server for blockchain data and transaction signing — sign in a browser wallet or on your phone, with simulation and ERC-7730 clear signing before you approve",
5
5
  "type": "module",
6
- "main": "dist/index.js",
7
- "types": "dist/index.d.ts",
6
+ "main": "dist/lib.js",
7
+ "types": "dist/lib.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/lib.d.ts",
11
+ "import": "./dist/lib.js"
12
+ }
13
+ },
8
14
  "bin": {
9
15
  "web3-tools-mcp": "dist/index.js"
10
16
  },
@@ -64,7 +70,7 @@
64
70
  "express": "^5.2.1",
65
71
  "qrcode-terminal": "^0.12.0",
66
72
  "viem": "^2.31.4",
67
- "web3-wallet-relay": "^1.2.0",
73
+ "web3-wallet-relay": "2.0.0",
68
74
  "ws": "^8.18.0",
69
75
  "zod": "^3.25.76"
70
76
  },