MCP server providing financial market data from finmap.org
finmap-mcp demonstrates solid definition quality with consistent naming, comprehensive parameter schemas, and clear descriptions across all 9 tools. All tools follow the verb_noun pattern (list_, get_, search_, rank_, analyze_). Descriptions range 150-250 chars, well within the 10-1024 baseline and close to the 194-char production average. Parameter schemas are complete with enums, type constraints, and min/max bounds. However, output schemas are not documented in the tool definitions, only inferred from API responses. Error handling is basic with no recovery guidance. Tool composition is clean (single responsibility), and all parameter names match expected input types. The main weakness is absence of actionable error messages and output schema documentation visible in tool registration.
Return aggregated statistics for a stock exchange on a specific date, including total market capitalization, trading volume, total traded value, number of trades, and sector-level market breakdown.
Return aggregated metrics for each sector in a stock exchange, including sector market capitalization, price change percentage, trading volume, traded value, number of trades, and number of companies in the sector. Optionally filter for a single sector.
Return business description and background information for a US-listed company by ticker. Supported exchanges: NASDAQ, NYSE, and AMEX.
Return detailed trading metrics for a single stock ticker on a specific exchange and trading date, including price open, last sale price, price change percentage, trading volume, traded value, number of trades, and market capitalization.
Return all business sectors available on a specific exchange and trading date. Each sector includes the number of companies in that sector.
Output schemas not documented in tool registration. LLMs cannot predict response structure, they must call the tool blindly. This violates pattern:tool and wastes tokens on parsing unstructured results.
No error recovery guidance. When an invalid ticker, date, or exchange is passed, responses presumably fail with basic errors. Descriptions should hint at recovery: 'If ticker not found, try search_exchange_companies() first.'
Pagination not explicitly exposed in tool definitions. list_exchange_sectors and list_sector_companies likely return unbounded lists. No limit/offset or next_cursor parameters visible, risking context window exhaustion on large exchanges.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | B | 70 | <=2025-11-25 | v2 |
| 2026-03-09 | C | 66 | - | v1 |
Return company tickers and names grouped by sector for an exchange on a specific trading date. Optionally filter results by a single sector.
Return metadata for all supported stock exchanges in the Finmap dataset, including exchange ID, exchange name, country, currency, earliest available historical data date, and update frequency.
Return companies ranked by a selected market metric on a specific exchange and date. Supported metrics: market capitalization, price change percentage, trading volume, traded value, and number of trades. Results can be limited and optionally filtered by sector.
Search for companies on a specific exchange by partial ticker symbol or company name. Results are ranked by relevance using ticker and name similarity.
Date parameters (year, month, day) are split across three separate fields with independent validation (month 1-12, day 1-31). Better: single ISO-8601 date parameter with format constraint, or documented guidance that agents should validate date consistency.
No tool annotation hints (readOnlyHint/destructiveHint/idempotentHint). All tools are read-only and idempotent, but LLMs cannot infer this. Explicit annotations would enable safer agent planning and prevent redundant cache-busting retries.