web3-tools-mcp 1.5.0 → 2.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 (109) hide show
  1. package/CHANGELOG.md +95 -0
  2. package/README.md +346 -164
  3. package/dist/anvil.d.ts +1 -1
  4. package/dist/anvil.d.ts.map +1 -1
  5. package/dist/anvil.js +11 -9
  6. package/dist/anvil.js.map +1 -1
  7. package/dist/chain-meta.d.ts.map +1 -1
  8. package/dist/chain-meta.js +7 -3
  9. package/dist/chain-meta.js.map +1 -1
  10. package/dist/chains.d.ts +960 -0
  11. package/dist/chains.d.ts.map +1 -0
  12. package/dist/chains.js +108 -0
  13. package/dist/chains.js.map +1 -0
  14. package/dist/client.d.ts +10 -1717
  15. package/dist/client.d.ts.map +1 -1
  16. package/dist/client.js +33 -216
  17. package/dist/client.js.map +1 -1
  18. package/dist/http-server.d.ts +18 -0
  19. package/dist/http-server.d.ts.map +1 -0
  20. package/dist/http-server.js +89 -0
  21. package/dist/http-server.js.map +1 -0
  22. package/dist/index.js +77 -32
  23. package/dist/index.js.map +1 -1
  24. package/dist/kv-storage.d.ts +23 -0
  25. package/dist/kv-storage.d.ts.map +1 -0
  26. package/dist/kv-storage.js +69 -0
  27. package/dist/kv-storage.js.map +1 -0
  28. package/dist/oauth.d.ts +31 -0
  29. package/dist/oauth.d.ts.map +1 -0
  30. package/dist/oauth.js +227 -0
  31. package/dist/oauth.js.map +1 -0
  32. package/dist/preview.d.ts.map +1 -1
  33. package/dist/preview.js +14 -4
  34. package/dist/preview.js.map +1 -1
  35. package/dist/tools/advanced.d.ts +4 -4
  36. package/dist/tools/advanced.d.ts.map +1 -1
  37. package/dist/tools/advanced.js +228 -247
  38. package/dist/tools/advanced.js.map +1 -1
  39. package/dist/tools/balance.d.ts +1 -1
  40. package/dist/tools/balance.d.ts.map +1 -1
  41. package/dist/tools/balance.js +97 -103
  42. package/dist/tools/balance.js.map +1 -1
  43. package/dist/tools/contract-info.d.ts +3 -3
  44. package/dist/tools/contract-info.d.ts.map +1 -1
  45. package/dist/tools/contract-info.js +150 -161
  46. package/dist/tools/contract-info.js.map +1 -1
  47. package/dist/tools/contract.d.ts +4 -4
  48. package/dist/tools/contract.d.ts.map +1 -1
  49. package/dist/tools/contract.js +91 -110
  50. package/dist/tools/contract.js.map +1 -1
  51. package/dist/tools/ens.d.ts +6 -6
  52. package/dist/tools/ens.d.ts.map +1 -1
  53. package/dist/tools/ens.js +239 -297
  54. package/dist/tools/ens.js.map +1 -1
  55. package/dist/tools/gas.d.ts +4 -4
  56. package/dist/tools/gas.d.ts.map +1 -1
  57. package/dist/tools/gas.js +90 -138
  58. package/dist/tools/gas.js.map +1 -1
  59. package/dist/tools/index.d.ts +1 -1
  60. package/dist/tools/index.d.ts.map +1 -1
  61. package/dist/tools/logs.d.ts +1 -1
  62. package/dist/tools/logs.d.ts.map +1 -1
  63. package/dist/tools/logs.js +36 -37
  64. package/dist/tools/logs.js.map +1 -1
  65. package/dist/tools/signatures.d.ts.map +1 -1
  66. package/dist/tools/signatures.js +67 -89
  67. package/dist/tools/signatures.js.map +1 -1
  68. package/dist/tools/transactions.d.ts +48 -4
  69. package/dist/tools/transactions.d.ts.map +1 -1
  70. package/dist/tools/transactions.js +228 -44
  71. package/dist/tools/transactions.js.map +1 -1
  72. package/dist/types.d.ts +2 -1
  73. package/dist/types.d.ts.map +1 -1
  74. package/dist/utils.d.ts +3 -8
  75. package/dist/utils.d.ts.map +1 -1
  76. package/dist/utils.js +36 -98
  77. package/dist/utils.js.map +1 -1
  78. package/dist/wallet-client.d.ts +11 -1
  79. package/dist/wallet-client.d.ts.map +1 -1
  80. package/dist/wallet-client.js +27 -9
  81. package/dist/wallet-client.js.map +1 -1
  82. package/dist/walletconnect.d.ts +52 -0
  83. package/dist/walletconnect.d.ts.map +1 -0
  84. package/dist/walletconnect.js +221 -0
  85. package/dist/walletconnect.js.map +1 -0
  86. package/package.json +21 -9
  87. package/src/anvil.ts +15 -18
  88. package/src/chain-meta.ts +8 -4
  89. package/src/chains.ts +145 -0
  90. package/src/client.ts +39 -252
  91. package/src/http-server.ts +117 -0
  92. package/src/index.ts +98 -49
  93. package/src/kv-storage.ts +83 -0
  94. package/src/oauth.ts +270 -0
  95. package/src/preview.ts +15 -14
  96. package/src/tools/advanced.ts +195 -213
  97. package/src/tools/balance.ts +103 -108
  98. package/src/tools/contract-info.ts +163 -184
  99. package/src/tools/contract.ts +123 -144
  100. package/src/tools/ens.ts +290 -345
  101. package/src/tools/gas.ts +122 -170
  102. package/src/tools/index.ts +2 -2
  103. package/src/tools/logs.ts +45 -43
  104. package/src/tools/signatures.ts +68 -86
  105. package/src/tools/transactions.ts +283 -50
  106. package/src/types.ts +2 -15
  107. package/src/utils.ts +56 -127
  108. package/src/wallet-client.ts +31 -9
  109. package/src/walletconnect.ts +269 -0
