An AI crypto buddy MCP server with cryptocurrency market analysis, portfolio management, transaction simulation, on-chain analytics, news aggregation, and user memory features
This server has significant definition quality issues. While tool names generally follow verb_noun conventions (get*, add*, analyze*, etc.), parameter schemas are present but descriptions are often generic or missing critical context. Many tools lack detailed parameter descriptions, and output schemas are not documented in the visible code. Error handling guidance is absent. The server registers 32 tools via Spring AI's ToolCallbacks, but schema completeness and LLM-optimized descriptions are below baseline for production use. The duplicate tool names (getCryptoNews appears twice, rememberUserInfo and getUserInfo appear twice) suggest poor tool composition and namespace management.
Add or update a cryptocurrency holding in user's portfolio
Track DeFi protocol metrics and TVL analysis
Analyze market sentiment and provide investment insights
Analyze network health and metrics for a blockchain
Analyze user's portfolio and provide insights
Analyze social media sentiment for a specific cryptocurrency
Analyze token distribution and holder patterns
Analyze whale activity for a specific cryptocurrency
Duplicate tool names: getCryptoNews, rememberUserInfo, getUserInfo appear multiple times across different services. This violates single-responsibility principle and creates namespace collisions, forcing LLMs to reason about which variant to call.
Memory tools (rememberUserInfo, getUserInfo, deleteUserMemory) use generic names that conflict with market service equivalents. Rename to storeMemory/retrieveMemory/removeMemory or prefixUserMemory_* to disambiguate.
Most analysis and sentiment tools (analyzeMarketSentiment, analyzeSocialSentiment, analyzeWhaleActivity, analyzeNetworkHealth, analyzeDeFiMetrics, analyzeTokenDistribution) have vague descriptions like 'Analyze X and provide Y' with no explanation of what metrics are returned, what 'sentiment' means, or how the analysis helps decision-making.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 33 | - | v1 |
Calculate potential profit/loss for a trade
Cancel a pending transaction
Check the status of a transaction
Delete a specific memory entry
Get all stored memories for a user
Get alerts about significant crypto-related events or news
Get detailed information about a specific cryptocurrency
Get cryptocurrency news from various sources
Get latest cryptocurrency news from various sources
Get current market price and basic info for a cryptocurrency
Get portfolio performance and recommendations
Get market data for top cryptocurrencies
Get transaction history for user
Get trending topics and hashtags in crypto social media
Get trending cryptocurrencies
Recall user preferences and information
Retrieve information from user memory
Store information in user memory
Remember user preferences and information
Remove a cryptocurrency from the portfolio
Set up price alerts for cryptocurrencies
Simulate cryptocurrency purchase (demo mode - no real transactions)
Simulate cryptocurrency sale (demo mode - no real transactions)
View user's complete cryptocurrency portfolio
No output schemas documented. The source code does not show what fields are returned by any tool, only input schemas. LLMs cannot plan follow-up calls or extract needed data without knowing the response structure.
No error handling or recovery guidance. Tools have no documented failure modes, error codes, or guidance for what the LLM should do if a call fails (retry, ask user, fallback to another tool).
Parameter descriptions are minimal or missing context. Example: 'coinId' is described as 'The cryptocurrency identifier (e.g., bitcoin, ethereum)', but should clarify: is it case-sensitive? Is 'BTC' valid or must it be 'bitcoin'? What happens if the ID is invalid?
Memory tools (getUserInfo, rememberUserInfo, deleteUserMemory) lack constraints on key/value sizes, data types, and lifecycle. Can an LLM store arbitrary JSON in 'value'? What happens if a key is reused? How long is memory retained?
Portfolio and transaction tools accept optional 'userId' with a default of 'default_user'. This is a security and isolation risk, all agents using the same server would share a single user's portfolio. Multi-tenancy handling is not visible.
Numeric parameters (limit, amount, priceLimit, targetPrice) lack min/max constraints. Can an agent pass limit=1000000 or amount=999999999? Unbounded numbers risk timeouts, OOM errors, or API rejections.
alertType and other enum-like parameters (e.g., 'all', 'breaking', 'security') are documented as strings but not declared as enums. This invites LLM hallucination of invalid values.