MCP server for Nordnet's public market data — powered by nordnet-sdk, no credentials needed
nordnet-mcp exposes 19 read-only financial data tools with consistent naming (verb_noun pattern: search, instrument, quote, trades, etc.) and detailed descriptions (avg ~150 chars). All tools have input schemas with types and descriptions. However, output schemas are undocumented, LLMs cannot predict response structure for chaining. Error handling maps SDK exceptions to user-friendly messages but lacks recovery guidance. No tool annotations (readOnlyHint, idempotentHint). Parameter descriptions are good but some lack constraints (e.g., 'limit' has no min/max bounds). No pagination support despite tools returning lists (trades, stocklist, news). Composition is sound, tools are single-purpose and chainable via IDs.
Price time series for an instrument (resolves the order book id automatically). Periods: DAY_1, WEEK_1, MONTH_1, MONTH_3, MONTH_6, YTD, YEAR_1, ALL. Returns price points (open/high/low/last/volume), previous close and returns.
Price time series for a raw order book identifier (UUID from an instrument snapshot).
Full ETF screening profile: fees, distribution type, holdings, sector/region exposures, sustainability, risk statistics.
Full ETF screening profile for a display slug (e.g. spdr-sp-500-ucits-spyl-xeta).
Fund snapshot: NAV, fund metadata (yearly fee, risk group, SFDR article, dividend strategy, min investment).
Full fund screening profile: NAV history, holdings, fund managers, fees, minimum investment, returns.
Output schemas undocumented. LLMs cannot predict response structure (fields, types, nesting) for downstream tool chaining. E.g., does 'instrument' return a flat dict or nested objects? Are IDs always present for chaining?
No pagination support for list-returning tools (trades, stocklist, news). Default limits (100, 7, 20) are hardcoded; no offset/cursor or total_count returned. Large result sets risk context window exhaustion.
Numeric parameters lack bounds. 'limit' in search, trades, news has no min/max constraints. LLMs may pass absurd values (limit=999999) causing API strain or timeouts.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 68 | <=2025-11-25 | v2 |
Full fund screening profile for a display slug (e.g. nordnet-one-rohkea-eur-c39cc36b).
Single indicator/FX quote by display slug (e.g. eurusd, eursek, usdjpy, OMXHelsinki).
Index/FX quotes for a market list (e.g. FI_INDEX_GLOBAL, CURRENCY_GLOBAL), with sparkline data.
Full instrument snapshot: identity, quote, trading status, historical returns, key ratios, NNX metadata.
Trading sessions and status for an instrument; null when the API has no hours for it.
Trading sessions and status for a raw order book UUID; null when the API has none.
Paginated news feed for an instrument: headline, agency, type, published timestamp.
Latest price block for an instrument, with identity context. Includes last, bid/ask with resting volumes, open/close, high/low, spread, turnover, diff and diff_pct. Note: only top-of-book is public — the full order book depth ladder requires a login.
Free-text search for instruments and site pages, grouped by asset class. Returns hits with instrument_id, display_name, display_symbol, last price and one-day/year change. Feed an instrument_id into instrument/quote for the full snapshot.
Full stock screening profile: company identity, market cap, key figures with fiscal-year history, earnings reports, dividends, news.
Full stock screening profile for a display slug (e.g. wartsila-b-wrt1v-xhel).
Market overview list of stocks (risers/fallers, most traded). Default sorts by one-day change descending. Set risers_only=true to list only advancing stocks. Rows are lightweight snapshots plus company_info (report date, market cap).
Recent executed trades (the trade tape) for an instrument: price, volume, type, timestamps.
No tool annotations. All tools are read-only but lack readOnlyHint annotation. Agents cannot distinguish safe tools from destructive ones without parsing descriptions.
Error handling maps SDK exceptions to ValueError but provides no recovery guidance. E.g., 'nordnet 404: instrument not found' does not suggest calling search() first.