Skip to main content
Glama

Chain Debugger MCP Server

by OptimusOpus
MEGAETH_INTEGRATION_PLAN.md10.6 kB
# MegaETH Realtime API Integration Plan ## 1. Overview MegaETH is a high-performance Ethereum-compatible blockchain that offers a Realtime API for low-latency access to transaction and state data. This document outlines a comprehensive plan to integrate the MegaETH Realtime API into the Tenderly MCP server, enabling developers to leverage its real-time features through new MCP operations. ## 2. Key Features The MegaETH Realtime API provides several key features that differentiate it from the standard Ethereum JSON-RPC API: - **Real-time State Queries**: Methods that query chain and account states return values as of the most recent mini block when using `pending` or `latest` tags. - **Instant Transaction Visibility**: Methods that query transaction data can see and return results as soon as a transaction is included in a mini block. - **WebSocket Subscriptions**: The `eth_subscribe` method, when used over a WebSocket connection, streams transaction logs, state changes, and block content as soon as the corresponding mini block is produced. - **Simplified Transaction Sending**: The `realtime_sendRawTransaction` method submits a transaction and returns the receipt in a single call, eliminating the need for polling. - **Paginated Log Queries**: The `eth_getLogsWithCursor` method supports paginated log queries using a cursor, allowing for efficient retrieval of large datasets. - **Mini Blocks**: High-frequency block production with sub-second latency, enabling real-time data access. ## 3. Implementation Architecture ### 3.1 Configuration Updates Update `src/config.ts` to include MegaETH-specific configuration: ```typescript const configSchema = z.object({ // Existing configuration... // MegaETH configuration (optional) megaethRpcUrl: z.string().optional(), megaethWsUrl: z.string().optional(), megaethChainId: z.number().optional(), megaethConnectionTimeout: z.number().default(30000).optional(), megaethMaxSubscriptions: z.number().default(100).optional(), }); ``` Environment variables: - `MEGAETH_RPC_URL`: HTTP/HTTPS endpoint for standard RPC calls - `MEGAETH_WS_URL`: WebSocket endpoint for subscriptions - `MEGAETH_CHAIN_ID`: Chain ID for validation ### 3.2 Client Implementation Create `src/client/megaeth.ts` following the existing client pattern: ```typescript export class MegaETHClient { private readonly httpClient: AxiosInstance; private wsClient: WebSocket | null = null; private subscriptions: Map<string, Subscription>; constructor(config: Config) { // Initialize HTTP client with retry logic // Setup WebSocket connection manager } // Core methods async validateConnection(): Promise<void> async isMegaETHChain(): Promise<boolean> async callRPC(method: string, params: any[]): Promise<any> // WebSocket methods async connectWebSocket(): Promise<void> async subscribe(eventType: string, params: any): Promise<string> async unsubscribe(subscriptionId: string): Promise<boolean> // Specialized methods async sendRawTransaction(signedTx: string): Promise<TransactionReceipt> async getLogsWithCursor(filter: LogFilter, cursor?: string): Promise<LogsWithCursor> } ``` ### 3.3 Operation Structure Create `src/operations/evm/megaeth.ts`: ```typescript // Transaction operations export async function sendRawTransaction( client: MegaETHClient, params: MegaethSendRawTransactionParams ): Promise<TransactionReceipt> // Log operations export async function getLogsWithCursor( client: MegaETHClient, params: MegaethGetLogsParams ): Promise<LogsWithCursor> // Subscription operations export async function subscribe( client: MegaETHClient, params: MegaethSubscribeParams ): Promise<SubscriptionResponse> export async function unsubscribe( client: MegaETHClient, params: MegaethUnsubscribeParams ): Promise<boolean> // Chain info operations export async function getChainInfo( client: MegaETHClient ): Promise<ChainInfo> // Block operations with mini-block support export async function getBlockByNumber( client: MegaETHClient, params: MegaethGetBlockParams ): Promise<Block> ``` ### 3.4 Schema Definitions Add to `src/schemas.ts`: ```typescript // Transaction schemas export const MegaethSendRawTransactionSchema = z.object({ signedTransaction: z.string().describe("Signed transaction data in hex format"), timeout: z.number().optional().describe("Timeout in milliseconds for transaction inclusion"), }); // Log query schemas export const MegaethGetLogsSchema = z.object({ fromBlock: z.union([z.number(), z.string()]).optional(), toBlock: z.union([z.number(), z.string()]).optional(), address: z.union([z.string(), z.array(z.string())]).optional(), topics: z.array(z.union([z.string(), z.array(z.string()), z.null()])).optional(), cursor: z.string().optional().describe("Cursor for pagination"), limit: z.number().min(1).max(1000).default(100).optional(), }); // Subscription schemas export const MegaethSubscribeSchema = z.object({ eventType: z.enum(["newHeads", "logs", "newPendingTransactions", "syncing"]), params: z.record(z.any()).optional().describe("Event-specific parameters"), }); export const MegaethUnsubscribeSchema = z.object({ subscriptionId: z.string().describe("Subscription ID to cancel"), }); ``` ## 4. Technical Implementation Details ### 4.1 WebSocket Manager Implement a robust WebSocket connection manager: ```typescript class WebSocketManager { private connection: WebSocket | null = null; private reconnectAttempts = 0; private maxReconnectAttempts = 5; private reconnectDelay = 1000; private heartbeatInterval: NodeJS.Timer | null = null; async connect(url: string): Promise<void> async disconnect(): Promise<void> private setupHeartbeat(): void private handleReconnection(): Promise<void> on(event: string, handler: Function): void removeListener(event: string, handler: Function): void } ``` ### 4.2 Error Handling Define custom error types: ```typescript export class MegaETHError extends Error { constructor(message: string, public code: string, public data?: any) { super(message); } } export class RealtimeTransactionExpiredError extends MegaETHError { constructor(txHash: string) { super(`Transaction ${txHash} expired before inclusion`, "REALTIME_TX_EXPIRED"); } } export class MiniBlockNotFoundError extends MegaETHError { constructor(blockNumber: number) { super(`Mini block ${blockNumber} not found`, "MINI_BLOCK_NOT_FOUND"); } } export class SubscriptionLimitError extends MegaETHError { constructor(limit: number) { super(`Subscription limit of ${limit} exceeded`, "SUBSCRIPTION_LIMIT_EXCEEDED"); } } ``` ### 4.3 Connection Pooling and Rate Limiting Implement connection pooling for HTTP requests: ```typescript class ConnectionPool { private pool: AxiosInstance[]; private currentIndex = 0; constructor(urls: string[], maxConnections: number = 5) { // Initialize connection pool } getConnection(): AxiosInstance { // Round-robin connection selection } } ``` Rate limiting implementation: ```typescript class RateLimiter { private requests: number[] = []; private readonly maxRequests: number; private readonly windowMs: number; constructor(maxRequests: number, windowMs: number) { this.maxRequests = maxRequests; this.windowMs = windowMs; } async checkLimit(): Promise<boolean> { // Check if request can proceed } } ``` ## 5. MCP Server Integration Update `src/index.ts` to include MegaETH capabilities: ```typescript // Initialize MegaETH client if configured let megaethClient: MegaETHClient | null = null; if (config.megaethRpcUrl) { megaethClient = new MegaETHClient(config); try { await megaethClient.validateConnection(); console.error("MegaETH connection established"); } catch (error) { console.error("Warning: Could not connect to MegaETH:", error.message); megaethClient = null; } } // Add MegaETH capabilities if (megaethClient) { capabilities.resources["megaeth://chain_info"] = { description: "MegaETH chain information and mini-block status", }; capabilities.tools["megaeth_sendRawTransaction"] = { description: "Send transaction and receive receipt in one call", }; capabilities.tools["megaeth_getLogs"] = { description: "Get logs with cursor-based pagination", }; capabilities.tools["megaeth_subscribe"] = { description: "Subscribe to real-time blockchain events", }; capabilities.tools["megaeth_unsubscribe"] = { description: "Unsubscribe from blockchain events", }; } ``` ## 6. Testing Strategy ### 6.1 Unit Tests - Test each operation in isolation - Mock MegaETH RPC responses - Test error handling scenarios - Validate schema parsing ### 6.2 Integration Tests - Test full transaction lifecycle - Verify WebSocket subscription flow - Test pagination with cursors - Validate mini-block behavior ### 6.3 Load Tests - Test WebSocket connection limits - Verify rate limiting behavior - Test connection pool performance - Measure response latencies ## 7. Documentation ### 7.1 API Reference Document each MCP operation with: - Description and use cases - Parameter specifications - Response format - Error conditions - Code examples ### 7.2 Integration Guide - Setup instructions - Configuration options - Best practices - Troubleshooting guide ### 7.3 Examples Provide examples for common use cases: - Monitoring new transactions - Tracking contract events - Building real-time dashboards - Transaction status tracking ## 8. Security Considerations - **Input Validation**: Validate all parameters against schemas - **Connection Security**: Use TLS for all connections - **Authentication**: Support API key authentication if required - **Resource Limits**: Implement subscription and connection limits - **Audit Logging**: Log all operations for security monitoring ## 9. Performance Optimizations - **Connection Reuse**: Maintain persistent connections - **Batch Operations**: Support batch RPC calls where applicable - **Caching**: Cache chain info and static data - **Compression**: Enable WebSocket compression - **Resource Cleanup**: Properly close connections and clear subscriptions ## 10. Future Enhancements - **Analytics Integration**: Track usage patterns and performance metrics - **Multi-chain Support**: Extend to support multiple MegaETH networks - **Advanced Filtering**: Support complex event filtering - **State Proof Verification**: Add merkle proof validation - **GraphQL Support**: If MegaETH adds GraphQL endpoints

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/OptimusOpus/chain-debugger-mcp-server'

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