This MCP server exposes 7 tools for interacting with the DefiLlama API. All tools are properly registered with names and input schemas in src/tools.ts. However, critical deficiencies in description quality and parameter documentation significantly limit LLM usability. Tool descriptions are present but minimal (mostly 20-50 chars), and ALL input parameters lack descriptions, the schema defines only type and required status, but provides no guidance on expected values, formats, or semantics. This forces LLMs to guess at parameter intent and valid inputs. Error handling is minimal (catch block returns error.message string), with no guidance on recovery or retryability. No output schemas are documented, leaving LLMs unable to plan downstream operations. The naming convention is reasonable (verb_noun with prefixed namespace), but the lack of parameter annotations and output documentation places this server solidly in the 'fair to poor' range (C/D tier). Average tool score across all 7 is ~38 due to missing parameter descriptions and limited tool descriptions.
Get TVL data for a specific chain
Get historical prices of tokens
Get TVL data for a specific protocol
List all protocols tracked by DefiLlama
Get data for a specific stablecoin
List all stablecoins tracked by DefiLlama
Get current prices of tokens
All input parameters lack descriptions. The 'protocol' parameter in defillama_get_protocol_tvl, 'chain' in defillama_get_chain_tvl, 'coins' in defillama_get_token_prices/defillama_get_historical_prices, and 'asset' in defillama_get_stablecoin_data have no annotations explaining what values they accept, format requirements, or examples. LLMs must infer semantics from parameter names alone, leading to invalid inputs.
No output schemas documented. Tools return implicit results (Protocol[], ProtocolTvl, etc. in TypeScript interfaces), but these schemas are not exposed in the MCP tool definitions. LLMs cannot predict the structure of responses and cannot plan multi-step chains requiring downstream tool inputs.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 43 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 32 | - | v1 |
Tool descriptions are too generic and lack context. Descriptions like 'Get TVL data for a specific protocol' (45 chars) and 'Get current prices of tokens' (30 chars) do not explain WHEN to use each tool, what makes them distinct, or what fields are returned. These descriptions risk tool confusion and suboptimal LLM selection.
No error recovery guidance. Error handling in src/index.ts catches exceptions and returns {toolResult: {error: message}, content: [], isError: true}. This provides no classification (retryable vs permanent), no suggested next step, and no context (e.g., 'Protocol not found. Call defillama_get_protocols first to list available protocols.').
No constraints or format guidance for array parameters. 'coins' in defillama_get_token_prices is an array of strings with no min/max length, no format specification (e.g., 'bitcoin, ethereum' vs 'BTC, ETH' vs 'BTC:ethereum'), no examples, and no description. LLMs must guess the correct format.
Timestamp parameter in defillama_get_historical_prices lacks context. Parameter is type 'number' with no description, units (seconds? milliseconds?), range, or validity constraints. LLMs may pass invalid epoch values or confused time formats.