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.
- package/README.md +28 -4
- package/dist/package.json +8 -5
- package/dist/src/tools/ens.d.ts +119 -0
- package/dist/src/tools/ens.d.ts.map +1 -0
- package/dist/src/tools/ens.js +425 -0
- package/dist/src/tools/ens.js.map +1 -0
- package/dist/src/tools/index.d.ts.map +1 -1
- package/dist/src/tools/index.js +3 -1
- package/dist/src/tools/index.js.map +1 -1
- package/dist/test/tools/ens.test.d.ts +2 -0
- package/dist/test/tools/ens.test.d.ts.map +1 -0
- package/dist/test/tools/ens.test.js +236 -0
- package/dist/test/tools/ens.test.js.map +1 -0
- package/package.json +8 -5
- package/src/tools/ens.ts +493 -0
- package/src/tools/index.ts +3 -1
- package/dist/client.d.ts +0 -1653
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js +0 -142
- package/dist/client.js.map +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -88
- package/dist/index.js.map +0 -1
- package/dist/test/mcp-client.test.d.ts +0 -2
- package/dist/test/mcp-client.test.d.ts.map +0 -1
- package/dist/test/mcp-client.test.js +0 -376
- package/dist/test/mcp-client.test.js.map +0 -1
- package/dist/tools/advanced.d.ts +0 -75
- package/dist/tools/advanced.d.ts.map +0 -1
- package/dist/tools/advanced.js +0 -234
- package/dist/tools/advanced.js.map +0 -1
- package/dist/tools/balance.d.ts +0 -55
- package/dist/tools/balance.d.ts.map +0 -1
- package/dist/tools/balance.js +0 -146
- package/dist/tools/balance.js.map +0 -1
- package/dist/tools/batch.d.ts +0 -122
- package/dist/tools/batch.d.ts.map +0 -1
- package/dist/tools/batch.js +0 -243
- package/dist/tools/batch.js.map +0 -1
- package/dist/tools/contract-info.d.ts +0 -79
- package/dist/tools/contract-info.d.ts.map +0 -1
- package/dist/tools/contract-info.js +0 -450
- package/dist/tools/contract-info.js.map +0 -1
- package/dist/tools/contract.d.ts +0 -79
- package/dist/tools/contract.d.ts.map +0 -1
- package/dist/tools/contract.js +0 -140
- package/dist/tools/contract.js.map +0 -1
- package/dist/tools/index.d.ts +0 -3
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/index.js +0 -27
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/logs.d.ts +0 -39
- package/dist/tools/logs.d.ts.map +0 -1
- package/dist/tools/logs.js +0 -231
- package/dist/tools/logs.js.map +0 -1
- package/dist/tools/signatures.d.ts +0 -83
- package/dist/tools/signatures.d.ts.map +0 -1
- package/dist/tools/signatures.js +0 -93
- package/dist/tools/signatures.js.map +0 -1
- package/dist/types.d.ts +0 -22
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/utils.d.ts +0 -22
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js +0 -183
- 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
|
|
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.
|
|
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
|
-
###
|
|
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
|
-
###
|
|
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
|
|
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
|
-
"
|
|
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;
|
|
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"}
|