ens-mcp
# ENS MCP Server
An MCP server that resolves, analyzes, and contextualizes ENS domain activity to empower Web3 agents with human-readable identity insights.



## Features
- **Resolve ENS Names**: Map ENS domains (e.g., `vitalik.eth`) to Ethereum addresses.
- **Detailed Domain Information**: Fetch comprehensive domain data, including address, owner, registrant, expiry, registration, wrapped domain, and resolver details.
- **Domain Event History**: Retrieve events like transfers, resolver changes, and name wrapping, with relevant addresses and timestamps.
## Requirements
- Python 3.10 or higher
- [uv](https://github.com/astral-sh/uv) (recommended for dependency management)
- A valid API key for The Graph.
## Installation
1. **Clone the Repository**:
```bash
git clone https://github.com/kukapay/ens-mcp.git
cd ens-mcp
```
2. **Install Dependencies**:
```bash
uv sync
```
3. **Installing to Claude Desktop**:
Install the server as a Claude Desktop application:
```bash
uv run mcp install main.py --name "ens-mcp"
```
Configuration file as a reference:
```json
{
"mcpServers": {
"ens-mcp": {
"command": "uv",
"args": [ "--directory", "/path/to/ens-mcp", "run", "main.py" ],
"env": { "THEGRAPH_API_KEY": "the_graph_api_key"}
}
}
}
```
Replace `/path/to/ens-mcp` with your actual installation path, and `the_graph_api_key` with your API key from The Graph.
## Usage
### Tools
The server provides three MCP tools:
1. **resolve_ens_name(domain: str) -> str**
Resolves an ENS domain to its Ethereum address.
- **Input**: ENS domain (e.g., `vitalik.eth`)
- **Output**: Ethereum address (e.g., `0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045`) or "None"
Example:
```
resolve_ens_name("vitalik.eth") -> "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"
```
2. **get_domain_details(domain: str) -> str**
Fetches detailed information about an ENS domain, including its address.
- **Input**: ENS domain
- **Output**: Formatted string with domain details (address, owner, registrant, expiry, etc.)
Example Output:
```
ENS Domain: vitalik.eth
Address: 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045
Label Name: vitalik
Label Hash: 0x...
Subdomain Count: 5
Owner: 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045
Registrant: 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045
Wrapped Owner: None
Expiry Date: 2025-10-31 00:00:00
TTL: 0 seconds
Is Migrated: true
Created At: 2017-05-04 12:00:00
Registration: Registration Date: 2017-05-04 12:00:00
Registration Expiry: 2025-10-31 00:00:00
Registration Cost: 1000000000000000 Wei
Registrant: 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045
Wrapped Domain: Not Wrapped
Resolver: Resolver Address: 0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41
Content Hash: None
Text Records: email, url
```
3. **get_domain_events(domain: str) -> str**
Retrieves events associated with an ENS domain.
- **Input**: ENS domain
- **Output**: Formatted string listing events (e.g., transfers, resolver changes)
Example Output:
```
Event: Transfer
Block Number: 1234567
Transaction ID: 0x...
New Owner: 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045
Event: NewResolver
Block Number: 1234568
Transaction ID: 0x...
Resolver Address: 0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41
Resolver Addr: 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045
```
## License
This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
TDQS
Scored across 3 tools
Each tool has a clearly distinct purpose: get_domain_details retrieves comprehensive domain information, get_domain_events focuses on event history, and resolve_ens_name performs a specific address resolution. There is no overlap or ambiguity between these functions.
All tools follow a consistent verb_noun naming pattern (get_domain_details, get_domain_events, resolve_ens_name), using snake_case throughout. The verbs 'get' and 'resolve' are appropriately descriptive and maintain a predictable structure.
With only 3 tools, the set feels somewhat thin for an ENS domain management server. While the tools cover key read operations, the scope could benefit from additional tools for broader ENS interactions, such as registration or ownership updates, to better support agent workflows.
The tools provide good read coverage for ENS domains (details, events, resolution), but there are notable gaps for write operations like registering, updating, or transferring domains. This limits the server's ability to handle full domain lifecycle management, though agents can work with the available read functions.