An MCP server providing market data tools for stocks, ETFs, cryptocurrencies, economic indicators, commodities, and other financial market information
The server defines 20 tools with consistent naming patterns (verb_noun structure like searchStocks, getETF, getSuperInvestors). However, quality is uneven across the portfolio. Tools have descriptions and input schemas visible, but descriptions are frequently terse (10-50 chars) falling below the 50-200 char LLM-optimal range. Parameter descriptions are sparse or missing in many tools. Output schemas are not documented anywhere in the provided code, critical for agents planning downstream calls. Error handling and recovery guidance are absent. Security practices around API key injection appear sound (via config), but no evidence of rate limiting or permission gates. The codebase shows good structure (services, tools packages) but tool definitions lack the depth production systems require.
Calculate the future value of an investment
Search for an ETF using the symbol or the ETF name
Get the time series of the given commodity.
Get KPI metrics for a company
Get the data of the given cryptocurrency by ID.
Get the news of the given cryptocurrency by symbol.
Get the exchange rate between two currencies.
Output schemas not documented. Tools return data via handlers, but LLMs have no visibility into response structure. Agents cannot plan multi-step calls or extract required fields for downstream tools.
Tool descriptions are uniformly terse (40-70 chars). The rubric baseline is 50-200 chars for LLM optimization. Short descriptions lack context on WHEN to call tools vs similar ones (e.g., why call getSectors instead of searching directly?). Example: 'Get a list of super investors' is underdescriptive, LLMs don't know whether this returns current/historical data, top performers, insiders, or something else.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 60 | 2025-06-18+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Get an ETF using it's symbol
Get the time series of the given economic indicator.
Get the insider transactions of the stock with the given symbol.
Get the latest market news of a stock or of the market in general
Get the odds for events on Polymarket
Get stocks in a given sector
Get a list of market sectors
Get the financial statements of a stock
Get an overview of a stock including its profile and financial ratios
Get the portfolio of a super investor
Get a list of super investors
Search for cryptocurrencies by name or symbol.
Search for stocks by symbol or company name
Many parameter descriptions are missing or trivial. E.g., getETF has only 'Symbol of the ETF to return' with no detail on format (uppercase? case-insensitive?). searchStocks 'limit' has no guidance on typical values or performance impact. LLMs resort to guessing and may pass invalid or absurd values.
No error handling documentation visible. Handlers exist (e.g., HandleSearchStocks) but the code snippet is truncated. Without error messages, categorization (retryable vs. fatal), and recovery guidance (e.g., 'If no results, try a broader search'), agents cannot recover from failures gracefully.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) visible in tool definitions. All tools are marked READ_ONLY in the inventory, but this information is not exposed in the MCP schema. Agents cannot infer whether a tool is safe to call in retry loops or whether it has side effects.
Pagination parameters (limit, offset, page) present in some tools but inconsistent. searchStocks has a default 'limit=100' but no max constraint stated in description. LLMs may pass extreme values. No cursor-based pagination or result count guidance visible.
No evidence of rate limiting or timeout configuration visible. External API calls (CoinGecko, Polymarket, FRED, SEC Edgar) are made without documented SLA or backoff strategy. A runaway agent could overwhelm downstream services.