Skip to main content
Glama
buildwithgrove

Grove's MCP Server for Pocket Network

query_blockchain

Execute natural language queries to retrieve blockchain data across 70+ networks including Ethereum, Solana, Cosmos, and Sui. Access token analytics, transaction details, domain resolution, and multi-chain comparisons.

Instructions

Execute a natural language query to interact with blockchain data (e.g., "get the latest height for ethereum")

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryYesNatural language query describing what you want to do

Implementation Reference

  • Defines the tool name, description, and input schema (natural language query) for 'query_blockchain'.
    { name: 'query_blockchain', description: 'Execute a natural language query to interact with blockchain data (e.g., "get the latest height for ethereum")', inputSchema: { type: 'object', properties: { query: { type: 'string', description: 'Natural language query describing what you want to do', }, }, required: ['query'], },
  • Handler logic for 'query_blockchain': performs safety validation on the query, calls BlockchainRPCService.executeQuery(), formats and returns the RPC result.
    case 'query_blockchain': { const query = args?.query as string; // SAFETY CHECK: Validate query before execution const safetyCheck = validateNaturalLanguageQuery(query); if (!safetyCheck.safe) { return { content: [ { type: 'text', text: `⛔ UNSAFE QUERY BLOCKED\n\n` + `Reason: ${safetyCheck.reason}\n\n` + `Suggestion: ${safetyCheck.suggestion}\n\n` + `This protection prevents session crashes from large responses.`, }, ], isError: true, }; } const result = await blockchainService.executeQuery(query); return { content: [ { type: 'text', text: JSON.stringify(result, null, 2), }, ], isError: !result.success, }; }
  • Core implementation delegated by handler: parses natural language query, matches to RPC method/service, builds parameters, executes RPC call via callRPCMethod.
    async executeQuery(query: string): Promise<EndpointResponse> { const parsed = this.parseQuery(query); const matches = this.findMethodByQuery(parsed.intent); if (matches.length === 0) { return { success: false, error: `No matching methods found for query: "${query}"`, }; } // Filter by blockchain if specified let filteredMatches = matches; if (parsed.blockchain) { filteredMatches = matches.filter( m => m.service.blockchain === parsed.blockchain ); if (filteredMatches.length === 0) { filteredMatches = matches; // Fall back to all matches } } // Use the first match const { method, service } = filteredMatches[0]; // Build params based on method requirements const params = this.buildParamsForMethod(method, query); return this.callRPCMethod(service.id, method.name, params); }
  • src/index.ts:88-101 (registration)
    Registers the blockchain tools (including query_blockchain schema) by collecting from registerBlockchainHandlers and setting up listTools handler.
    const tools: Tool[] = [ ...registerBlockchainHandlers(server, blockchainService), ...registerDomainHandlers(server, domainResolver), ...registerTransactionHandlers(server, advancedBlockchain), ...registerTokenHandlers(server, advancedBlockchain), ...registerMultichainHandlers(server, advancedBlockchain), ...registerContractHandlers(server, advancedBlockchain), ...registerUtilityHandlers(server, advancedBlockchain), ...registerEndpointHandlers(server, endpointManager), ...registerSolanaHandlers(server, solanaService), ...registerCosmosHandlers(server, cosmosService), ...registerSuiHandlers(server, suiService), ...registerDocsHandlers(server, docsManager), ];
  • src/index.ts:114-126 (registration)
    Dispatches tool calls to handleBlockchainTool (first in sequence), which handles query_blockchain via switch case.
    let result = (await handleBlockchainTool(name, args, blockchainService)) || (await handleDomainTool(name, args, domainResolver)) || (await handleTransactionTool(name, args, advancedBlockchain)) || (await handleTokenTool(name, args, advancedBlockchain)) || (await handleMultichainTool(name, args, advancedBlockchain)) || (await handleContractTool(name, args, advancedBlockchain)) || (await handleUtilityTool(name, args, advancedBlockchain)) || (await handleEndpointTool(name, args, endpointManager)) || (await handleSolanaTool(name, args, solanaService)) || (await handleCosmosTool(name, args, cosmosService)) || (await handleSuiTool(name, args, suiService)) || (await handleDocsTool(name, args, docsManager));

Latest Blog Posts

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