An MCP server built with Spring Boot that provides cryptocurrency price fetching capabilities via the CoinGecko API.
Single tool with moderate issues. The fetchCryptoPrice tool has a clear verb_noun name and documented input schema, but the description is verbose (200+ chars) and buries critical guidance. Parameter description is overly detailed with instructions that should be server-side logic (Chinese translation). Output schema is completely undocumented, LLMs cannot plan follow-up calls without knowing what fields are returned. No error handling guidance. The tool's implementation details leak into the parameter description, violating the abstraction barrier between LLM-facing description and backend complexity.
Queries the current price, market capitalization, 24-hour trading volume, and 24-hour change of a specified cryptocurrency. The 'coin' parameter should be the official full name of the cryptocurrency (e.g., 'moss', 'bitcoin') and should be extracted directly from user input. If the user provides a name in Chinese (e.g., "比特币") or an abbreviation, it should be translated or mapped to the corresponding official English name, such as 'bitcoin' or the appropriate token name.
Output schema completely undocumented. Tool returns unspecified JSON; LLMs cannot extract price, market cap, volume, or change without reverse-engineering the response.
Parameter description conflates implementation detail (Chinese name translation, abbreviation mapping) with parameter specification. This is backend logic, not a parameter constraint. Description should state 'coin name in English (e.g., bitcoin, moss, ethereum)', not instruct the LLM to do translation.
Tool description (200+ chars) is verbose and mixes implementation guidance with functional purpose. Should be ~80-120 chars: 'Get current price, market cap, 24h volume, and change for a cryptocurrency by name (e.g., bitcoin, ethereum).' Currently buries the key info.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 45 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 36 | - | v1 |
No error handling guidance. What happens if the coin is not found? Invalid name? API timeout? LLM has no recovery path and cannot distinguish retryable errors from user-fixable ones.
CoinGecko API key injected from environment config but never exposed as a parameter, correct security practice. However, no scope or permission declarations in tool definition to clarify what access level this key grants.