MCP server for real-time market data, crypto prices, forex rates, and economic indicators
The server has 8 well-intentioned tools with consistent naming patterns and generally adequate descriptions. All tools start with the verb 'get_', which aligns with Arcade patterns. However, the implementation has moderate gaps: (1) several tools accept parameters with minimal schema constraints (e.g., 'symbol' is a bare string with no enum, even though only 12-15 crypto symbols are valid); (2) output schemas are not formally documented, the code returns formatted text responses, but the agent cannot plan based on structured return types; (3) error handling is generic ('Error: ...') without recovery guidance or error classification. The server is functional but would benefit from stricter input validation, structured JSON outputs, and error recovery hints.
Get the Crypto Fear & Greed Index. Values: 0-25 = Extreme Fear, 25-50 = Fear, 50-75 = Greed, 75-100 = Extreme Greed.
Get the current exchange rate between two currencies (forex). Examples: USD to EUR, GBP to JPY.
Get major US market indices: S&P 500, NASDAQ, Dow Jones, Russell 2000, and VIX.
Get a complete market overview: top 5 cryptos, major forex rates, and the Fear & Greed Index. Great for a quick daily briefing.
Get the current price of a cryptocurrency. Supports: bitcoin, ethereum, solana, cardano, ripple, dogecoin, bnb, litecoin, avalanche, polkadot, chainlink, polygon, and more.
Get the current price of any stock or ETF. Works with any ticker: AAPL, NVDA, TSLA, MSFT, AMZN, SPY, QQQ, etc.
No enum constraints on cryptocurrency symbol parameters. 'symbol' accepts a bare string (e.g., 'bitcoin', 'btc', 'ethereum', 'sol') but the description lists 12 supported names, no constraint prevents an LLM from passing an invalid ticker like 'xyz123', forcing a runtime error. Per Arcade pattern:constrained-input, enums prevent hallucinated values.
Output schemas are not formally documented. All tools return formatted text via `{ content: [{ type: 'text', text: '...' }] }`, but the LLM cannot reason about the structure of returned data (e.g., which fields are included, their types, or available for downstream use). Per Arcade pattern:tool, agents need documented return schemas to plan multi-step actions and extract the right data.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
Get the top cryptocurrencies by market cap with prices and 24h changes.
Get the top 7 trending cryptocurrencies right now on CoinGecko — what people are searching for.
Error handling is generic and non-actionable. All errors return 'Error: {message}' with no recovery guidance or error classification. Per Arcade pattern:recovery-guide, errors should tell the LLM what to do next ('User not found. Try search_users()') and classify as retryable/user-fixable/fatal.
No pagination or result limits documented. get_top_cryptos() with limit=25 and get_trending_cryptos() return potentially large lists. Per Arcade pattern:paginated-result, tools returning lists should cap results and provide next_cursor or offset/limit. Current implementation lacks guidance on maximum safe response sizes.
No validation guidance for numeric parameters. 'limit' in get_top_cryptos uses Zod constraints (.min(1).max(25)) but the description does not explicitly state the constraint. Per Arcade pattern:tool-description, parameter descriptions must state format, range, and allowed values so LLMs understand valid input without reading the schema.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present. All tools are read-only queries, but this is not formally declared. Per current MCP spec (2026-07-28), tool annotations help LLMs determine safety, retry eligibility, and composition logic.