search_tokens_llm
Use AI to search for tokens by describing what you need in natural language. This tool analyzes your query to select optimal search parameters for finding relevant tokens on the Ethereum blockchain.
Instructions
LLM-powered token search using AI to select optimal parameters
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural language query for token search |
Implementation Reference
- index.js:447-459 (registration)Registration of the 'search_tokens_llm' tool including name, description, and input schema requiring a 'query' parameter.name: 'search_tokens_llm', description: 'LLM-powered token search using AI to select optimal parameters', inputSchema: { type: 'object', properties: { query: { type: 'string', description: 'Natural language query for token search', }, }, required: ['query'], }, },
- index.js:449-458 (schema)Input schema for search_tokens_llm tool: object with required 'query' string.inputSchema: { type: 'object', properties: { query: { type: 'string', description: 'Natural language query for token search', }, }, required: ['query'], },
- index.js:744-745 (handler)Handler implementation: proxies the call to ChainFETCH API endpoint '/api/v1/ethereum/tokens/llm_search' using makeRequest method with GET and provided args.case 'search_tokens_llm': return await this.makeRequest('/api/v1/ethereum/tokens/llm_search', 'GET', args, null, token);
- index.js:634-682 (helper)Shared helper method that makes authenticated HTTP requests to the ChainFETCH API base URL, handles query params, auth token, and error handling. Used by all tool handlers including search_tokens_llm.async makeRequest(endpoint, method = 'GET', params = {}, body = null, token = null) { const chainfetchToken = token || process.env.CHAINFETCH_API_TOKEN; if (!chainfetchToken) { throw new McpError( ErrorCode.InvalidRequest, 'CHAINFETCH_API_TOKEN is required' ); } const url = new URL(`${API_BASE_URL}${endpoint}`); // Add query parameters for GET requests if (method === 'GET' && Object.keys(params).length > 0) { Object.entries(params).forEach(([key, value]) => { if (value !== undefined && value !== null) { if (Array.isArray(value)) { value.forEach(v => url.searchParams.append(`${key}[]`, v)); } else { url.searchParams.append(key, value.toString()); } } }); } const fetchOptions = { method, headers: { 'Authorization': `Bearer ${chainfetchToken}`, 'Content-Type': 'application/json', }, }; if (body && method !== 'GET') { fetchOptions.body = JSON.stringify(body); } const response = await fetch(url.toString(), fetchOptions); if (!response.ok) { const errorText = await response.text(); throw new McpError( ErrorCode.InternalError, `API request failed: ${response.status} ${response.statusText} - ${errorText}` ); } return await response.json(); }