@@ -2,12 +2,12 @@ import {
2
2
  type AbiEvent,
3
3
  type AbiFunction,
4
4
  type AbiParameter,
5
+ encodeFunctionData,
5
6
  keccak256,
6
7
  parseAbiItem,
7
8
  toBytes,
8
9
  toEventSignature,
9
- toFunctionSignature,
10
- encodeFunctionData
10
+ toFunctionSignature
11
11
  } from 'viem'
12
12
  import { z } from 'zod'
13
13
  import type { AbiError } from '../types.js'
@@ -24,9 +24,7 @@ const EventAbiSchema = z.object({
24
24
  })
25
25
 
26
26
  const ErrorAbiSchema = z.object({
27
- errorAbi: z
28
- .string()
29
- .describe('Error ABI definition (e.g., "error InsufficientBalance(uint256 available, uint256 required)")')
27
+ errorAbi: z.string().describe('Error ABI definition (e.g., "error InsufficientBalance(uint256 available, uint256 required)")')
30
28
  })
31
29
 
32
30
  export default {
@@ -34,33 +32,27 @@ export default {
34
32
  'Calculate Function Signatures',
35
33
  'Generate 4-byte function selectors from ABI definitions. BATCH OPTIMIZED - use for transaction decoding.',
36
34
  z.object({
37
- items: z
38
- .array(FunctionAbiSchema)
39
- .describe('Array of function ABI definitions. Batch multiple functions for efficiency.')
35
+ items: z.array(FunctionAbiSchema).describe('Array of function ABI definitions. Batch multiple functions for efficiency.')
40
36
  }),
41
37
  async (args) => {
42
- try {
43
- const results = args.items.map((item) => {
44
- const abiItem = parseAbiItem(item.functionAbi) as AbiFunction
45
- const signature = toFunctionSignature(abiItem)
46
- const hash = keccak256(toBytes(signature))
47
- const selector = hash.slice(0, 10)
38
+ const results = args.items.map((item) => {
39
+ const abiItem = parseAbiItem(item.functionAbi) as AbiFunction
40
+ const signature = toFunctionSignature(abiItem)
41
+ const hash = keccak256(toBytes(signature))
42
+ const selector = hash.slice(0, 10)
48
43
 
49
- return {
50
- signature: selector,
51
- fullSignature: signature,
52
- functionName: abiItem.name,
53
- inputs: abiItem.inputs,
54
- outputs: abiItem.outputs || [],
55
- stateMutability: abiItem.stateMutability,
56
- originalAbi: item.functionAbi
57
- }
58
- })
44
+ return {
45
+ signature: selector,
46
+ fullSignature: signature,
47
+ functionName: abiItem.name,
48
+ inputs: abiItem.inputs,
49
+ outputs: abiItem.outputs || [],
50
+ stateMutability: abiItem.stateMutability,
51
+ originalAbi: item.functionAbi
52
+ }
53
+ })
59
54
 
60
- return formatResponse(results)
61
- } catch (error) {
62
- throw new Error(`Failed to parse function ABI: ${error}`)
63
- }
55
+ return formatResponse(results)
64
56
  }
65
57
  ),
66
58
 
@@ -71,27 +63,23 @@ export default {
71
63
  items: z.array(EventAbiSchema).describe('Array of event ABI definitions. Batch multiple events for optimal performance.')
72
64
  }),
