Skip to main content
Glama
Sauravmehto

Local Stock Analyst MCP

by Sauravmehto
README.md
# 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

B3.4/5.0

Scored across 8 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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.