web3-tools-mcp 1.2.1 → 1.2.3

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 (102) hide show
  1. package/README.md +91 -228
  2. package/dist/client.d.ts.map +1 -0
  3. package/dist/client.js.map +1 -0
  4. package/dist/{src/index.d.ts.map → index.d.ts.map} +1 -1
  5. package/dist/index.js.map +1 -0
  6. package/dist/tools/advanced.d.ts.map +1 -0
  7. package/dist/tools/advanced.js.map +1 -0
  8. package/dist/tools/balance.d.ts.map +1 -0
  9. package/dist/tools/balance.js.map +1 -0
  10. package/dist/tools/contract-info.d.ts.map +1 -0
  11. package/dist/tools/contract-info.js.map +1 -0
  12. package/dist/tools/contract.d.ts.map +1 -0
  13. package/dist/tools/contract.js.map +1 -0
  14. package/dist/tools/ens.d.ts.map +1 -0
  15. package/dist/tools/ens.js.map +1 -0
  16. package/dist/tools/index.d.ts.map +1 -0
  17. package/dist/tools/index.js.map +1 -0
  18. package/dist/tools/logs.d.ts.map +1 -0
  19. package/dist/tools/logs.js.map +1 -0
  20. package/dist/tools/signatures.d.ts.map +1 -0
  21. package/dist/tools/signatures.js.map +1 -0
  22. package/dist/types.d.ts.map +1 -0
  23. package/dist/types.js.map +1 -0
  24. package/dist/utils.d.ts.map +1 -0
  25. package/dist/utils.js.map +1 -0
  26. package/package.json +4 -4
  27. package/dist/package.json +0 -63
  28. package/dist/src/client.d.ts.map +0 -1
  29. package/dist/src/client.js.map +0 -1
  30. package/dist/src/index.js.map +0 -1
  31. package/dist/src/tools/advanced.d.ts.map +0 -1
  32. package/dist/src/tools/advanced.js.map +0 -1
  33. package/dist/src/tools/balance.d.ts.map +0 -1
  34. package/dist/src/tools/balance.js.map +0 -1
  35. package/dist/src/tools/contract-info.d.ts.map +0 -1
  36. package/dist/src/tools/contract-info.js.map +0 -1
  37. package/dist/src/tools/contract.d.ts.map +0 -1
  38. package/dist/src/tools/contract.js.map +0 -1
  39. package/dist/src/tools/ens.d.ts.map +0 -1
  40. package/dist/src/tools/ens.js.map +0 -1
  41. package/dist/src/tools/index.d.ts.map +0 -1
  42. package/dist/src/tools/index.js.map +0 -1
  43. package/dist/src/tools/logs.d.ts.map +0 -1
  44. package/dist/src/tools/logs.js.map +0 -1
  45. package/dist/src/tools/signatures.d.ts.map +0 -1
  46. package/dist/src/tools/signatures.js.map +0 -1
  47. package/dist/src/types.d.ts.map +0 -1
  48. package/dist/src/types.js.map +0 -1
  49. package/dist/src/utils.d.ts.map +0 -1
  50. package/dist/src/utils.js.map +0 -1
  51. package/dist/test/tools/advanced.test.d.ts +0 -2
  52. package/dist/test/tools/advanced.test.d.ts.map +0 -1
  53. package/dist/test/tools/advanced.test.js +0 -235
  54. package/dist/test/tools/advanced.test.js.map +0 -1
  55. package/dist/test/tools/balance.test.d.ts +0 -2
  56. package/dist/test/tools/balance.test.d.ts.map +0 -1
  57. package/dist/test/tools/balance.test.js +0 -167
  58. package/dist/test/tools/balance.test.js.map +0 -1
  59. package/dist/test/tools/contract-info.test.d.ts +0 -2
  60. package/dist/test/tools/contract-info.test.d.ts.map +0 -1
  61. package/dist/test/tools/contract-info.test.js +0 -286
  62. package/dist/test/tools/contract-info.test.js.map +0 -1
  63. package/dist/test/tools/contract.test.d.ts +0 -2
  64. package/dist/test/tools/contract.test.d.ts.map +0 -1
  65. package/dist/test/tools/contract.test.js +0 -234
  66. package/dist/test/tools/contract.test.js.map +0 -1
  67. package/dist/test/tools/ens.test.d.ts +0 -2
  68. package/dist/test/tools/ens.test.d.ts.map +0 -1
  69. package/dist/test/tools/ens.test.js +0 -236
  70. package/dist/test/tools/ens.test.js.map +0 -1
  71. package/dist/test/tools/logs.test.d.ts +0 -2
  72. package/dist/test/tools/logs.test.d.ts.map +0 -1
  73. package/dist/test/tools/logs.test.js +0 -196
  74. package/dist/test/tools/logs.test.js.map +0 -1
  75. package/dist/test/tools/signatures.test.d.ts +0 -2
  76. package/dist/test/tools/signatures.test.d.ts.map +0 -1
  77. package/dist/test/tools/signatures.test.js +0 -112
  78. package/dist/test/tools/signatures.test.js.map +0 -1
  79. /package/dist/{src/client.d.ts → client.d.ts} +0 -0
  80. /package/dist/{src/client.js → client.js} +0 -0
  81. /package/dist/{src/index.d.ts → index.d.ts} +0 -0
  82. /package/dist/{src/index.js → index.js} +0 -0
  83. /package/dist/{src/tools → tools}/advanced.d.ts +0 -0
  84. /package/dist/{src/tools → tools}/advanced.js +0 -0
  85. /package/dist/{src/tools → tools}/balance.d.ts +0 -0
  86. /package/dist/{src/tools → tools}/balance.js +0 -0
  87. /package/dist/{src/tools → tools}/contract-info.d.ts +0 -0
  88. /package/dist/{src/tools → tools}/contract-info.js +0 -0
  89. /package/dist/{src/tools → tools}/contract.d.ts +0 -0
  90. /package/dist/{src/tools → tools}/contract.js +0 -0
  91. /package/dist/{src/tools → tools}/ens.d.ts +0 -0
  92. /package/dist/{src/tools → tools}/ens.js +0 -0
  93. /package/dist/{src/tools → tools}/index.d.ts +0 -0
  94. /package/dist/{src/tools → tools}/index.js +0 -0
  95. /package/dist/{src/tools → tools}/logs.d.ts +0 -0
  96. /package/dist/{src/tools → tools}/logs.js +0 -0
  97. /package/dist/{src/tools → tools}/signatures.d.ts +0 -0
  98. /package/dist/{src/tools → tools}/signatures.js +0 -0
  99. /package/dist/{src/types.d.ts → types.d.ts} +0 -0
  100. /package/dist/{src/types.js → types.js} +0 -0
  101. /package/dist/{src/utils.d.ts → utils.d.ts} +0 -0
  102. /package/dist/{src/utils.js → utils.js} +0 -0