73
65
  async (args) => {
74
- try {
75
- const results = args.items.map((item) => {
76
- const abiItem = parseAbiItem(item.eventAbi) as AbiEvent
77
- const signature = toEventSignature(abiItem)
78
- const hash = keccak256(toBytes(signature))
66
+ const results = args.items.map((item) => {
67
+ const abiItem = parseAbiItem(item.eventAbi) as AbiEvent
68
+ const signature = toEventSignature(abiItem)
69
+ const hash = keccak256(toBytes(signature))
79
70
 
80
- return {
81
- signature: hash,
82
- topic0: hash,
83
- fullSignature: signature,
84
- eventName: abiItem.name,
85
- inputs: abiItem.inputs,
86
- anonymous: abiItem.anonymous || false,
87
- originalAbi: item.eventAbi
88
- }
89
- })
71
+ return {
72
+ signature: hash,
73
+ topic0: hash,
74
+ fullSignature: signature,
75
+ eventName: abiItem.name,
76
+ inputs: abiItem.inputs,
77
+ anonymous: abiItem.anonymous || false,
78
+ originalAbi: item.eventAbi
79
+ }
80
+ })
90
81
 
91
- return formatResponse(results)
92
- } catch (error) {
93
- throw new Error(`Failed to parse event ABI: ${error}`)
94
- }
82
+ return formatResponse(results)
95
83
  }
96
84
  ),
97
85
 
@@ -102,58 +90,52 @@ export default {
102
90
  items: z.array(ErrorAbiSchema).describe('Array of error ABI definitions. Batch related errors for efficiency.')
103
91
  }),
104
92
  async (args) => {
105
- try {
106
- const results = args.items.map((item) => {
107
- const abiItem = parseAbiItem(item.errorAbi) as AbiError
108
- const signature = `${abiItem.name}(${abiItem.inputs.map((input: AbiParameter) => input.type).join(',')})`
109
- const hash = keccak256(toBytes(signature))
110
- const selector = hash.slice(0, 10)
93
+ const results = args.items.map((item) => {
94
+ const abiItem = parseAbiItem(item.errorAbi) as AbiError
95
+ const signature = `${abiItem.name}(${abiItem.inputs.map((input: AbiParameter) => input.type).join(',')})`
96
+ const hash = keccak256(toBytes(signature))
97
+ const selector = hash.slice(0, 10)
111
98
 
112
- return {
113
- signature: selector,
114
- fullSignature: signature,
115
- errorName: abiItem.name,
116
- inputs: abiItem.inputs,
117
- originalAbi: item.errorAbi
118
- }
119
- })
99
+ return {
100
+ signature: selector,
101
+ fullSignature: signature,
102
+ errorName: abiItem.name,
103
+ inputs: abiItem.inputs,
104
+ originalAbi: item.errorAbi
105
+ }
106
+ })
120
107
 
121
- return formatResponse(results)
122
- } catch (error) {
123
- throw new Error(`Failed to parse error ABI: ${error}`)
124
- }
108
+ return formatResponse(results)
125
109
  }
126
110
  ),
127
111
 
128
112
  encode_function_data: createTool(
129
113
  'Encode Function Call Data',
130
- 'Encode a function call with parameters into transaction data. Use this before calling call_contract_write.',
114
+ 'Encode a function call with parameters into transaction data. Use this before calling write_contract.',
131
115
  z.object({
132
116
  functionAbi: z.string().describe('Function ABI definition (e.g., "function transfer(address to, uint256 amount)")'),
133
- args: z.array(z.union([z.string(), z.number(), z.boolean()])).describe('Function arguments in order matching the ABI signature. Automatically type-converted.')
117
+ args: z
118
+ .array(z.union([z.string(), z.number(), z.boolean()]))
119
+ .describe('Function arguments in order matching the ABI signature. Automatically type-converted.')
134
120
  }),
135
121
  async (args) => {
136
- try {
137
- const abiItem = parseAbiItem(args.functionAbi) as AbiFunction
122
+ const abiItem = parseAbiItem(args.functionAbi) as AbiFunction
138
123
 
139
- // Encode the function data
140
- const data = encodeFunctionData({
141
- abi: [abiItem],
142
- functionName: abiItem.name,
143
- args: args.args as readonly unknown[]
144
- })
124
+ // Encode the function data
125
+ const data = encodeFunctionData({
126
+ abi: [abiItem],
127
+ functionName: abiItem.name,
128
+ args: args.args as readonly unknown[]
129
+ })
145
130
 
146
- return formatResponse({
147
- data,
148
- functionName: abiItem.name,
149
- functionSignature: toFunctionSignature(abiItem),
150
- selector: data.slice(0, 10),
151
- encodedArgs: data.slice(10),
152
- message: 'Function data encoded successfully. Use this data with call_contract_write tool.'
153
- })
154
- } catch (error) {
155
- throw new Error(`Failed to encode function data: ${error}`)
156
- }
131
+ return formatResponse({
132
+ data,
133
+ functionName: abiItem.name,
134
+ functionSignature: toFunctionSignature(abiItem),
135
+ selector: data.slice(0, 10),
136
+ encodedArgs: data.slice(10),
137
+ message: 'Function data encoded successfully. Use this data with write_contract tool.'
138
+ })
157
139
  }
158
140
  )
159
141
  }