macOS-only MCP server that reads your own pre-installed Apple Stocks app data locally (watchlist, cached quotes, fundamentals, intraday charts). Read-only, no network, no external API. Not affiliated with Apple Inc.
Strong tool naming (verb_noun pattern, clear intent) and comprehensive descriptions (avg 180 chars, well above 10-char minimum). All 12 tools have explicit schemas with proper JSON Schema types and descriptions. Input validation is present (symbol regex, minItems constraints). However, output schemas are not formally documented in the tool definitions, responses are formatted as plain text rather than structured objects. Error handling uses guard() wrapper but lacks actionable recovery guidance (e.g., 'Try stocks_doctor() to diagnose'). No tool annotations (readOnlyHint, idempotentHint) despite all tools being read-only. Parameter descriptions are solid but could be more prescriptive about format/constraints.
Open a ticker in the macOS Apple Stocks app so it can be added to the watchlist with one click. Does NOT modify the app's database directly (which would be fragile); instead uses the stocks:// URL scheme to open the app.
Get full Apple (AAPL) fundamentals from the Apple Stocks app and report whether AAPL is in the watchlist. A convenience shortcut for 'the Apple stock'.
Get the price and daily change for one or more symbols, read from the Apple Stocks app's local cache. Symbols need not be in the watchlist.
List every ticker in the macOS Apple Stocks app watchlist, read directly from the app's local data. macOS only.
Report whether this server can run here. apple-stocks-mcp is macOS-only (it reads the Apple Stocks app's local data).
Analyse the whole watchlist: how many are up/down, top gainers and losers today, and a breakdown by currency and exchange. All from the Apple Stocks cache.
Output schemas not formally documented. Tools return plain text via text() helper rather than structured objects with typed fields. LLMs cannot plan downstream calls or extract specific data fields.
Error handling lacks actionable recovery guidance. guard() wrapper catches errors and returns text, but does not suggest next steps (e.g., 'Run stocks_doctor() to diagnose macOS/Stocks availability').
No tool annotations despite all tools being read-only. Missing readOnlyHint and idempotentHint metadata that would help LLMs reason about safety and retry behavior.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | 2026-07-28+ | v2 |
Get cached quotes for every symbol in the Apple Stocks watchlist, in order.
Search the watchlist by ticker symbol or company name (case-insensitive substring). Returns matching quotes from the Apple Stocks cache.
Get the cached intraday price chart (OHLCV sparkline) for a symbol from the Apple Stocks app, with day range and change vs previous close.
Get full fundamentals for a symbol from the Apple Stocks cache: price, day & 52-week range, market cap, volume & average volume, P/E, EPS, beta, dividend yield and next earnings date.
Check the environment: are you on macOS, is the Stocks app data present, is sqlite3 available, and can the data actually be read (catches Full Disk Access problems)? Use this when other tools error.
Show the biggest gainers and losers in the watchlist today, ranked by percentage change. Data from the Apple Stocks cache.
add_stock tool description says 'Does NOT modify the app's database directly' but does not clarify that it opens the Stocks app UI for manual addition. LLM may expect the tool to complete the action, not require user interaction.
Parameter descriptions lack explicit format/constraint guidance. E.g., 'symbol' param says 'Ticker symbol, e.g. AAPL' but does not state the regex constraint (1-15 chars, alphanumeric + . - = ^) that is enforced in code.