web3-tools-mcp 1.1.0 → 1.2.1

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 (68) hide show
  1. package/README.md +28 -4
  2. package/dist/package.json +8 -5
  3. package/dist/src/tools/ens.d.ts +119 -0
  4. package/dist/src/tools/ens.d.ts.map +1 -0
  5. package/dist/src/tools/ens.js +425 -0
  6. package/dist/src/tools/ens.js.map +1 -0
  7. package/dist/src/tools/index.d.ts.map +1 -1
  8. package/dist/src/tools/index.js +3 -1
  9. package/dist/src/tools/index.js.map +1 -1
  10. package/dist/test/tools/ens.test.d.ts +2 -0
  11. package/dist/test/tools/ens.test.d.ts.map +1 -0
  12. package/dist/test/tools/ens.test.js +236 -0
  13. package/dist/test/tools/ens.test.js.map +1 -0
  14. package/package.json +8 -5
  15. package/src/tools/ens.ts +493 -0
  16. package/src/tools/index.ts +3 -1
  17. package/dist/client.d.ts +0 -1653
  18. package/dist/client.d.ts.map +0 -1
  19. package/dist/client.js +0 -142
  20. package/dist/client.js.map +0 -1
  21. package/dist/index.d.ts +0 -3
  22. package/dist/index.d.ts.map +0 -1
  23. package/dist/index.js +0 -88
  24. package/dist/index.js.map +0 -1
  25. package/dist/test/mcp-client.test.d.ts +0 -2
  26. package/dist/test/mcp-client.test.d.ts.map +0 -1
  27. package/dist/test/mcp-client.test.js +0 -376
  28. package/dist/test/mcp-client.test.js.map +0 -1
  29. package/dist/tools/advanced.d.ts +0 -75
  30. package/dist/tools/advanced.d.ts.map +0 -1
  31. package/dist/tools/advanced.js +0 -234
  32. package/dist/tools/advanced.js.map +0 -1
  33. package/dist/tools/balance.d.ts +0 -55
  34. package/dist/tools/balance.d.ts.map +0 -1
  35. package/dist/tools/balance.js +0 -146
  36. package/dist/tools/balance.js.map +0 -1
  37. package/dist/tools/batch.d.ts +0 -122
  38. package/dist/tools/batch.d.ts.map +0 -1
  39. package/dist/tools/batch.js +0 -243
  40. package/dist/tools/batch.js.map +0 -1
  41. package/dist/tools/contract-info.d.ts +0 -79
  42. package/dist/tools/contract-info.d.ts.map +0 -1
  43. package/dist/tools/contract-info.js +0 -450
  44. package/dist/tools/contract-info.js.map +0 -1
  45. package/dist/tools/contract.d.ts +0 -79
  46. package/dist/tools/contract.d.ts.map +0 -1
  47. package/dist/tools/contract.js +0 -140
  48. package/dist/tools/contract.js.map +0 -1
  49. package/dist/tools/index.d.ts +0 -3
  50. package/dist/tools/index.d.ts.map +0 -1
  51. package/dist/tools/index.js +0 -27
  52. package/dist/tools/index.js.map +0 -1
  53. package/dist/tools/logs.d.ts +0 -39
  54. package/dist/tools/logs.d.ts.map +0 -1
  55. package/dist/tools/logs.js +0 -231
  56. package/dist/tools/logs.js.map +0 -1
  57. package/dist/tools/signatures.d.ts +0 -83
  58. package/dist/tools/signatures.d.ts.map +0 -1
  59. package/dist/tools/signatures.js +0 -93
  60. package/dist/tools/signatures.js.map +0 -1
  61. package/dist/types.d.ts +0 -22
  62. package/dist/types.d.ts.map +0 -1
  63. package/dist/types.js +0 -2
  64. package/dist/types.js.map +0 -1
  65. package/dist/utils.d.ts +0 -22
  66. package/dist/utils.d.ts.map +0 -1
  67. package/dist/utils.js +0 -183
  68. package/dist/utils.js.map +0 -1
