Web3 MCP Server

  • src
import { config } from 'dotenv'; import { fileURLToPath } from 'url'; import { dirname, resolve } from 'path'; import { existsSync } from 'fs'; // Get directory name for ES module const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); // Check for .env file const envPath = resolve(__dirname, '../.env'); console.error('Looking for .env file at:', envPath); console.error('.env file exists:', existsSync(envPath)); // Load environment variables const result = config({ path: envPath }); if (result.error) { console.error('Error loading .env file:', result.error); process.exit(1); } import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { registerSolanaTools } from "./chains/solana/solana.js"; import { registerEvmTools } from "./chains/evm/evm.js"; import { registerBitcoinTools, registerLitecoinTools, registerDogecoinTools, registerBitcoinCashTools, } from "./chains/UTXO/index.js"; import { registerThorchainTools } from "./chains/thorchain/thorchain.js"; import { registerRippleTools } from "./chains/ripple/ripple.js"; import { registerGeneralTools } from "./general/index.js"; // Create server instance const server = new McpServer({ name: "web3-rpc", version: "1.0.0", }); // Helper function to check if a feature is enabled const isEnabled = (envVar: string): boolean => { const value = process.env[envVar]?.toLowerCase(); return value === 'true' || value === '1' || value === 'yes'; }; // Register chain-specific tools based on environment variables if (isEnabled('ENABLE_SOLANA_TOOLS')) { console.error('Registering Solana tools...'); registerSolanaTools(server); } if (isEnabled('ENABLE_EVM_TOOLS')) { console.error('Registering EVM chain tools...'); registerEvmTools(server); } // UTXO Chain Tools if (isEnabled('ENABLE_BITCOIN_TOOLS')) { console.error('Registering Bitcoin tools...'); registerBitcoinTools(server); } if (isEnabled('ENABLE_LITECOIN_TOOLS')) { console.error('Registering Litecoin tools...'); registerLitecoinTools(server); } if (isEnabled('ENABLE_DOGECOIN_TOOLS')) { console.error('Registering Dogecoin tools...'); registerDogecoinTools(server); } if (isEnabled('ENABLE_BITCOINCASH_TOOLS')) { console.error('Registering Bitcoin Cash tools...'); registerBitcoinCashTools(server); } if (isEnabled('ENABLE_THORCHAIN_TOOLS')) { console.error('Registering THORChain tools...'); registerThorchainTools(server); } if (isEnabled('ENABLE_RIPPLE_TOOLS')) { console.error('Registering Ripple (XRP) tools...'); registerRippleTools(server); } // Register general tools console.error('Registering general tools...'); registerGeneralTools(server); async function main() { const transport = new StdioServerTransport(); await server.connect(transport); } main().catch((err: unknown) => { const error = err as Error; console.error("Fatal error in main():", error.message); process.exit(1); });