FastAPI backend for AI persona chat with SQLite database, featuring native tool-calling loop with Brave Search, Solana wallet integration, and autonomous agent orchestration
This MCP server exhibits significant quality gaps across naming, descriptions, schema completeness, and error handling. Of 14 tools, only 2 (brave_web_search, solana_propose_swap) have complete, well-formed descriptions with actionable guidance. Most tools lack parameter-level descriptions entirely, and 3 tools (wallet_get_balances, solana_trade_history, execute_swap) have NO visible input schemas. Naming is inconsistent: generic names like 'web_search', 'execute_swap' lack verb clarity; duplicate/overlapping tools (web_search vs brave_web_search vs image_search vs video_search vs news_search) force LLM disambiguation overhead. No tool annotations (readOnlyHint/destructiveHint) are declared despite clear risk stratification. Error handling guidance is absent from all descriptions. Output schemas are entirely undocumented.
Search the web for CURRENT or RECENT information using Brave Search API. Only use this when you need information that is: - Current/recent (prices, news, events from 2024-2025) - Time-sensitive (weather, stock prices, election results) - Not in your training data (recent developments) DO NOT use for: - Math calculations (2+2, percentages, etc.) - Definitions of common terms (blockchain, API, etc.) - General knowledge (history, geography, basic concepts) - How-to questions that don't need current data
Execute a swap transaction (user_confirmed source only, blocked from agent source)
Fetch and extract readable content from a URL using trafilatura for boilerplate-free article extraction
Search for images on the internet
Search for news articles and current events
Execute a confirmed swap transaction on Solana (user_confirmed source only)
THREE tools have NO visible input schema (wallet_get_balances, solana_trade_history, execute_swap). LLMs cannot determine what parameters to pass.
FIVE search tools (web_search, image_search, video_search, news_search, brave_web_search) exist with overlapping intent. LLMs must disambiguate during planning, wasting reasoning cycles. No clear guidance on when to use each.
Most tools lack per-parameter descriptions. E.g., solana_get_quote has params 'from_token', 'to_token', 'amount' but LLMs cannot tell if amount is in base units or decimals, or what precision is required. Violates pattern:tool-description.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 48 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 52 | - | v1 |
Get a quote for a Solana token swap from Jupiter DEX
Propose a swap transaction on Solana (requires user confirmation before execution)
Check Relative Strength Index (RSI) technical indicator for a Solana token
Retrieve the trade history of a Solana wallet
Search for videos on the internet
Create a new Solana wallet with guided setup
Get the current balance of a Solana wallet
Generic web search tool for retrieving current information from the internet
NO error handling guidance in any description. When solana_execute_swap fails (e.g., insufficient balance, slippage exceeded), LLM has no recovery path. Should state: 'If insufficient balance, call wallet_get_balances. If slippage error, retry with tighter bounds.'
NO tool annotations despite clear risk classification. solana_execute_swap is marked IRREVERSIBLE but has no destructiveHint annotation. execute_swap, solana_get_quote are marked READ_ONLY but have no readOnlyHint. Agents cannot see which tools are safe to retry.
execute_swap appears to be a duplicate/alias of solana_execute_swap with NO schema or description visible. This creates confusion, LLM cannot determine if it's an alternative transport, an internal name, or a deprecated variant.
Output schemas are NEVER documented. E.g., solana_get_quote likely returns a quote_id, expiration, rate, fee, but the definition shows none of this. LLMs cannot plan downstream calls (e.g., propose_swap) without knowing what fields are returned.
web_search, image_search, video_search, news_search all have minimal descriptions (< 50 chars), under the 194 char baseline for production tools. No guidance on when to use, what format is returned, or how results are ranked.
Parameter naming inconsistency: solana tools use 'from_token'/'to_token', but no enum constraints visible. Token values 'SOL', 'USDC', 'USDT' are only hinted in descriptions, not enforced. LLM may hallucinate 'ETH' or 'BTC'.