Skip to main content
Glama
chains.ts9.02 kB
import { type Chain } from 'viem'; import { // Mainnets mainnet, optimism, arbitrum, arbitrumNova, base, polygon, polygonZkEvm, avalanche, bsc, zksync, linea, celo, gnosis, fantom, filecoin, moonbeam, moonriver, cronos, lumiaMainnet, scroll, mantle, manta, blast, fraxtal, mode, metis, kroma, zora, aurora, canto, flowMainnet, // Testnets sepolia, optimismSepolia, arbitrumSepolia, baseSepolia, polygonAmoy, avalancheFuji, bscTestnet, zksyncSepoliaTestnet, lineaSepolia, lumiaTestnet, scrollSepolia, mantleSepoliaTestnet, mantaSepoliaTestnet, blastSepolia, fraxtalTestnet, modeTestnet, metisSepolia, kromaSepolia, zoraSepolia, celoAlfajores, goerli, holesky, flowTestnet, filecoinCalibration } from 'viem/chains'; // Default configuration values export const DEFAULT_RPC_URL = 'https://eth.llamarpc.com'; export const DEFAULT_CHAIN_ID = 1; // Map chain IDs to chains export const chainMap: Record<number, Chain> = { // Mainnets 1: mainnet, 10: optimism, 42161: arbitrum, 42170: arbitrumNova, 8453: base, 137: polygon, 1101: polygonZkEvm, 43114: avalanche, 56: bsc, 324: zksync, 59144: linea, 42220: celo, 100: gnosis, 250: fantom, 314: filecoin, 1284: moonbeam, 1285: moonriver, 25: cronos, 534352: scroll, 5000: mantle, 169: manta, 994873017: lumiaMainnet, 81457: blast, 252: fraxtal, 34443: mode, 1088: metis, 255: kroma, 7777777: zora, 1313161554: aurora, 7700: canto, 747: flowMainnet, // Testnets 11155111: sepolia, 11155420: optimismSepolia, 421614: arbitrumSepolia, 84532: baseSepolia, 80002: polygonAmoy, 43113: avalancheFuji, 97: bscTestnet, 300: zksyncSepoliaTestnet, 59141: lineaSepolia, 1952959480: lumiaTestnet, 534351: scrollSepolia, 5003: mantleSepoliaTestnet, 3441006: mantaSepoliaTestnet, 168587773: blastSepolia, 2522: fraxtalTestnet, 919: modeTestnet, 59902: metisSepolia, 2358: kromaSepolia, 999999999: zoraSepolia, 44787: celoAlfajores, 5: goerli, 17000: holesky, 545: flowTestnet, 314159: filecoinCalibration, }; // Map network names to chain IDs for easier reference export const networkNameMap: Record<string, number> = { // Mainnets 'ethereum': 1, 'mainnet': 1, 'eth': 1, 'optimism': 10, 'op': 10, 'arbitrum': 42161, 'arb': 42161, 'arbitrum-nova': 42170, 'arbitrumnova': 42170, 'base': 8453, 'polygon': 137, 'matic': 137, 'polygon-zkevm': 1101, 'polygonzkevm': 1101, 'avalanche': 43114, 'avax': 43114, 'binance': 56, 'bsc': 56, 'zksync': 324, 'linea': 59144, 'celo': 42220, 'gnosis': 100, 'xdai': 100, 'fantom': 250, 'ftm': 250, 'filecoin': 314, 'fil': 314, 'moonbeam': 1284, 'moonriver': 1285, 'cronos': 25, 'scroll': 534352, 'mantle': 5000, 'manta': 169, 'lumia': 994873017, 'blast': 81457, 'fraxtal': 252, 'mode': 34443, 'metis': 1088, 'kroma': 255, 'zora': 7777777, 'aurora': 1313161554, 'canto': 7700, 'flow': 747, // Testnets 'sepolia': 11155111, 'optimism-sepolia': 11155420, 'optimismsepolia': 11155420, 'arbitrum-sepolia': 421614, 'arbitrumsepolia': 421614, 'base-sepolia': 84532, 'basesepolia': 84532, 'polygon-amoy': 80002, 'polygonamoy': 80002, 'avalanche-fuji': 43113, 'avalanchefuji': 43113, 'fuji': 43113, 'bsc-testnet': 97, 'bsctestnet': 97, 'zksync-sepolia': 300, 'zksyncsepolia': 300, 'linea-sepolia': 59141, 'lineasepolia': 59141, 'lumia-testnet': 1952959480, 'scroll-sepolia': 534351, 'scrollsepolia': 534351, 'mantle-sepolia': 5003, 'mantlesepolia': 5003, 'manta-sepolia': 3441006, 'mantasepolia': 3441006, 'blast-sepolia': 168587773, 'blastsepolia': 168587773, 'fraxtal-testnet': 2522, 'fraxtaltestnet': 2522, 'mode-testnet': 919, 'modetestnet': 919, 'metis-sepolia': 59902, 'metissepolia': 59902, 'kroma-sepolia': 2358, 'kromasepolia': 2358, 'zora-sepolia': 999999999, 'zorasepolia': 999999999, 'celo-alfajores': 44787, 'celoalfajores': 44787, 'alfajores': 44787, 'goerli': 5, 'holesky': 17000, 'flow-testnet': 545, 'filecoin-calibration': 314159, }; // Map chain IDs to RPC URLs export const rpcUrlMap: Record<number, string> = { // Mainnets 1: 'https://eth.llamarpc.com', 10: 'https://mainnet.optimism.io', 42161: 'https://arb1.arbitrum.io/rpc', 42170: 'https://nova.arbitrum.io/rpc', 8453: 'https://mainnet.base.org', 137: 'https://polygon-rpc.com', 1101: 'https://zkevm-rpc.com', 43114: 'https://api.avax.network/ext/bc/C/rpc', 56: 'https://bsc-dataseed.binance.org', 324: 'https://mainnet.era.zksync.io', 59144: 'https://rpc.linea.build', 42220: 'https://forno.celo.org', 100: 'https://rpc.gnosischain.com', 250: 'https://rpc.ftm.tools', 314: 'https://api.node.glif.io/rpc/v1', 1284: 'https://rpc.api.moonbeam.network', 1285: 'https://rpc.api.moonriver.moonbeam.network', 25: 'https://evm.cronos.org', 534352: 'https://rpc.scroll.io', 5000: 'https://rpc.mantle.xyz', 169: 'https://pacific-rpc.manta.network/http', 81457: 'https://rpc.blast.io', 252: 'https://rpc.frax.com', 994873017: 'https://mainnet-rpc.lumia.org', 34443: 'https://mainnet.mode.network', 1088: 'https://andromeda.metis.io/?owner=1088', 255: 'https://api.kroma.network', 7777777: 'https://rpc.zora.energy', 1313161554: 'https://mainnet.aurora.dev', 7700: 'https://canto.gravitychain.io', 747: 'https://mainnet.evm.nodes.onflow.org', // Testnets 11155111: 'https://sepolia.drpc.org', 11155420: 'https://sepolia.optimism.io', 421614: 'https://sepolia-rpc.arbitrum.io/rpc', 84532: 'https://sepolia.base.org', 80002: 'https://rpc-amoy.polygon.technology', 43113: 'https://api.avax-test.network/ext/bc/C/rpc', 97: 'https://data-seed-prebsc-1-s1.binance.org:8545', 300: 'https://sepolia.era.zksync.dev', 59141: 'https://rpc.sepolia.linea.build', 534351: 'https://sepolia-rpc.scroll.io', 5003: 'https://rpc.sepolia.mantle.xyz', 3441006: 'https://pacific-rpc.sepolia.manta.network/http', 1952959480: 'https://testnet-rpc.lumia.org', 168587773: 'https://sepolia.blast.io', 2522: 'https://rpc.testnet.frax.com', 919: 'https://sepolia.mode.network', 59902: 'https://sepolia.metis.io/?owner=59902', 2358: 'https://api.sepolia.kroma.network', 999999999: 'https://sepolia.rpc.zora.energy', 44787: 'https://alfajores-forno.celo-testnet.org', 5: 'https://rpc.ankr.com/eth_goerli', 17000: 'https://ethereum-holesky.publicnode.com', 545: 'https://testnet.evm.nodes.onflow.org', 314159: 'https://api.calibration.node.glif.io/rpc/v1', }; /** * Resolves a chain identifier (number or string) to a chain ID * @param chainIdentifier Chain ID (number) or network name (string) * @returns The resolved chain ID */ export function resolveChainId(chainIdentifier: number | string): number { if (typeof chainIdentifier === 'number') { return chainIdentifier; } // Convert to lowercase for case-insensitive matching const networkName = chainIdentifier.toLowerCase(); // Check if the network name is in our map if (networkName in networkNameMap) { return networkNameMap[networkName]; } // Try parsing as a number const parsedId = parseInt(networkName); if (!isNaN(parsedId)) { return parsedId; } // Default to mainnet if not found return DEFAULT_CHAIN_ID; } /** * Returns the chain configuration for the specified chain ID or network name * @param chainIdentifier Chain ID (number) or network name (string) * @returns The chain configuration * @throws Error if the network is not supported (when string is provided) */ export function getChain(chainIdentifier: number | string = DEFAULT_CHAIN_ID): Chain { if (typeof chainIdentifier === 'string') { const networkName = chainIdentifier.toLowerCase(); // Try to get from direct network name mapping first if (networkNameMap[networkName]) { return chainMap[networkNameMap[networkName]] || mainnet; } // If not found, throw an error throw new Error(`Unsupported network: ${chainIdentifier}`); } // If it's a number, return the chain from chainMap return chainMap[chainIdentifier] || mainnet; } /** * Gets the appropriate RPC URL for the specified chain ID or network name * @param chainIdentifier Chain ID (number) or network name (string) * @returns The RPC URL for the specified chain */ export function getRpcUrl(chainIdentifier: number | string = DEFAULT_CHAIN_ID): string { const chainId = typeof chainIdentifier === 'string' ? resolveChainId(chainIdentifier) : chainIdentifier; return rpcUrlMap[chainId] || DEFAULT_RPC_URL; } /** * Get a list of supported networks * @returns Array of supported network names (excluding short aliases) */ export function getSupportedNetworks(): string[] { return Object.keys(networkNameMap) .filter(name => name.length > 2) // Filter out short aliases .sort(); }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mcpdotdirect/evm-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server