Block MCP Server
# βοΈ Block MCP Server
A Model Context Protocol (MCP) server for Blockchain interactions. This server enables AI agents to interact with multiple blockchain networks, check financial data, and send real-time notifications to Telegram.
## π οΈ Tools Included
1. **π° Wallet Balance Checker:** Retrieves native token balances for any wallet address across Ethereum, Polygon, Arbitrum, Optimism, and Base simultaneously using public RPC nodes.
2. **π Frax Transactions:** Fetches the 5 latest transactions on the FRAX network, including both native transfers and ERC-20 token events.
3. **β½ Gas Price Estimator:** Provides real-time gas fee estimates (in Gwei) across multiple blockchain networks to help determine transaction costs.
4. **π± Crypto Converter:** Converts cryptocurrency and fiat values using real-time market rates (e.g., BTC to ETH or USDC to USD).
5. **π€ Telegram Bot:** Programmatically posts updates, messages, or automated notifications to a specific Telegram chat or channel.
---
## βοΈ Setup Instructions
### Prerequisites
- **Python 3.11+**
- **uv**
### 1. Environment Variables
Create a `.env` file in the root directory and populate it with your credentials:
```bash
# Telegram Configuration
TELEGRAM_BOT_TOKEN=your_bot_token_from_botfather
TELEGRAM_CHAT_ID=your_numeric_chat_id
# Blockchain API Keys
FRAXSCAN_API_KEY=your_fraxscan_api_key
# Optional: CoinGecko API Key
COINGECKO_API_KEY=your_api_key
```
### 2. Installation
1. **Clone the repository:**
```bash
git clone <YOUR_REPO_URL_HERE>
cd <YOUR_REPO_NAME>
```
2. **Install dependencies:**
This project uses `uv` for fast dependency management.
```bash
make install
```
---
### π How to Run
The easiest way to test the tools is using the built-in Makefile command, which launches the MCP Inspector.
```bash
make dev
```
_Alternatively:_ `uv run fastmcp dev main.py`
## π Usage & Examples
Below are example inputs for testing the tools in the MCP Inspector.
### 1. Wallet Balance Checker Tool (`wallet_check`)
Queries multiple public RPC endpoints to retrieve native balances across various chains.
- **Input:**
```json
{ "address": "0x..." }
```
- **Response:**
```json
{
"Ethereum": "1.2450 ETH",
"Arbitrum": "0.0000 ETH",
"Polygon": "150.3200 MATIC",
"Optimism": "0.0500 ETH",
"Base": "0.1200 ETH"
}
```
### 2. Frax Transaction History (`get_frax_transactions`)
Merges native and token transfer history from the Fraxscan API, sorted by timestamp.
- **Input:**
```json
{ "address": "0x4200000000000000000000000000000000000015" }
```
- **Response:**
```json
[
{
"time": "2026-01-30 18:00:00",
"amount": "0.5000 frxETH",
"token": "frxETH",
"type": "Native",
"hash": "0x..."
}
]
```
### 3. Gas Price Estimator (`get_gas_prices`)
Monitors real-time gas prices (in Gwei) to estimate transaction costs.
- **Input:**
```json
{}
```
- **Response:**
```json
{
"Ethereum": "π΄ 45.2 Gwei",
"Base": "π’ 0.01 Gwei"
}
```
### 4. Crypto Converter (`convert_crypto`)
Converts time between timezones.
- **Input:**
```json
{
"amount": 1,
"from_coin": "bitcoin",
"to_coin": "ripple"
}
```
- **Response:**
```json
{
"Response": "1 BITCOIN = 1235999999.0 XRP (Rate: 95000)"
}
```
### 5. Telegram Bot (`send_telegram_message`)
This tool allows the AI to **send** notifications to your phone via Telegram.
#### π How the Flow Works (Sending Messages)
1. **User Trigger:** You give Claude a condition or a direct command (e.g., _"If ETH is below $2000, alert me"_).
2. **Decision:** Claude evaluates the condition. If true, it decides to call `send_telegram_message`.
3. **Execution:** The MCP server receives the text payload and makes an HTTP POST request to the Telegram Bot API.
4. **Confirmation:** The Telegram API confirms the delivery, and the MCP server reports back to Claude that the task is done.
#### π Implementation Details
- **Input:**
```json
{
"message": "The deployment was successful"
}
```
- **Response:**
```json
"Message sent successfully!"
```
#### π€ Agent Mode (Auto-Pilot)
This mode enables the AI to automatically check for new messages and respond to them in a continuous loop, while also performing other operations in between.
**Prompt to Initiate:**
```json
"I want you to run in Auto-Pilot Mode. Here is your loop:
1. **Check:** Run `telegram_read_messages`.
2. **Act:** If there is a NEW message (one you haven't answered yet), interpret it and use `telegram_reply` to send the answer.
3. **Wait:** If there are no new messages, carry out any pending commands then run `wait_for_seconds(4)`.
4. **Repeat:** Go back to Step 1.
Do not ask me for permission between steps. Just keep running this loop indefinitely."
```
**How the Loop Works:**
1. **Check:** The AI polls the Telegram API for incoming messages.
2. **Process:** It reads the content of any new user messages (e.g., a user asking "What is the price of BTC?").
3. **Action:** It uses other available tools (like `convert_crypto`) to find the answer.
4. **Reply:** It sends the answer back to the user via Telegram and waits for the next cycle.
TDQS
Scored across 9 tools
The tool set has unclear boundaries and overlapping purposes, particularly in the Telegram-related tools. 'send_telegram_message', 'telegram_read_messages', and 'telegram_reply' all handle Telegram messaging but with ambiguous distinctionsβ'send_telegram_message' and 'telegram_reply' seem to serve similar functions, and 'telegram_read_messages' overlaps with monitoring interactions. Additionally, 'get_transactions' and 'wallet_check' both involve address queries but target different data (transactions vs. balances), which could cause confusion. The descriptions help somewhat, but the overlap is significant.
The naming conventions are mixed, with some tools using verb_noun patterns like 'convert_crypto' and 'get_gas_prices', while others use noun_verb like 'health_check' or inconsistent structures like 'telegram_read_messages' (noun_verb_noun) and 'wait_for_seconds' (verb_preposition_noun). This lack of a consistent pattern makes the set less predictable, though the names remain readable overall. The deviations are notable but not chaotic.
With 9 tools, the count is reasonable and well-scoped for a server covering cryptocurrency conversion, blockchain data, and Telegram integration. It's not excessive, and each tool appears to serve a distinct functional area, though some overlap exists. The number aligns well with the apparent scope, being neither too thin nor too heavy, making it appropriate for the server's purpose.
The server shows notable gaps in coverage for its implied domain of blockchain and messaging operations. For cryptocurrency conversion, tools like 'convert_crypto' and 'get_gas_prices' are present, but there's no tool for executing trades or managing wallets beyond checking balances. In Telegram functionality, basic send/reply/read tools exist, but there's no tool for configuring or managing chats. The surface covers core actions but lacks full lifecycle or advanced operations, which agents might need to work around.