get_domain_records
Retrieve ENS text records for domains including avatar, email, url, and social media handles to access verified domain information and metadata.
Instructions
Get ENS text records for a domain (e.g., avatar, email, url, twitter, github)
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | ENS domain name | |
| keys | Yes | Text record keys to fetch (e.g., ["avatar", "email", "url", "com.twitter", "com.github"]) |
Implementation Reference
- src/handlers/domain-handlers.ts:111-126 (handler)Handler logic for executing the 'get_domain_records' tool: extracts parameters and delegates to DomainResolverServicecase 'get_domain_records': { const domain = args?.domain as string; const keys = args?.keys as string[]; const result = await domainResolver.getDomainRecords(domain, keys); return { content: [ { type: 'text', text: JSON.stringify(result, null, 2), }, ], isError: !result.success, }; }
- src/handlers/domain-handlers.ts:43-61 (registration)Tool registration definition including name, description, and input schema for 'get_domain_records'{ name: 'get_domain_records', description: 'Get ENS text records for a domain (e.g., avatar, email, url, twitter, github)', inputSchema: { type: 'object', properties: { domain: { type: 'string', description: 'ENS domain name', }, keys: { type: 'array', items: { type: 'string' }, description: 'Text record keys to fetch (e.g., ["avatar", "email", "url", "com.twitter", "com.github"])', }, }, required: ['domain', 'keys'], }, },
- Main implementation of getDomainRecords: validates ENS domain, fetches resolver, queries text records via eth_call RPCs, returns recordsasync getDomainRecords(domain: string, keys: string[]): Promise<EndpointResponse> { if (!domain.endsWith('.eth')) { return { success: false, error: 'Domain records currently only supported for ENS (.eth) domains', }; } try { const namehash = this.namehash(domain); // Get resolver address first const resolverData = this.encodeResolverCall(namehash); const resolverResult = await this.blockchainService.callRPCMethod( 'ethereum-mainnet', 'eth_call', [ { to: DomainResolverService.ENS_REGISTRY, data: resolverData, }, 'latest', ] ); if (!resolverResult.success || !resolverResult.data) { return { success: false, error: `Failed to get resolver for ${domain}`, }; } const resolverAddress = '0x' + resolverResult.data.slice(-40); if (resolverAddress === '0x0000000000000000000000000000000000000000') { return { success: false, error: `No resolver set for ${domain}`, }; } // Fetch all text records in parallel const records = await Promise.all( keys.map(async (key) => { const textData = this.encodeTextCall(namehash, key); const result = await this.blockchainService.callRPCMethod( 'ethereum-mainnet', 'eth_call', [ { to: resolverAddress, data: textData, }, 'latest', ] ); return { key, value: result.success ? this.decodeString(result.data) : null, }; }) ); return { success: true, data: { domain, records, }, metadata: { timestamp: new Date().toISOString(), endpoint: 'ethereum-mainnet', }, }; } catch (error) { return { success: false, error: error instanceof Error ? error.message : 'Failed to fetch domain records', }; } }
- src/index.ts:88-101 (registration)Central tool registration where domain handlers (including get_domain_records) are added to the tools list for MCP serverconst tools: Tool[] = [ ...registerBlockchainHandlers(server, blockchainService), ...registerDomainHandlers(server, domainResolver), ...registerTransactionHandlers(server, advancedBlockchain), ...registerTokenHandlers(server, advancedBlockchain), ...registerMultichainHandlers(server, advancedBlockchain), ...registerContractHandlers(server, advancedBlockchain), ...registerUtilityHandlers(server, advancedBlockchain), ...registerEndpointHandlers(server, endpointManager), ...registerSolanaHandlers(server, solanaService), ...registerCosmosHandlers(server, cosmosService), ...registerSuiHandlers(server, suiService), ...registerDocsHandlers(server, docsManager), ];
- src/index.ts:115-126 (handler)Top-level MCP CallToolRequestHandler dispatcher that invokes handleDomainTool for domain tools like get_domain_records(await handleBlockchainTool(name, args, blockchainService)) || (await handleDomainTool(name, args, domainResolver)) || (await handleTransactionTool(name, args, advancedBlockchain)) || (await handleTokenTool(name, args, advancedBlockchain)) || (await handleMultichainTool(name, args, advancedBlockchain)) || (await handleContractTool(name, args, advancedBlockchain)) || (await handleUtilityTool(name, args, advancedBlockchain)) || (await handleEndpointTool(name, args, endpointManager)) || (await handleSolanaTool(name, args, solanaService)) || (await handleCosmosTool(name, args, cosmosService)) || (await handleSuiTool(name, args, suiService)) || (await handleDocsTool(name, args, docsManager));