ethereum-tools
by 0xGval
Verified
/**
* Ethereum Tools for Claude MCP
*
* This is the main entry point for the Ethereum Tools server. It initializes the
* MCP server, sets up Web3 connectivity, and registers the various tools for
* smart contract analysis, balance checking, and blockchain data retrieval.
*
* Environment variables required:
* - ETH_RPC_URL: Ethereum RPC endpoint
* - MORALIS_API_KEY: API key for Moralis
* - ETHERSCAN_API_KEY: API key for Etherscan
*
* @module ethereum-tools
*/
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { Web3 } from "web3";
import dotenv from "dotenv";
import https from 'https';
// Import tool registration functions
import { registerAuditTool } from "./tools/audit.js";
import { registerBalanceTools } from "./tools/balance.js";
import { registerTokenTools } from "./tools/tokens.js";
import { registerProfitabilityTools } from "./tools/profitability.js";
import { registerUtilityTools } from "./tools/utility.js";
import { registerTokenAnalysisTools } from "./tools/token-analysis.js";
// Add global error handling to prevent crashes
process.on('uncaughtException', (err) => {
console.error('UNCAUGHT EXCEPTION in main.js:', err);
});
// Load environment variables from .env file
dotenv.config();
// Show environment variable status for debugging
console.error('Environment variables loaded:');
console.error('- ETH_RPC_URL present:', !!process.env.ETH_RPC_URL);
console.error('- MORALIS_API_KEY present:', !!process.env.MORALIS_API_KEY);
console.error('- ETHERSCAN_API_KEY present:', !!process.env.ETHERSCAN_API_KEY);
// Create an MCP server with metadata
const server = new McpServer({
name: "Ethereum Tools",
version: "1.0.0"
});
// Initialize Web3 with the provider from .env or fallback
// Added check to handle template literals that weren't properly substituted
const eth_rpc = process.env.ETH_RPC_URL;
const web3 = new Web3(
(eth_rpc && !eth_rpc.includes("${")) ? eth_rpc : 'https://eth.llamarpc.com'
);
// Register all tools - each tool group is managed in a separate module
registerUtilityTools(server);
registerBalanceTools(server, web3);
registerTokenTools(server);
registerProfitabilityTools(server);
registerAuditTool(server);
registerTokenAnalysisTools(server);
// Start receiving messages on stdin and sending messages on stdout
const transport = new StdioServerTransport();
// Connect the server to the transport
await server.connect(transport);