package/README.md CHANGED
@@ -92,11 +92,12 @@ npx web3-tools-mcp
92
92
  ## 🌟 Key Features
93
93
 
94
94
  - **Multi-chain Support**: Works with Ethereum mainnet, Base, Arbitrum, Polygon, Optimism, Celo, and localhost
95
+ - **ENS Name Resolution**: Resolve ENS names to addresses, reverse lookup addresses to names, and query ENS records
95
96
  - **Smart Contract Interactions**: Call view/pure functions, get contract ABIs, and analyze contract bytecode
96
97
  - **Event Log Analysis**: Query and decode blockchain events with flexible filtering
97
98
  - **Token Operations**: Get native and ERC20 token balances for single or multiple addresses
98
99
  - **ABI Utilities**: Generate function, event, and error signatures from ABI definitions
99
- - **Batch Operations**: Execute multiple contract calls or balance queries efficiently
100
+ - **Batch Operations**: Execute multiple contract calls, balance queries, or ENS resolutions efficiently
100
101
  - **Transaction Analysis**: Trace transactions for detailed execution information
101
102
  - **Enhanced RPC Support**: Automatic failover between providers (Alchemy, Infura, public RPCs)
102
103
  - **Hypersync Integration**: Fast event log querying with fallback support
@@ -143,17 +144,40 @@ Retrieve specific source file from cached contract data. Use after calling `get_
143
144
  #### `is_contract`
144
145
  Check if an address is a smart contract or EOA (Externally Owned Account). Returns contract status and bytecode length.
145
146
 
146
- ### 3. Balance Query Tools
147
+ ### 3. ENS (Ethereum Name Service) Tools
148
+
149
+ #### `resolve_ens_name`
150
+ Resolve an ENS name to its Ethereum address. ENS names are human-readable identifiers (like vitalik.eth) that resolve to Ethereum addresses. Returns the resolved address or null if not found.
151
+
152
+ #### `reverse_resolve_ens`
153
+ Reverse resolve an Ethereum address to its primary ENS name. Returns the ENS name if the address has set a reverse record, useful for displaying human-readable names for addresses.
154
+
155
+ #### `get_ens_text_record`
156
+ Retrieve text records from an ENS name. Common text record keys include:
157
+ - `avatar`: Avatar image URL
158
+ - `description`: Description text
159
+ - `email`: Email address
160
+ - `url`: Website URL
161
+ - `com.twitter`: Twitter handle
162
+ - `com.github`: GitHub username
163
+
164
+ #### `get_ens_avatar`
165
+ Get the avatar URI for an ENS name. Returns the avatar URL if set, which can be an HTTPS URL, IPFS hash, or NFT reference.
166
+
167
+ #### `batch_resolve_ens_names`
168
+ Resolve multiple ENS names to addresses in a single batch operation for improved efficiency. Returns results for all names with success/failure status.
169
+
170
+ ### 4. Balance Query Tools
147
171
 
148
172
  #### `get_balance`
149
173
  Get native or ERC20 token balances for single or multiple addresses efficiently. Supports batch operations for optimal performance. Omit `tokenAddress` for native balance, include it for ERC20 tokens.
150
174
 
151
- ### 4. Event Log Tools
175
+ ### 5. Event Log Tools
152
176
 
153
177
  #### `get_logs`
154
178
  Query contract events with decoded output and parameter filtering. Automatically falls back to Hypersync for supported chains when needed. Supports filtering by contract address, block range, and indexed event parameters.
155
179
 
156
- ### 5. Advanced Tools
180
+ ### 6. Advanced Tools
157
181
 
158
182
  #### `get_storage_at`
159
183
  Read raw storage data from a contract with ABI-based decoding. Supports various types like uint256, address, bool, bytes32, etc.
package/dist/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "web3-tools-mcp",
3
- "version": "1.1.0",
3
+ "version": "1.2.1",
4
4
  "description": "Model Context Protocol server for blockchain interactions using viem, Etherscan, and Hypersync",
5
5
  "type": "module",
6
- "main": "dist/index.js",
7
- "types": "dist/index.d.ts",
6
+ "main": "dist/src/index.js",
7
+ "types": "dist/src/index.d.ts",
8
8
  "bin": {
9
- "web3-tools-mcp": "dist/index.js"
9
+ "web3-tools-mcp": "dist/src/index.js"
10
10
  },
11
11
  "files": [
12
12
  "dist",
@@ -18,7 +18,8 @@
18
18
  "node": ">=20.0.0"
19
19
  },
20
20
  "scripts": {
21
- "build": "tsc",
21
+ "clean": "rm -rf dist",
22
+ "build": "npm run clean && tsc",
22
23
  "watch": "tsc --watch",
23
24
  "prepare": "npm run build",
24
25
  "test": "vitest run",
@@ -31,6 +32,8 @@
31
32
  "viem",
32
33
  "blockchain",
33
34
  "web3",
35
+ "ens",
36
+ "ethereum-name-service",
34
37
  "model-context-protocol",
35
38
  "ai"
36
39
  ],
@@ -0,0 +1,119 @@
1
+ import { z } from "zod";
2
+ declare const _default: {
3
+ resolve_ens_name: {
4
+ title: string;
5
+ description: string;
6
+ schema: z.ZodObject<{
7
+ chain: z.ZodDefault<z.ZodEnum<["mainnet", "base", "arbitrum", "polygon", "optimism", "celo", "localhost"]>>;
8
+ name: z.ZodString;
9
+ universalResolver: z.ZodOptional<z.ZodBoolean>;
10
+ }, "strip", z.ZodTypeAny, {
11
+ chain: "mainnet" | "base" | "arbitrum" | "polygon" | "optimism" | "celo" | "localhost";
12
+ name: string;
13
+ universalResolver?: boolean | undefined;
14
+ }, {
15
+ name: string;
16
+ chain?: "mainnet" | "base" | "arbitrum" | "polygon" | "optimism" | "celo" | "localhost" | undefined;
17
+ universalResolver?: boolean | undefined;
18
+ }>;
19
+ handler: (args: {
20
+ chain: "mainnet" | "base" | "arbitrum" | "polygon" | "optimism" | "celo" | "localhost";
21
+ name: string;
22
+ universalResolver?: boolean | undefined;
23
+ }) => Promise<import("../types.js").ToolResult>;
24
+ };
25
+ reverse_resolve_ens: {
26
+ title: string;
27
+ description: string;
28
+ schema: z.ZodObject<{
29
+ chain: z.ZodDefault<z.ZodEnum<["mainnet", "base", "arbitrum", "polygon", "optimism", "celo", "localhost"]>>;
30
+ address: z.ZodString;
31
+ universalResolver: z.ZodOptional<z.ZodBoolean>;
32
+ }, "strip", z.ZodTypeAny, {
33
+ chain: "mainnet" | "base" | "arbitrum" | "polygon" | "optimism" | "celo" | "localhost";
34
+ address: string;
35
+ universalResolver?: boolean | undefined;
36
+ }, {
37
+ address: string;
38
+ chain?: "mainnet" | "base" | "arbitrum" | "polygon" | "optimism" | "celo" | "localhost" | undefined;
39
+ universalResolver?: boolean | undefined;
40
+ }>;
41
+ handler: (args: {
42
+ chain: "mainnet" | "base" | "arbitrum" | "polygon" | "optimism" | "celo" | "localhost";
43
+ address: string;
44
+ universalResolver?: boolean | undefined;
45
+ }) => Promise<import("../types.js").ToolResult>;
46
+ };
47
+ get_ens_text_record: {
48
+ title: string;
49
+ description: string;
50
+ schema: z.ZodObject<{
51
+ chain: z.ZodDefault<z.ZodEnum<["mainnet", "base", "arbitrum", "polygon", "optimism", "celo", "localhost"]>>;
52
+ name: z.ZodString;
53
+ key: z.ZodString;
54
+ universalResolver: z.ZodOptional<z.ZodBoolean>;
55
+ }, "strip", z.ZodTypeAny, {
56
+ chain: "mainnet" | "base" | "arbitrum" | "polygon" | "optimism" | "celo" | "localhost";
57
+ key: string;
58
+ name: string;
59
+ universalResolver?: boolean | undefined;
60
+ }, {
61
+ key: string;
62
+ name: string;
63
+ chain?: "mainnet" | "base" | "arbitrum" | "polygon" | "optimism" | "celo" | "localhost" | undefined;
64
+ universalResolver?: boolean | undefined;
65
+ }>;
66
+ handler: (args: {
67
+ chain: "mainnet" | "base" | "arbitrum" | "polygon" | "optimism" | "celo" | "localhost";
68
+ key: string;
69
+ name: string;
70
+ universalResolver?: boolean | undefined;
71
+ }) => Promise<import("../types.js").ToolResult>;
72
+ };
73
+ get_ens_avatar: {
74
+ title: string;
75
+ description: string;
76
+ schema: z.ZodObject<{
77
+ chain: z.ZodDefault<z.ZodEnum<["mainnet", "base", "arbitrum", "polygon", "optimism", "celo", "localhost"]>>;
78
+ name: z.ZodString;
79
+ universalResolver: z.ZodOptional<z.ZodBoolean>;
80
+ }, "strip", z.ZodTypeAny, {
81
+ chain: "mainnet" | "base" | "arbitrum" | "polygon" | "optimism" | "celo" | "localhost";
82
+ name: string;
83
+ universalResolver?: boolean | undefined;
84
+ }, {
85
+ name: string;
86
+ chain?: "mainnet" | "base" | "arbitrum" | "polygon" | "optimism" | "celo" | "localhost" | undefined;
87
+ universalResolver?: boolean | undefined;
88
+ }>;
89
+ handler: (args: {
90
+ chain: "mainnet" | "base" | "arbitrum" | "polygon" | "optimism" | "celo" | "localhost";
91
+ name: string;
92
+ universalResolver?: boolean | undefined;
93
+ }) => Promise<import("../types.js").ToolResult>;
94
+ };
95
+ batch_resolve_ens_names: {
96
+ title: string;
97
+ description: string;
98
+ schema: z.ZodObject<{
99
+ chain: z.ZodDefault<z.ZodEnum<["mainnet", "base", "arbitrum", "polygon", "optimism", "celo", "localhost"]>>;
100
+ names: z.ZodArray<z.ZodString, "many">;
101
+ universalResolver: z.ZodOptional<z.ZodBoolean>;
102
+ }, "strip", z.ZodTypeAny, {
103
+ chain: "mainnet" | "base" | "arbitrum" | "polygon" | "optimism" | "celo" | "localhost";
104
+ names: string[];
105
+ universalResolver?: boolean | undefined;
106
+ }, {
107
+ names: string[];
108
+ chain?: "mainnet" | "base" | "arbitrum" | "polygon" | "optimism" | "celo" | "localhost" | undefined;
109
+ universalResolver?: boolean | undefined;
110
+ }>;
111
+ handler: (args: {
112
+ chain: "mainnet" | "base" | "arbitrum" | "polygon" | "optimism" | "celo" | "localhost";
113
+ names: string[];
114
+ universalResolver?: boolean | undefined;
115
+ }) => Promise<import("../types.js").ToolResult>;
116
+ };
117
+ };
118
+ export default _default;
119
+ //# sourceMappingURL=ens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ens.d.ts","sourceRoot":"","sources":["../../../src/tools/ens.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwNxB,wBAkRE"}
@@ -0,0 +1,425 @@
1
+ import { isAddress, namehash } from "viem";
2
+ import { normalize } from "viem/ens";
3
+ import { z } from "zod";
4
+ import { getClientManager, SUPPORTED_CHAINS } from "../client.js";
5
+ import { createTool, formatResponse } from "../utils.js";
6
+ // Base ENS Contract Addresses
7
+ const BASE_ENS_CONTRACTS = {
8
+ registry: "0xb94704422c2a1e396835a571837aa5ae53285a95",
9
+ reverseRegistrar: "0x79ea96012eea67a83431f1701b3dff7e37f9e282",
10
+ l2Resolver: "0xC6d566A56A1aFf6508b41f6c90ff131615583BCD",
11
+ };
12
+ // Helper function for Base ENS reverse resolution
13
+ async function reverseResolveBase(address) {
14
+ const clientManager = getClientManager();
15
+ const client = clientManager.getClient("base");
16
+ try {
17
+ // Get the reverse node from ReverseRegistrar
18
+ const reverseNode = await client.readContract({
19
+ address: BASE_ENS_CONTRACTS.reverseRegistrar,
20
+ abi: [
21
+ {
22
+ name: "node",
23
+ type: "function",
24
+ stateMutability: "pure",
25
+ inputs: [{ name: "addr", type: "address" }],
26
+ outputs: [{ name: "", type: "bytes32" }],
27
+ },
28
+ ],
29
+ functionName: "node",
30
+ args: [address],
31
+ });
32
+ // Query the L2Resolver for the name
33
+ const name = await client.readContract({
34
+ address: BASE_ENS_CONTRACTS.l2Resolver,
35
+ abi: [
36
+ {
37
+ name: "name",
38
+ type: "function",
39
+ stateMutability: "view",
40
+ inputs: [{ name: "node", type: "bytes32" }],
41
+ outputs: [{ name: "", type: "string" }],
42
+ },
43
+ ],
44
+ functionName: "name",
45
+ args: [reverseNode],
46
+ });
47
+ return name || null;
48
+ }
49
+ catch (error) {
50
+ return null;
51
+ }
52
+ }
53
+ // Helper function for Base ENS forward resolution
54
+ async function resolveNameBase(name) {
55
+ const clientManager = getClientManager();
56
+ const client = clientManager.getClient("base");
57
+ try {
58
+ const node = namehash(name);
59
+ // Get resolver from registry
60
+ const resolver = await client.readContract({
61
+ address: BASE_ENS_CONTRACTS.registry,
62
+ abi: [
63
+ {
64
+ name: "resolver",
65
+ type: "function",
66
+ stateMutability: "view",
67
+ inputs: [{ name: "node", type: "bytes32" }],
68
+ outputs: [{ name: "", type: "address" }],
69
+ },
70
+ ],
71
+ functionName: "resolver",
72
+ args: [node],
73
+ });
74
+ if (!resolver || resolver === "0x0000000000000000000000000000000000000000") {
75
+ return null;
76
+ }
77
+ // Get address from resolver
78
+ const address = await client.readContract({
79
+ address: resolver,
80
+ abi: [
81
+ {
82
+ name: "addr",
83
+ type: "function",
84
+ stateMutability: "view",
85
+ inputs: [{ name: "node", type: "bytes32" }],
86
+ outputs: [{ name: "", type: "address" }],
87
+ },
88
+ ],
89
+ functionName: "addr",
90
+ args: [node],
91
+ });
92
+ return address;
93
+ }
94
+ catch (error) {
95
+ return null;
96
+ }
97
+ }
98
+ // Helper function for Base ENS text records
99
+ async function getTextRecordBase(name, key) {
100
+ const clientManager = getClientManager();
101
+ const client = clientManager.getClient("base");
102
+ try {
103
+ const node = namehash(name);
104
+ // Get resolver from registry
105
+ const resolver = await client.readContract({
106
+ address: BASE_ENS_CONTRACTS.registry,
107
+ abi: [
108
+ {
109
+ name: "resolver",
110
+ type: "function",
111
+ stateMutability: "view",
112
+ inputs: [{ name: "node", type: "bytes32" }],
113
+ outputs: [{ name: "", type: "address" }],
114
+ },
115
+ ],
116
+ functionName: "resolver",
117
+ args: [node],
118
+ });
119
+ if (!resolver || resolver === "0x0000000000000000000000000000000000000000") {
120
+ return null;
121
+ }
122
+ // Get text record from resolver
123
+ const textRecord = await client.readContract({
124
+ address: resolver,
125
+ abi: [
126
+ {
127
+ name: "text",
128
+ type: "function",
129
+ stateMutability: "view",
130
+ inputs: [
131
+ { name: "node", type: "bytes32" },
132
+ { name: "key", type: "string" },
133
+ ],
134
+ outputs: [{ name: "", type: "string" }],
135
+ },
136
+ ],
137
+ functionName: "text",
138
+ args: [node, key],
139
+ });
140
+ return textRecord || null;
141
+ }
142
+ catch (error) {
143
+ return null;
144
+ }
145
+ }
146
+ const EnsResolveSchema = z.object({
147
+ chain: z
148
+ .enum(SUPPORTED_CHAINS)
149
+ .default("mainnet")
150
+ .describe("Blockchain network (defaults to mainnet, as ENS is primarily on Ethereum)"),
151
+ name: z
152
+ .string()
153
+ .describe("ENS name to resolve to an address (e.g., 'vitalik.eth', 'example.eth')"),
154
+ universalResolver: z
155
+ .boolean()
156
+ .optional()
157
+ .describe("Use universal resolver for cross-chain resolution (defaults to true)"),
158
+ });
159
+ const EnsReverseResolveSchema = z.object({
160
+ chain: z
161
+ .enum(SUPPORTED_CHAINS)
162
+ .default("mainnet")
163
+ .describe("Blockchain network (defaults to mainnet)"),
164
+ address: z.string().describe("Ethereum address to resolve to an ENS name"),
165
+ universalResolver: z
166
+ .boolean()
167
+ .optional()
168
+ .describe("Use universal resolver for cross-chain resolution (defaults to true)"),
169
+ });
170
+ const EnsTextRecordSchema = z.object({
171
+ chain: z
172
+ .enum(SUPPORTED_CHAINS)
173
+ .default("mainnet")
174
+ .describe("Blockchain network (defaults to mainnet)"),
175
+ name: z.string().describe("ENS name to query text records from"),
176
+ key: z
177
+ .string()
178
+ .describe("Text record key (e.g., 'avatar', 'description', 'email', 'url', 'com.twitter', 'com.github')"),
179
+ universalResolver: z
180
+ .boolean()
181
+ .optional()
182
+ .describe("Use universal resolver for cross-chain resolution (defaults to true)"),
183
+ });
184
+ const EnsBatchResolveSchema = z.object({
185
+ chain: z
186
+ .enum(SUPPORTED_CHAINS)
187
+ .default("mainnet")
188
+ .describe("Blockchain network (defaults to mainnet)"),
189
+ names: z
190
+ .array(z.string())
191
+ .describe("Array of ENS names to resolve to addresses in a single batch"),
192
+ universalResolver: z
193
+ .boolean()
194
+ .optional()
195
+ .describe("Use universal resolver for cross-chain resolution (defaults to true)"),
196
+ });
197
+ export default {
198
+ resolve_ens_name: createTool("Resolve ENS Name to Address", "Resolve an ENS name to its Ethereum address. ENS names are human-readable identifiers (like vitalik.eth) that resolve to Ethereum addresses.", EnsResolveSchema, async (args) => {
199
+ try {
200
+ // Normalize the ENS name
201
+ const normalizedName = normalize(args.name);
202
+ let address = null;
203
+ // Use Base-specific logic for Base chain
204
+ if (args.chain === "base") {
205
+ address = await resolveNameBase(normalizedName);
206
+ }
207
+ else {
208
+ // Use viem's built-in ENS resolution for other chains
209
+ const clientManager = getClientManager();
210
+ const client = clientManager.getClient(args.chain);
211
+ address = await client.getEnsAddress({
212
+ name: normalizedName,
213
+ universalResolverAddress: args.universalResolver !== false ? undefined : undefined,
214
+ });
215
+ }
216
+ if (!address) {
217
+ return formatResponse({
218
+ success: false,
219
+ name: args.name,
220
+ normalizedName,
221
+ address: null,
222
+ chain: args.chain,
223
+ message: "ENS name does not resolve to an address",
224
+ });
225
+ }
226
+ return formatResponse({
227
+ success: true,
228
+ name: args.name,
229
+ normalizedName,
230
+ address,
231
+ chain: args.chain,
232
+ });
233
+ }
234
+ catch (error) {
235
+ throw new Error(`Failed to resolve ENS name: ${error}`);
236
+ }
237
+ }),
238
+ reverse_resolve_ens: createTool("Reverse Resolve Address to ENS Name", "Reverse resolve an Ethereum address to its primary ENS name. Returns the ENS name if the address has set a reverse record.", EnsReverseResolveSchema, async (args) => {
239
+ if (!isAddress(args.address)) {
240
+ throw new Error(`Invalid Ethereum address: ${args.address}`);
241
+ }
242
+ try {
243
+ let ensName = null;
244
+ // Use Base-specific logic for Base chain
245
+ if (args.chain === "base") {
246
+ ensName = await reverseResolveBase(args.address);
247
+ }
248
+ else {
249
+ // Use viem's built-in ENS resolution for other chains
250
+ const clientManager = getClientManager();
251
+ const client = clientManager.getClient(args.chain);
252
+ ensName = await client.getEnsName({
253
+ address: args.address,
254
+ universalResolverAddress: args.universalResolver !== false ? undefined : undefined,
255
+ });
256
+ }
257
+ if (!ensName) {
258
+ return formatResponse({
259
+ success: false,
260
+ address: args.address,
261
+ name: null,
262
+ chain: args.chain,
263
+ message: "Address does not have a primary ENS name set",
264
+ });
265
+ }
266
+ return formatResponse({
267
+ success: true,
268
+ address: args.address,
269
+ name: ensName,
270
+ chain: args.chain,
271
+ });
272
+ }
273
+ catch (error) {
274
+ throw new Error(`Failed to reverse resolve address: ${error}`);
275
+ }
276
+ }),
277
+ get_ens_text_record: createTool("Get ENS Text Record", "Retrieve a text record from an ENS name. Common keys include 'avatar', 'description', 'email', 'url', 'com.twitter', 'com.github'.", EnsTextRecordSchema, async (args) => {
278
+ try {
279
+ // Normalize the ENS name
280
+ const normalizedName = normalize(args.name);
281
+ let textRecord = null;
282
+ // Use Base-specific logic for Base chain
283
+ if (args.chain === "base") {
284
+ textRecord = await getTextRecordBase(normalizedName, args.key);
285
+ }
286
+ else {
287
+ // Use viem's built-in ENS resolution for other chains
288
+ const clientManager = getClientManager();
289
+ const client = clientManager.getClient(args.chain);
290
+ textRecord = await client.getEnsText({
291
+ name: normalizedName,
292
+ key: args.key,
293
+ universalResolverAddress: args.universalResolver !== false ? undefined : undefined,
294
+ });
295
+ }
296
+ if (!textRecord) {
297
+ return formatResponse({
298
+ success: false,
299
+ name: args.name,
300
+ normalizedName,
301
+ key: args.key,
302
+ value: null,
303
+ chain: args.chain,
304
+ message: `Text record '${args.key}' not found for ${args.name}`,
305
+ });
306
+ }
307
+ return formatResponse({
308
+ success: true,
309
+ name: args.name,
310
+ normalizedName,
311
+ key: args.key,
312
+ value: textRecord,
313
+ chain: args.chain,
314
+ });
315
+ }
316
+ catch (error) {
317
+ throw new Error(`Failed to get ENS text record: ${error}`);
318
+ }
319
+ }),
320
+ get_ens_avatar: createTool("Get ENS Avatar", "Get the avatar URI for an ENS name. Returns the avatar URL if set.", z.object({
321
+ chain: z
322
+ .enum(SUPPORTED_CHAINS)
323
+ .default("mainnet")
324
+ .describe("Blockchain network (defaults to mainnet)"),
325
+ name: z.string().describe("ENS name to get avatar from"),
326
+ universalResolver: z
327
+ .boolean()
328
+ .optional()
329
+ .describe("Use universal resolver for cross-chain resolution (defaults to true)"),
330
+ }), async (args) => {
331
+ try {
332
+ // Normalize the ENS name
333
+ const normalizedName = normalize(args.name);
334
+ let avatar = null;
335
+ // Use Base-specific logic for Base chain
336
+ if (args.chain === "base") {
337
+ avatar = await getTextRecordBase(normalizedName, "avatar");
338
+ }
339
+ else {
340
+ // Use viem's built-in ENS resolution for other chains
341
+ const clientManager = getClientManager();
342
+ const client = clientManager.getClient(args.chain);
343
+ avatar = await client.getEnsAvatar({
344
+ name: normalizedName,
345
+ universalResolverAddress: args.universalResolver !== false ? undefined : undefined,
346
+ });
347
+ }
348
+ if (!avatar) {
349
+ return formatResponse({
350
+ success: false,
351
+ name: args.name,
352
+ normalizedName,
353
+ avatar: null,
354
+ chain: args.chain,
355
+ message: `No avatar set for ${args.name}`,
356
+ });
357
+ }
358
+ return formatResponse({
359
+ success: true,
360
+ name: args.name,
361
+ normalizedName,
362
+ avatar,
363
+ chain: args.chain,
364
+ });
365
+ }
366
+ catch (error) {
367
+ throw new Error(`Failed to get ENS avatar: ${error}`);
368
+ }
369
+ }),
370
+ batch_resolve_ens_names: createTool("Batch Resolve ENS Names", "Resolve multiple ENS names to addresses in a single batch for efficiency.", EnsBatchResolveSchema, async (args) => {
371
+ try {
372
+ // Resolve all ENS names in parallel
373
+ const results = await Promise.allSettled(args.names.map(async (name) => {
374
+ const normalizedName = normalize(name);
375
+ let address = null;
376
+ // Use Base-specific logic for Base chain
377
+ if (args.chain === "base") {
378
+ address = await resolveNameBase(normalizedName);
379
+ }
380
+ else {
381
+ // Use viem's built-in ENS resolution for other chains
382
+ const clientManager = getClientManager();
383
+ const client = clientManager.getClient(args.chain);
384
+ address = await client.getEnsAddress({
385
+ name: normalizedName,
386
+ universalResolverAddress: args.universalResolver !== false ? undefined : undefined,
387
+ });
388
+ }
389
+ return {
390
+ name,
391
+ normalizedName,
392
+ address,
393
+ success: !!address,
394
+ };
395
+ }));
396
+ // Process results
397
+ const resolved = results.map((result, index) => {
398
+ if (result.status === "fulfilled") {
399
+ return result.value;
400
+ }
401
+ return {
402
+ name: args.names[index],
403
+ normalizedName: args.names[index],
404
+ address: null,
405
+ success: false,
406
+ error: result.reason instanceof Error ? result.reason.message : String(result.reason),
407
+ };
408
+ });
409
+ const successCount = resolved.filter((r) => r.success).length;
410
+ const failCount = resolved.filter((r) => !r.success).length;
411
+ return formatResponse({
412
+ success: true,
413
+ chain: args.chain,
414
+ totalNames: args.names.length,
415
+ successfulResolves: successCount,
416
+ failedResolves: failCount,
417
+ results: resolved,
418
+ });
419
+ }
420
+ catch (error) {
421
+ throw new Error(`Failed to batch resolve ENS names: ${error}`);
422
+ }
423
+ }),
424
+ };
425
+ //# sourceMappingURL=ens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ens.js","sourceRoot":"","sources":["../../../src/tools/ens.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAoBnE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,QAcjD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAsBnE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,QAcjD"}