Local Stock Analyst MCP
# Local Stock Analyst MCP (stdio)
Local TypeScript MCP server for Claude Desktop that exposes stock-analysis tools using:
- Finnhub as the primary provider
- Alpha Vantage as fallback
- local indicator calculation fallback for RSI and MACD
The server supports:
- `stdio` mode for local Claude Desktop integration (default)
- `HTTP` mode for cloud hosting (for example, Render)
## Tools
- `get_stock_price`
- `get_quote`
- `get_company_profile`
- `get_candles`
- `get_stock_news`
- `get_rsi`
- `get_macd`
- `get_key_financials`
Each tool validates input with `zod`, formats output consistently, and includes an informational disclaimer.
## Requirements
- Node.js 20.x (recommended for Render stability)
- npm
- API key for at least one provider:
- Finnhub: `FINNHUB_API_KEY`
- Alpha Vantage: `ALPHAVANTAGE_API_KEY`
## Setup
1) Install dependencies:
```bash
npm install
```
2) Create env file from template:
```bash
copy .env.example .env
```
3) Add your API keys to `.env`.
## Build and Run
Build:
```bash
npm run build
```
Start locally (stdio MCP mode):
```bash
npm start
```
Start in HTTP mode (Render-style):
```bash
set MCP_TRANSPORT=http
set PORT=3000
npm start
```
HTTP endpoints:
- MCP endpoint: `/mcp`
- health check: `/healthz`
## Claude Desktop (Windows) Configuration
Open your Claude Desktop config file:
- `%APPDATA%\Claude\claude_desktop_config.json`
Add/update:
```json
{
"mcpServers": {
"local-stock-analyst": {
"command": "node",
"args": ["D:/mcpserverdemo/mcplocalstock/build/index.js"],
"env": {
"FINNHUB_API_KEY": "YOUR_FINNHUB_KEY",
"ALPHAVANTAGE_API_KEY": "YOUR_ALPHA_VANTAGE_KEY"
}
}
}
}
```
Notes:
- Use absolute paths in `args`.
- Forward slashes are safe on Windows JSON paths.
- Restart Claude Desktop after saving config.
## Deploy on Render
Use a **Web Service** deployment.
1) Push this project to GitHub.
2) In Render, create a new Web Service from your repo.
3) Configure:
- Build Command: `npm install && npm run build`
- Start Command: `npm start`
4) Add environment variables:
- `MCP_TRANSPORT=http`
- `FINNHUB_API_KEY=...` (optional but recommended)
- `ALPHAVANTAGE_API_KEY=...` (optional fallback)
- `PORT` is auto-provided by Render.
5) Deploy.
After deploy, verify:
- `https://<your-service>.onrender.com/healthz` returns `{"status":"ok"}`
- MCP server endpoint is `https://<your-service>.onrender.com/mcp`
## Quick Test Prompts in Claude
- "Call `get_stock_price` for `MSFT`."
- "Call `get_candles` for `MSFT`, interval `D`, from `1704067200`, to `1735689600`, limit `5`."
- "Call `get_rsi` for `MSFT`, interval `D`, from `1704067200`, to `1735689600`."
## Troubleshooting
- **No tools visible in Claude**
- Check JSON validity of `claude_desktop_config.json`.
- Confirm `build/index.js` exists (`npm run build`).
- Fully restart Claude Desktop.
- **Auth errors**
- Verify API keys in config `env` or local `.env`.
- **Rate-limit errors**
- Retry later, reduce call frequency, or use higher-tier keys.
- The server automatically attempts Alpha Vantage fallback after Finnhub failures.
## Logs
- Claude Desktop logs are usually in `%APPDATA%\Claude\logs`.
- Server startup/errors are written to stderr by the MCP process.
TDQS
Scored across 8 tools
Most tools are clearly distinct, targeting different data types like candles, profiles, financials, indicators, quotes, news, and prices. However, get_quote and get_stock_price could be confused as both provide price-related information, with some overlap in purpose (e.g., quote includes price data). The descriptions help differentiate them, but an agent might misselect between these two for basic price queries.
All tools follow a consistent verb_noun pattern with 'get_' prefix, such as get_candles, get_company_profile, and get_key_financials. This predictability makes it easy for agents to understand and use the toolset without confusion from mixed naming conventions.
With 8 tools, the server is well-scoped for a local stock analyst purpose, covering key aspects like price data, financial metrics, technical indicators, and news. Each tool earns its place by addressing a specific need in stock analysis without being overly sparse or bloated.
The toolset provides good coverage for stock analysis, including data retrieval for prices, financials, indicators, and news. Minor gaps exist, such as the lack of tools for updating or managing data (e.g., no set or delete operations), but agents can work around this as the focus is on read-only analysis. Core workflows are well-supported.