sip-advisor-mcp
README.md
# Market-Aware SIP Timing Advisor — FastMCP (workshop)
A ~180-line Python MCP server that turns live NSE index data into an SIP
step-up / pause recommendation. Built for the mfAPIs × SunitechAI webinar.
**Design:** the server owns no data. Raw NIFTY 50 PE and OHLC rows come from the
MF Engine REST API; the valuation-percentile, price-trend and SIP-rule logic
live here in Python. That split is the teachable part.
| Tool | What it does |
|---|---|
| `get_nifty_valuation_context` | current PE + percentile + z-score vs 10y history → **cheap / fair / expensive** |
| `get_nifty_trend` | DMA50/200, distance from 52w high/low, 1/3/6m returns → **uptrend / sideways / downtrend** |
| `recommend_sip_action` | band (+ trend) → **pause / continue / step_up** + suggested new amount |
## Setup
```bash
cd workshop/sip-advisor-mcp
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # then paste MFAPI_TOKEN
```
`MFAPI_TOKEN` is a JWT `access-token` for a partner / investor / admin user.
Get it from the zinni-app browser session (DevTools → Application → Local
Storage, or the Network tab) or a login API call. It is **not** the MCP static
token — the REST endpoints use normal user auth.
## Run
```bash
# stdio — for Claude Desktop
python server.py
# HTTP — for ChatGPT developer mode / remote clients (serves :8000/mcp)
MCP_TRANSPORT=http python server.py
```
Quick check without an LLM:
```bash
pip install fastmcp # includes the CLI
fastmcp run server.py --transport http &
npx @modelcontextprotocol/inspector # connect to http://localhost:8000/mcp
```
## Connect to Claude
**Claude Desktop** — merge `claude_desktop_config.example.json` into
`~/Library/Application Support/Claude/claude_desktop_config.json` (fix the
absolute path + token), restart Claude Desktop.
**Claude Code**
```bash
claude mcp add sip-advisor -- python /abs/path/workshop/sip-advisor-mcp/server.py
# set MFAPI_TOKEN in the shell that launches claude, or via --env
```
## Connect to ChatGPT
Run in HTTP mode, expose it (`cloudflared tunnel --url http://localhost:8000`
or `ngrok http 8000`), then **Settings → Connectors → Advanced → Developer
mode → Add** the `https://…/mcp` URL. Regular ChatGPT connectors need
`search`/`fetch` tools; this server works via **developer mode** or the
Responses API only.
## Demo script
> "I run a ₹10,000/month NIFTY 50 SIP. Given where the market is, should I step
> it up, hold, or pause?"
The model chains `get_nifty_valuation_context` → `get_nifty_trend` →
`recommend_sip_action(band, trend, 10000)` and explains the call with the PE
percentile, the trend, and the `as_of` date.
## Note on data freshness
The prod NSE OHLC / valuation tables can lag the live market by weeks. The
tools return `as_of` — always read it out in the demo, and fix the ingestion
in the data repo before going live.
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues