chainlist-mcp
# Chainlist MCP Server
An MCP server that gives AI agents fast access to verified EVM chain information, including RPC URLs, chain IDs, explorers, and native tokens — sourced from Chainlist.org.



## Features
- **Efficient Data Fetching**: Caches Chainlist API data to minimize requests.
- **Flexible Search**: Case-insensitive keyword matching using regex for `getChainsByKeyword`.
- **Structured Output**: Markdown responses with tabulated `rpc` and `explorers` for readability.
## Installation
### Prerequisites
- **Python**: Version 3.10 or higher.
- **uv**: Recommended for managing Python projects and dependencies (install via `pip install uv` or follow [uv documentation](https://docs.astral.sh/uv/)).
### Steps
1. **Clone the Repository**:
```bash
git clone https://github.com/kukapay/chainlist-mcp.git
cd chainlist-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 cli.py --name "Chainlist MCP"
```
Configuration file as a reference:
```json
{
"mcpServers": {
"Chainlist MCP": {
"command": "uv",
"args": [ "--directory", "/path/to/chainlist-mcp", "run", "main.py" ]
}
}
}
```
Replace `/path/to/chainlist-mcp` with your actual installation path.
## Usage
The server exposes two tools via the MCP protocol, accessible through MCP-compatible clients or the MCP Inspector.
### Tools
#### `getChainById`
- **Description**: Retrieves details of a blockchain by its chain ID.
- **Parameters**:
- `chain_id` (integer): The unique identifier of the blockchain (e.g., 1 for Ethereum Mainnet).
- **Returns**: A Markdown string with chain details or an error message.
**Example Prompt** (in an MCP client):
```
Get the details for the blockchain with chain ID 1.
```
**Example Response**:
```markdown
**Chain Details**
- **Name**: Ethereum Mainnet
- **Chain ID**: 1
- **Native Currency**: Ether (ETH, 18 decimals)
- **TVL**: 134376951329.85631
**RPC Endpoints**:
| URL | Tracking |
|----------------------------------------------|----------|
| https://eth.llamarpc.com | none |
| https://go.getblock.io/... | none |
...
**Explorers**:
| Name | URL | Standard |
|------------|----------------------------|----------|
| etherscan | https://etherscan.io | EIP3091 |
...
```
#### `getChainsByKeyword`
- **Description**: Searches for blockchains by keyword (case-insensitive partial match).
- **Parameters**:
- `keyword` (string): The keyword or partial name to search (e.g., 'eth').
- `limit` (integer, optional): Maximum number of results (default: 5).
- **Returns**: A Markdown string listing up to `limit` matching chains or an error message.
**Example Prompt** (in an MCP client):
```
Find blockchains with 'eth' in their name, limit to 2 results.
```
**Example Response**:
```markdown
**Matching Chains**
### Chain 1
**Chain Details**
- **Name**: Ethereum Mainnet
- **Chain ID**: 1
- **Native Currency**: Ether (ETH, 18 decimals)
- **TVL**: 134376951329.85631
**RPC Endpoints**:
| URL | Tracking |
|----------------------------------------------|----------|
| https://eth.llamarpc.com | none |
...
**Explorers**:
| Name | URL | Standard |
|------------|----------------------------|----------|
| etherscan | https://etherscan.io | EIP3091 |
...
### Chain 2
**Chain Details**
- **Name**: Ethereum Goerli
- **Chain ID**: 5
- **Native Currency**: Ether (ETH, 18 decimals)
- **TVL**: N/A
**RPC Endpoints**:
| URL | Tracking |
|----------------------------------------------|----------|
| https://goerli.infura.io/... | yes |
...
**Explorers**:
| Name | URL | Standard |
|------------|----------------------------|----------|
| etherscan | https://goerli.etherscan.io | EIP3091 |
...
```
## License
This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
TDQS
Scored across 2 tools
The two tools have clearly distinct purposes: getChainById retrieves a specific chain by numeric ID, while getChainsByKeyword searches for chains by textual keyword with partial matching. There is no overlap in functionality or confusion about when to use each tool.
Both tools follow a consistent verb_noun pattern with 'get' as the verb and descriptive noun phrases (ChainById, ChainsByKeyword). They use consistent camelCase naming throughout, making them predictable and easy to understand.
With only two tools, the server feels minimal for a blockchain information service. While the tools cover basic lookup functionality, the scope seems thin compared to what might be expected for comprehensive chain data access (e.g., missing tools for listing all chains, filtering by other attributes, or getting trending/popular chains).
The tools provide core lookup capabilities by ID and keyword search, but there are notable gaps. Missing operations include listing all available chains, filtering by attributes like TVL or currency, and accessing additional chain metadata beyond the basic details provided. This limits the server's usefulness for broader blockchain exploration tasks.