coingeckotokeninfoagent_get_token_price_multi
Retrieve current prices and optional market data for multiple cryptocurrencies using CoinGecko IDs in a single API call. Supports target currencies, market cap, trading volume, price change, and precision settings for efficient data access.
Instructions
Fetch price data for multiple tokens at once using CoinGecko IDs. Efficiently retrieves current prices and optional market data for multiple cryptocurrencies in a single API call.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Comma-separated CoinGecko IDs of the tokens to query | |
| include_24hr_change | No | Include 24hr price change percentage | |
| include_24hr_vol | No | Include 24hr trading volume data | |
| include_last_updated_at | No | Include timestamp of when the data was last updated | |
| include_market_cap | No | Include market capitalization data | |
| precision | No | Decimal precision for currency values (e.g., 'full' for maximum precision) | |
| vs_currencies | Yes | Comma-separated target currencies (e.g., usd,eur,btc) | usd |
Implementation Reference
- mesh_mcp_server/server.py:40-53 (registration)DEFAULT_AGENTS list includes "CoinGeckoTokenInfoAgent", enabling its tools with names prefixed by "coingeckotokeninfoagent_"DEFAULT_AGENTS = [ "CoinGeckoTokenInfoAgent", "DexScreenerTokenInfoAgent", "ElfaTwitterIntelligenceAgent", "ExaSearchAgent", "TwitterInfoAgent", "AIXBTProjectInfoAgent", "EtherscanAgent", "EvmTokenInfoAgent", "FundingRateAgent", "UnifaiTokenAnalysisAgent", "YahooFinanceAgent", "ZerionWalletAnalysisAgent" ]
- mesh_mcp_server/server.py:189-217 (registration)Dynamically registers each agent tool as an MCP tool with ID '{agent_id.lower()}_{tool_name}', e.g. 'coingeckotokeninfoagent_get_token_price_multi'for tool in agent_data.get("tools", []): if tool.get("type") == "function": function_data = tool.get("function", {}) tool_name = function_data.get("name") if not tool_name: continue # Create a unique tool ID tool_id = f"{agent_id.lower()}_{tool_name}" # Get parameters or create default schema parameters = function_data.get("parameters", {}) if not parameters: parameters = { "type": "object", "properties": {}, "required": [], } # Store tool info tool_registry[tool_id] = { "agent_id": agent_id, "tool_name": tool_name, "description": function_data.get("description", ""), "parameters": parameters, } # Log which agents contributed tools
- mesh_mcp_server/server.py:300-319 (handler)MCP handler for calling the tool: parses name to get agent/tool, invokes execute_tool which proxies to Mesh API.@app.call_tool() async def call_tool(name: str, arguments: dict) -> List[types.TextContent]: """Call the specified tool with the given arguments.""" try: if name not in self.tool_registry: raise ValueError(f"Unknown tool: {name}") tool_info = self.tool_registry[name] result = await self.execute_tool( agent_id=tool_info["agent_id"], tool_name=tool_info["tool_name"], tool_arguments=arguments, ) # Convert result to TextContent return [types.TextContent(type="text", text=str(result))] except Exception as e: logger.error(f"Error calling tool {name}: {e}") raise ValueError(f"Failed to call tool {name}: {str(e)}") from e
- mesh_mcp_server/server.py:224-262 (helper)Helper that sends tool call to Mesh API endpoint /mesh_request with agent_id and tool details.async def execute_tool( self, agent_id: str, tool_name: str, tool_arguments: Dict[str, Any] ) -> Dict[str, Any]: """Execute a tool on a mesh agent. Args: agent_id: ID of the agent to execute the tool on tool_name: Name of the tool to execute tool_arguments: Arguments to pass to the tool Returns: Tool execution result Raises: ToolExecutionError: If there's an error executing the tool """ request_data = { "agent_id": agent_id, "input": {"tool": tool_name, "tool_arguments": tool_arguments}, } # Add API key if available if Config.HEURIST_API_KEY: request_data["api_key"] = Config.HEURIST_API_KEY try: result = await call_mesh_api( "mesh_request", method="POST", json=request_data ) return result.get("data", result) # Prefer the 'data' field if it exists except MeshApiError as e: # Re-raise API errors with clearer context raise ToolExecutionError(str(e)) from e except Exception as e: logger.error(f"Error calling {agent_id} tool {tool_name}: {e}") raise ToolExecutionError( f"Failed to call {agent_id} tool {tool_name}: {str(e)}" ) from e
- mesh_mcp_server/server.py:288-299 (schema)Registers tool schemas dynamically from metadata parameters.@app.list_tools() async def list_tools() -> List[types.Tool]: """List all available tools.""" return [ types.Tool( name=tool_id, description=tool_info["description"], inputSchema=tool_info["parameters"], ) for tool_id, tool_info in self.tool_registry.items() ]