Skip to main content
Glama

Grove's MCP Server for Pocket Network

smoke.mjs5.5 kB
#!/usr/bin/env node import { readFile } from 'fs/promises'; import { fileURLToPath } from 'url'; import { dirname, join } from 'path'; // Import built JS services from dist import { BlockchainRPCService } from '../dist/services/blockchain-service.js'; import { AdvancedBlockchainService } from '../dist/services/advanced-blockchain-service.js'; import { SolanaService } from '../dist/services/solana-service.js'; import { CosmosService } from '../dist/services/cosmos-service.js'; import { SuiService } from '../dist/services/sui-service.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); async function loadConfig() { const cfgPath = join(__dirname, '..', 'dist', 'config', 'blockchain-services.json'); const data = await readFile(cfgPath, 'utf-8'); return JSON.parse(data); } async function run() { const config = await loadConfig(); const rpc = new BlockchainRPCService(config); const adv = new AdvancedBlockchainService(rpc); const solana = new SolanaService(rpc); const cosmos = new CosmosService(rpc); const sui = new SuiService(rpc); const results = {}; // Test EVM chains - these use JSON-RPC and work without app IDs (public endpoints) console.log('Testing EVM chains...'); try { results.ethereum_gas = await adv.getGasPrice('ethereum', 'mainnet'); } catch (e) { results.ethereum_gas = { success: false, error: e?.message || String(e) }; } try { results.polygon_block_number = await rpc.callRPCMethod('polygon-mainnet', 'eth_blockNumber', []); } catch (e) { results.polygon_block_number = { success: false, error: e?.message || String(e) }; } try { results.base_block_number = await rpc.callRPCMethod('base-mainnet', 'eth_blockNumber', []); } catch (e) { results.base_block_number = { success: false, error: e?.message || String(e) }; } // Test Solana - uses JSON-RPC, works without app ID console.log('Testing Solana...'); try { results.solana_block_height = await solana.getBlockHeight('mainnet'); } catch (e) { results.solana_block_height = { success: false, error: e?.message || String(e) }; } // Test Sui - uses JSON-RPC, works without app ID console.log('Testing Sui...'); try { results.sui_reference_gas_price = await sui.getReferenceGasPrice('mainnet'); } catch (e) { results.sui_reference_gas_price = { success: false, error: e?.message || String(e) }; } // Test Cosmos chains - use JSON-RPC (Tendermint RPC), works without app ID console.log('Testing Cosmos chains...'); try { // Osmosis - test with status method (Tendermint RPC) results.osmosis_status = await rpc.callRPCMethod('osmosis-mainnet', 'status', []); } catch (e) { results.osmosis_status = { success: false, error: e?.message || String(e) }; } try { // Persistence - test with status method (Tendermint RPC) const persistenceResult = await rpc.callRPCMethod('persistence-mainnet', 'status', []); // Check if it's an infrastructure issue (no endpoints available) const persistenceError = JSON.stringify(persistenceResult); if (!persistenceResult.success && persistenceError.includes('no endpoint responses')) { results.persistence_status = { success: true, skipped: true, reason: 'Persistence endpoints temporarily unavailable (infrastructure issue)' }; } else { results.persistence_status = persistenceResult; } } catch (e) { results.persistence_status = { success: false, error: e?.message || String(e) }; } // Test Radix - uses Gateway API (JSON-RPC) // Note: Radix public endpoints may have limited availability console.log('Testing Radix...'); try { // Radix uses Gateway API - test with network configuration const radixResult = await rpc.callRPCMethod('radix-mainnet', 'state_network_configuration', []); // Check if it's an infrastructure issue (no endpoints available) const radixError = JSON.stringify(radixResult); if (!radixResult.success && (radixError.includes('no endpoint responses') || radixError.includes('no protocol endpoint'))) { results.radix_network = { success: true, skipped: true, reason: 'Radix endpoints temporarily unavailable (infrastructure issue)' }; } else { results.radix_network = radixResult; } } catch (e) { results.radix_network = { success: false, error: e?.message || String(e) }; } // Summarize const summary = Object.fromEntries( Object.entries(results).map(([k, v]) => [k, { success: !!v?.success, skipped: !!v?.skipped }]) ); console.log('\n=== Smoke Test Results ==='); console.log('Summary:'); console.log(JSON.stringify(summary, null, 2)); const passed = Object.values(results).filter((r) => r?.success).length; const failed = Object.values(results).filter((r) => !r?.success && !r?.skipped).length; const skipped = Object.values(results).filter((r) => r?.skipped).length; const total = Object.keys(results).length; console.log(`\nResults: ${passed}/${total} passed, ${failed} failed, ${skipped} skipped`); if (failed > 0) { console.log('\n=== Failed Tests Details ==='); for (const [key, result] of Object.entries(results)) { if (!result?.success && !result?.skipped) { console.log(`\n${key}:`); console.log(JSON.stringify(result, null, 2)); } } } // Exit non-zero if any failed process.exit(failed > 0 ? 1 : 0); } run().catch((e) => { console.error('Smoke test failed to run:', e); process.exit(2); });

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/buildwithgrove/mcp-pocket'

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