@@ -1,196 +0,0 @@
1
- import { describe, it, expect, beforeAll } from 'vitest';
2
- import { config } from 'dotenv';
3
- import { initializeClientManager } from '../../src/client.js';
4
- import logsTools from '../../src/tools/logs.js';
5
- // Load environment variables
6
- config();
7
- describe('Logs Tools', () => {
8
- beforeAll(() => {
9
- // Initialize client manager with config
10
- initializeClientManager({
11
- alchemyApiKey: process.env.ALCHEMY_API_KEY,
12
- infuraApiKey: process.env.INFURA_API_KEY,
13
- etherscanApiKey: process.env.ETHERSCAN_API_KEY,
14
- hypersyncApiKey: process.env.HYPERSYNC_API_KEY
15
- });
16
- });
17
- describe('get_logs', () => {
18
- it('should fetch Transfer events from USDC contract', async () => {
19
- const USDC_CONTRACT = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
20
- const result = await logsTools.get_logs.handler({
21
- chain: 'mainnet',
22
- address: USDC_CONTRACT,
23
- eventAbi: 'event Transfer(address indexed from, address indexed to, uint256 value)',
24
- fromBlock: '21000000',
25
- toBlock: '21000100'
26
- });
27
- const data = JSON.parse(result.content[0].text);
28
- expect(data.logs).toBeDefined();
29
- expect(Array.isArray(data.logs)).toBe(true);
30
- expect(data.chain).toBe('mainnet');
31
- expect(data.filters.address).toBe(USDC_CONTRACT);
32
- expect(data.fromBlock).toBe('21000000');
33
- expect(data.toBlock).toBe('21000100');
34
- }, 30000);
35
- it('should filter Transfer events by indexed from parameter', async () => {
36
- const USDC_CONTRACT = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
37
- const BINANCE_ADDRESS = '0x28C6c06298d514Db089934071355E5743bf21d60';
38
- const result = await logsTools.get_logs.handler({
39
- chain: 'mainnet',
40
- address: USDC_CONTRACT,
41
- eventAbi: 'event Transfer(address indexed from, address indexed to, uint256 value)',
42
- eventArgs: {
43
- from: BINANCE_ADDRESS
44
- },
45
- fromBlock: '21000000',
46
- toBlock: '21000100'
47
- });
48
- const data = JSON.parse(result.content[0].text);
49
- expect(data.logs).toBeDefined();
50
- // All events should have the specified 'from' address
51
- if (data.logs.length > 0) {
52
- data.logs.forEach((event) => {
53
- expect(event.decoded.args.from.toLowerCase()).toBe(BINANCE_ADDRESS.toLowerCase());
54
- });
55
- }
56
- }, 30000);
57
- it('should filter Transfer events by indexed to parameter', async () => {
58
- const USDC_CONTRACT = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
59
- const RECEIVER_ADDRESS = '0x28C6c06298d514Db089934071355E5743bf21d60';
60
- const result = await logsTools.get_logs.handler({
61
- chain: 'mainnet',
62
- address: USDC_CONTRACT,
63
- eventAbi: 'event Transfer(address indexed from, address indexed to, uint256 value)',
64
- eventArgs: {
65
- to: RECEIVER_ADDRESS
66
- },
67
- fromBlock: '21000000',
68
- toBlock: '21000100'
69
- });
70
- const data = JSON.parse(result.content[0].text);
71
- expect(data.logs).toBeDefined();
72
- // All events should have the specified 'to' address
73
- if (data.logs.length > 0) {
74
- data.logs.forEach((event) => {
75
- expect(event.decoded.args.to.toLowerCase()).toBe(RECEIVER_ADDRESS.toLowerCase());
76
- });
77
- }
78
- }, 30000);
79
- it('should decode event arguments correctly', async () => {
80
- const USDC_CONTRACT = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
81
- const result = await logsTools.get_logs.handler({
82
- chain: 'mainnet',
83
- address: USDC_CONTRACT,
84
- eventAbi: 'event Transfer(address indexed from, address indexed to, uint256 value)',
85
- fromBlock: '21000000',
86
- toBlock: '21000010'
87
- });
88
- const data = JSON.parse(result.content[0].text);
89
- if (data.logs.length > 0) {
90
- const event = data.logs[0];
91
- expect(event.decoded.args).toBeDefined();
92
- expect(event.decoded.args.from).toBeDefined();
93
- expect(event.decoded.args.to).toBeDefined();
94
- expect(event.decoded.args.value).toBeDefined();
95
- expect(event.blockNumber).toBeDefined();
96
- expect(event.transactionHash).toBeDefined();
97
- expect(event.logIndex).toBeDefined();
98
- }
99
- }, 30000);
100
- it('should fetch Approval events', async () => {
101
- const USDC_CONTRACT = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
102
- const result = await logsTools.get_logs.handler({
103
- chain: 'mainnet',
104
- address: USDC_CONTRACT,
105
- eventAbi: 'event Approval(address indexed owner, address indexed spender, uint256 value)',
106
- fromBlock: '21000000',
107
- toBlock: '21000100'
108
- });
109
- const data = JSON.parse(result.content[0].text);
110
- expect(data.logs).toBeDefined();
111
- if (data.logs.length > 0) {
112
- const event = data.logs[0];
113
- expect(event.decoded.args.owner).toBeDefined();
114
- expect(event.decoded.args.spender).toBeDefined();
115
- expect(event.decoded.args.value).toBeDefined();
116
- }
117
- }, 30000);
118
- it('should work without address filter (query all contracts)', async () => {
119
- const result = await logsTools.get_logs.handler({
120
- chain: 'mainnet',
121
- eventAbi: 'event Transfer(address indexed from, address indexed to, uint256 value)',
122
- fromBlock: '21000000',
123
- toBlock: '21000001'
124
- });
125
- const data = JSON.parse(result.content[0].text);
126
- expect(data.logs).toBeDefined();
127
- expect(Array.isArray(data.logs)).toBe(true);
128
- }, 30000);
129
- it('should handle events with no results', async () => {
130
- const USDC_CONTRACT = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
131
- const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';
132
- const result = await logsTools.get_logs.handler({
133
- chain: 'mainnet',
134
- address: USDC_CONTRACT,
135
- eventAbi: 'event Transfer(address indexed from, address indexed to, uint256 value)',
136
- eventArgs: {
137
- from: ZERO_ADDRESS,
138
- to: ZERO_ADDRESS
139
- },
140
- fromBlock: '21000000',
141
- toBlock: '21000010'
142
- });
143
- const data = JSON.parse(result.content[0].text);
144
- expect(data.logs).toBeDefined();
145
- expect(Array.isArray(data.logs)).toBe(true);
146
- // Might have 0 events, that's valid
147
- }, 30000);
148
- it('should work with different chains', async () => {
149
- const USDC_BASE = '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913';
150
- const result = await logsTools.get_logs.handler({
151
- chain: 'base',
152
- address: USDC_BASE,
153
- eventAbi: 'event Transfer(address indexed from, address indexed to, uint256 value)',
154
- fromBlock: '10000000',
155
- toBlock: '10000010'
156
- });
157
- const data = JSON.parse(result.content[0].text);
158
- expect(data.chain).toBe('base');
159
- expect(data.logs).toBeDefined();
160
- }, 30000);
161
- it('should include event metadata', async () => {
162
- const USDC_CONTRACT = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
163
- const result = await logsTools.get_logs.handler({
164
- chain: 'mainnet',
165
- address: USDC_CONTRACT,
166
- eventAbi: 'event Transfer(address indexed from, address indexed to, uint256 value)',
167
- fromBlock: '21000000',
168
- toBlock: '21000010'
169
- });
170
- const data = JSON.parse(result.content[0].text);
171
- expect(data.count).toBeDefined();
172
- expect(typeof data.count).toBe('number');
173
- expect(data.eventSignature).toContain('Transfer');
174
- }, 30000);
175
- it('should handle custom events with different parameter types', async () => {
176
- // Using a well-known contract with custom events - Uniswap V2 Pair
177
- const UNISWAP_PAIR = '0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc'; // USDC-WETH
178
- const result = await logsTools.get_logs.handler({
179
- chain: 'mainnet',
180
- address: UNISWAP_PAIR,
181
- eventAbi: 'event Sync(uint112 reserve0, uint112 reserve1)',
182
- fromBlock: '21000000',
183
- toBlock: '21000010'
184
- });
185
- const data = JSON.parse(result.content[0].text);
186
- expect(data.logs).toBeDefined();
187
- if (data.logs.length > 0) {
188
- const event = data.logs[0];
189
- expect(event.decoded.args).toBeDefined();
190
- expect(event.decoded.args.reserve0).toBeDefined();
191
- expect(event.decoded.args.reserve1).toBeDefined();
192
- }
193
- }, 30000);
194
- });
195
- });
196
- //# sourceMappingURL=logs.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logs.test.js","sourceRoot":"","sources":["../../../test/tools/logs.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=signatures.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"signatures.test.d.ts","sourceRoot":"","sources":["../../../test/tools/signatures.test.ts"],"names":[],"mappings":""}
@@ -1,112 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import signatureTools from "../../src/tools/signatures.js";
3
- describe("Signature Tools", () => {
4
- describe("get_function_signature", () => {
5
- it("should generate correct signature for transfer function", async () => {
6
- const result = await signatureTools.get_function_signature.handler({
7
- items: [{ functionAbi: "function transfer(address to, uint256 amount)" }],
8
- });
9
- const data = JSON.parse(result.content[0].text);
10
- expect(data).toHaveLength(1);
11
- expect(data[0].signature).toBe("0xa9059cbb");
12
- expect(data[0].functionName).toBe("transfer");
13
- expect(data[0].inputs).toHaveLength(2);
14
- });
15
- it("should handle multiple function signatures in batch", async () => {
16
- const result = await signatureTools.get_function_signature.handler({
17
- items: [
18
- { functionAbi: "function balanceOf(address owner) view returns (uint256)" },
19
- { functionAbi: "function totalSupply() view returns (uint256)" },
20
- { functionAbi: "function name() view returns (string)" },
21
- ],
22
- });
23
- const data = JSON.parse(result.content[0].text);
24
- expect(data).toHaveLength(3);
25
- expect(data[0].signature).toBe("0x70a08231"); // balanceOf
26
- expect(data[0].functionName).toBe("balanceOf");
27
- expect(data[1].functionName).toBe("totalSupply");
28
- expect(data[2].functionName).toBe("name");
29
- });
30
- it("should include state mutability information", async () => {
31
- const result = await signatureTools.get_function_signature.handler({
32
- items: [{ functionAbi: "function getValue() view returns (uint256)" }],
33
- });
34
- const data = JSON.parse(result.content[0].text);
35
- expect(data[0].stateMutability).toBe("view");
36
- });
37
- });
38
- describe("get_event_signature", () => {
39
- it("should generate correct topic0 for Transfer event", async () => {
40
- const result = await signatureTools.get_event_signature.handler({
41
- items: [
42
- { eventAbi: "event Transfer(address indexed from, address indexed to, uint256 value)" },
43
- ],
44
- });
45
- const data = JSON.parse(result.content[0].text);
46
- expect(data).toHaveLength(1);
47
- expect(data[0].topic0).toBe("0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef");
48
- expect(data[0].eventName).toBe("Transfer");
49
- });
50
- it("should handle multiple events in batch", async () => {
51
- const result = await signatureTools.get_event_signature.handler({
52
- items: [
53
- { eventAbi: "event Transfer(address indexed from, address indexed to, uint256 value)" },
54
- {
55
- eventAbi: "event Approval(address indexed owner, address indexed spender, uint256 value)",
56
- },
57
- ],
58
- });
59
- const data = JSON.parse(result.content[0].text);
60
- expect(data).toHaveLength(2);
61
- expect(data[0].eventName).toBe("Transfer");
62
- expect(data[1].eventName).toBe("Approval");
63
- });
64
- it("should include indexed parameter information", async () => {
65
- const result = await signatureTools.get_event_signature.handler({
66
- items: [
67
- { eventAbi: "event Transfer(address indexed from, address indexed to, uint256 value)" },
68
- ],
69
- });
70
- const data = JSON.parse(result.content[0].text);
71
- expect(data[0].inputs).toHaveLength(3);
72
- expect(data[0].inputs[0].indexed).toBe(true);
73
- expect(data[0].inputs[1].indexed).toBe(true);
74
- // Some parsers omit the `indexed` property for non-indexed params -> treat undefined as false
75
- expect(data[0].inputs[2].indexed ?? false).toBe(false);
76
- });
77
- });
78
- describe("get_error_signature", () => {
79
- it("should generate correct signature for custom error", async () => {
80
- const result = await signatureTools.get_error_signature.handler({
81
- items: [{ errorAbi: "error InsufficientBalance(uint256 available, uint256 required)" }],
82
- });
83
- const data = JSON.parse(result.content[0].text);
84
- expect(data).toHaveLength(1);
85
- expect(data[0].signature).toMatch(/^0x[a-f0-9]{8}$/);
86
- expect(data[0].errorName).toBe("InsufficientBalance");
87
- expect(data[0].inputs).toHaveLength(2);
88
- });
89
- it("should handle multiple errors in batch", async () => {
90
- const result = await signatureTools.get_error_signature.handler({
91
- items: [
92
- { errorAbi: "error InsufficientBalance(uint256 available, uint256 required)" },
93
- { errorAbi: "error Unauthorized()" },
94
- { errorAbi: "error InvalidAddress(address addr)" },
95
- ],
96
- });
97
- const data = JSON.parse(result.content[0].text);
98
- expect(data).toHaveLength(3);
99
- expect(data[0].errorName).toBe("InsufficientBalance");
100
- expect(data[1].errorName).toBe("Unauthorized");
101
- expect(data[2].errorName).toBe("InvalidAddress");
102
- });
103
- it("should handle errors with no parameters", async () => {
104
- const result = await signatureTools.get_error_signature.handler({
105
- items: [{ errorAbi: "error Unauthorized()" }],
106
- });
107
- const data = JSON.parse(result.content[0].text);
108
- expect(data[0].inputs).toHaveLength(0);
109
- });
110
- });
111
- });
112
- //# sourceMappingURL=signatures.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"signatures.test.js","sourceRoot":"","sources":["../../../test/tools/signatures.test.ts"],"names":[],"mappings":"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"}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes