get_domain_details
Fetch detailed information for an ENS domain, including its address, to resolve and analyze domain activity.
Instructions
Fetch detailed information for an ENS domain, including its address.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes |
Implementation Reference
- main.py:162-227 (handler)Handler function decorated with @mcp.tool(), which registers the tool and infers input schema from type annotations (domain: str). Executes the core logic to fetch and format ENS domain details using the query_ens_domain helper.@mcp.tool() async def get_domain_details(domain: str) -> str: """Fetch detailed information for an ENS domain, including its address.""" domain_data = await query_ens_domain(domain) if not domain_data: return f"No data found for ENS domain: {domain}" # Get address address = (domain_data["resolvedAddress"]["id"] if domain_data["resolvedAddress"] else domain_data["resolver"]["addr"]["id"] if domain_data["resolver"] and domain_data["resolver"]["addr"] else "None") # Format dates expiry = (datetime.datetime.fromtimestamp(int(domain_data["expiryDate"])) .strftime("%Y-%m-%d %H:%M:%S") if domain_data["expiryDate"] else "None") created = (datetime.datetime.fromtimestamp(int(domain_data["createdAt"])) .strftime("%Y-%m-%d %H:%M:%S") if domain_data["createdAt"] else "None") # Registration details registration_info = ( f"Registration Date: {datetime.datetime.fromtimestamp(int(domain_data['registration']['registrationDate'])).strftime('%Y-%m-%d %H:%M:%S')}\n" f"Registration Expiry: {datetime.datetime.fromtimestamp(int(domain_data['registration']['expiryDate'])).strftime('%Y-%m-%d %H:%M:%S')}\n" f"Registration Cost: {domain_data['registration']['cost'] or 'Unknown'} Wei\n" f"Registrant: {domain_data['registration']['registrant']['id']}" if domain_data["registration"] else "No Registration" ) # Wrapped domain details wrapped_info = ( f"Wrapped Name: {domain_data['wrappedDomain']['name']}\n" f"Wrapped Owner: {domain_data['wrappedDomain']['owner']['id']}\n" f"Wrapped Expiry: {datetime.datetime.fromtimestamp(int(domain_data['wrappedDomain']['expiryDate'])).strftime('%Y-%m-%d %H:%M:%S')}\n" f"Fuses: {domain_data['wrappedDomain']['fuses']}" if domain_data["wrappedDomain"] else "Not Wrapped" ) # Resolver details resolver_info = ( f"Resolver Address: {domain_data['resolver']['address']}\n" f"Content Hash: {domain_data['resolver']['contentHash'] or 'None'}\n" f"Text Records: {', '.join(domain_data['resolver']['texts']) if domain_data['resolver']['texts'] else 'None'}" if domain_data["resolver"] else "No Resolver" ) return ( f"ENS Domain: {domain_data['name']}\n" f"Address: {address}\n" f"Label Name: {domain_data['labelName'] or 'None'}\n" f"Label Hash: {domain_data['labelhash'] or 'None'}\n" f"Subdomain Count: {domain_data['subdomainCount']}\n" f"Owner: {domain_data['owner']['id']}\n" f"Registrant: {domain_data['registrant']['id'] if domain_data['registrant'] else 'None'}\n" f"Wrapped Owner: {domain_data['wrappedOwner']['id'] if domain_data['wrappedOwner'] else 'None'}\n" f"Expiry Date: {expiry}\n" f"TTL: {domain_data['ttl'] or 'None'} seconds\n" f"Is Migrated: {domain_data['isMigrated']}\n" f"Created At: {created}\n" f"Registration: {registration_info}\n" f"Wrapped Domain: {wrapped_info}\n" f"Resolver: {resolver_info}" )
- main.py:27-82 (helper)Supporting helper utility that queries the ENS subgraph via GraphQL for detailed domain data, which is then processed by the get_domain_details handler.async def query_ens_domain(name: str) -> Optional[Dict[str, Any]]: """Query the ENS Subgraph for domain details.""" query = gql(""" query GetDomain($name: String!) { domains(where: { name: $name }) { id name labelName labelhash subdomainCount resolvedAddress { id } resolver { address addr { id } contentHash texts } ttl isMigrated createdAt owner { id } registrant { id } wrappedOwner { id } expiryDate registration { registrationDate expiryDate cost registrant { id } labelName } wrappedDomain { expiryDate fuses owner { id } name } } } """) result = await graphql_client.execute_async(query, variable_values={"name": name}) return result["domains"][0] if result["domains"] else None