Apple Stocks Watchlist MCP Server
Provides tools to read the Apple Stocks app's watchlist, cached quotes, stock details, charts, and portfolio analysis, and to add symbols to the watchlist via the Stocks app. All data is sourced from the local Apple Stocks app on macOS.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Apple Stocks Watchlist MCP Serverwhat's in my Apple Stocks watchlist?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Apple Stocks Watchlist — MCP Server (macOS)
An MCP server that lets an AI assistant read your pre-installed macOS Apple Stocks app — its watchlist and its cached quotes — and open symbols in the app to add them. There's a first-class shortcut for Apple (AAPL).
Everything comes from the Apple Stocks app's own local data. No external financial API, no network calls, no API keys. Quotes reflect whatever the Stocks app last synced — open the app to refresh.
⚠️ macOS only. This server reads files inside the Apple Stocks app's group container, so it does not work on Linux or Windows.
Listed on MCP Market under Apple / Businesses → https://mcpmarket.com/businesses/apple
Where the data comes from
Data | Source (inside |
Watchlist symbols |
|
Quotes (price, change, currency, market state) |
|
Company names / exchanges | the same SQLite cache ( |
This is the same "read the app's local store directly" approach used by
apple-notes-mcp.
Related MCP server: robinhood-mcp
Tools
Tool | What it does |
| List every ticker in your Apple Stocks watchlist (in order). |
| Price + daily change for one or more symbols, from the app cache. |
| Cached quotes for every symbol in the watchlist. |
| Full fundamentals: day & 52-week range, market cap, volume, P/E, EPS, beta, dividend yield, next earnings. |
| Cached intraday OHLCV chart (ASCII sparkline) + change vs previous close. |
| Apple (AAPL) fundamentals + whether it's in the watchlist. |
| Whole-watchlist analysis: up/down counts, top gainers/losers, breakdown by currency & exchange. |
| The biggest gainers and losers in the watchlist today. |
| Search the watchlist by symbol or company name. |
| Diagnose your setup (macOS? app data present? readable? Full Disk Access?). |
| Opens a symbol in the Apple Stocks app so you can add it with one click. |
Resources
Resource URI | Contents |
| The watchlist symbols, one per line ( |
| Cached quotes for every watchlist symbol ( |
Prompts
Prompt | What it does |
| Reviews the whole watchlist and highlights what's notable today. |
| Pulls fundamentals + intraday chart for one symbol and summarizes it. |
Why add_stock opens the app instead of writing the database
The watchlist lives in an encrypted CloudKit / NSKeyedArchiver binary-plist
store that the app syncs to iCloud. Editing it by hand risks corrupting your
watchlist and breaking sync. So add_stock uses the stocks:// URL scheme to
open the symbol in the Stocks app, where you add it with one tap — the app keeps
its own data consistent. (apple-notes-mcp makes the same choice: read the
store directly, don't write it.)
Requirements
macOS with the Stocks app opened at least once (so its data exists).
Node.js ≥ 18.
The system
sqlite3at/usr/bin/sqlite3(ships with macOS).Depending on your macOS version, the MCP client may need Full Disk Access to read the Apple Stocks container. If
list_watchlistreturns a "not found" error, grant Full Disk Access to your terminal / MCP client in System Settings → Privacy & Security → Full Disk Access.
Install & build
git clone https://github.com/helderpgoncalves/apple-stocks-mcp.git
cd apple-stocks-mcp
npm install # also builds via the `prepare` hookThis produces dist/index.js, the executable server entrypoint.
Connecting to a client
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"apple-stocks": {
"command": "node",
"args": ["/absolute/path/to/apple-stocks-mcp/dist/index.js"]
}
}
}Claude Code
claude mcp add apple-stocks -- node /absolute/path/to/dist/index.jsRestart the client and ask:
"What's in my Apple Stocks watchlist?"
"What's the Apple stock doing today?"
"Quote my whole watchlist."
"Add NVDA to my watchlist." → opens NVDA in the Stocks app to confirm.
Quick local test
The server speaks JSON-RPC over stdio:
printf '%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}' \
'{"jsonrpc":"2.0","method":"notifications/initialized"}' \
'{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"apple_stock","arguments":{}}}' \
| node dist/index.jsExpected (example): AAPL (Apple Inc.): 295.95 USD -3.29 (-1.10%) [preMarket]
Development & testing
npm run build # compile to dist/
npm run typecheck # type-check only
npm test # build + run the test suiteThe tests run against synthetic fixtures in test/fixtures/ (a generated
dbstore.json and two small SQLite databases) — they never touch your real
Apple Stocks data. STOCKS_TEST_MODE=1 bypasses the macOS gate so the pure
parsing/formatting logic can be tested on any OS, which is what CI does
(GitHub Actions, Linux, Node 18/20/22).
You can also point the server at custom data via env vars (used by the tests):
STOCKS_DBSTORE_PATH, STOCKS_SHARED_DB_PATH, STOCKS_SPARKLINE_DB_PATH,
STOCKS_SQLITE_BIN.
Project layout
src/
index.ts # MCP server: tools, resources, prompts
appleStocks.ts # reads the Apple Stocks app: watchlist (bplist) + quotes/details/chart (SQLite)
bplist-parser.d.ts
test/
appleStocks.test.ts
fixtures/ # synthetic data — no personal holdings
.github/workflows/ci.ymlNotes & disclaimer
All quote data is read from the Apple Stocks app's local cache and may be delayed. This project is not affiliated with Apple and is not investment advice.
The server only reads your local Apple Stocks data; the one write-style action (
add_stock) just opens the Stocks app. Nothing is sent anywhere.
License
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Tools
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/helderpgoncalves/apple-stocks-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server