使用说明
IndiaQuant MCP
一个模型上下文协议(MCP)服务器,为Claude提供实时印度股市情报——实时价格、期权链、交易信号、投资组合跟踪和虚拟交易。完全基于免费API构建。
建筑
Claude Desktop通过stdio与MCP服务器通信。每个工具调用都会命中一个服务模块,该模块在发出API请求之前检查内存中的缓存。虚拟投资组合保存在SQLite中。
├── mcp/ # tool registration
├── services/ # market data, signals, greeks, scanner
├── portfolio/ # virtual trading, P&L, SQLite
├── types/ # shared interfaces
└── utils/ # cache
数据流
Claude Desktop (or any LLM of choice)
│ MCP (stdio)
▼
server.ts ──► services/* ──► yfinance / NewsAPI / Alpha Vantage
│
cache.ts (TTL per data type)
│
portfolio/db.ts (SQLite)
免费API堆栈
| 用途 | API | 限制 |
|---|---|---|
| 实时价格+OHLC+期权链 | 雅虎金融 | 无限 |
| 新闻与情绪 | NewsAPI.org | 每天100个要求 |
没有付费API。不需要经纪人帐户。
跑
先决条件
1.克隆并安装
git clone https://github.com/your-username/indiaquant-mcp
cd indiaquant-mcp
npm install
2.建造
npx tsc
输出转到 dist/.
3.连接到克劳德桌面
查找您的Claude Desktop配置文件:
| 操作系统 | 路径 |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| 窗户 | %APPDATA%\Claude\claude_desktop_config.json |
添加以下内容(用实际项目路径替换路径):
{
"mcpServers": {
"indiaquant": {
"command": "node",
"args": ["/absolute/path/to/indiaquant-mcp/dist/main.js"],
"env": {
"NEWS_API_KEY": "your_newsapi_key",
}
}
}
}
4.启动克劳德桌面
完全启动克劳德桌面。你应该看看 已编入索引的 在聊天界面的MCP工具图标下列出。
验证它是否正常工作
问克劳德:
What's the live price of RELIANCE.NS?
如果您收到实时价格,则服务器已连接并正常工作。
MCP工具
get_live_price
获取任何NSE/BSE股票的实时价格、日变化百分比和交易量。
symbol: "RELIANCE.NS"
→ { price, changePercentage, volume }
get_options_chain
返回给定到期日的所有看涨/看跌未平仓合约。
symbol: "NIFTY", expiry: "2025-06-26" (optional)
→ { calls: [{ strike, oi }], puts: [{ strike, oi }] }
analyze_sentiment
通过NewsAPI获取某个符号的最新10个新闻标题,并使用正面/负面单词词典对其进行评分。
symbol: "INFY"
→ { score: 0.45, signal: "BUY" }
generate_signal
将6个加权指标组合成一个具有置信度(0-100)的买入/卖出/持有信号。
| 指标 | 重量 |
|---|---|
| EMA 20/50交叉 | 20% |
| RSI(14) | 20% |
| MACD | 20% |
| 布林带 | 15% |
| 交易量与平均值 | 10% |
| 新闻情绪 | 15% |
symbol: "TCS.NS", frame: "1d"
→ { signal: "BUY", confidence: 72 }
get_portfolio_pnl
从SQLite读取所有未结头寸,并使用实时价格计算未实现损益。
→ { positions: [...], totalPnL, totalValue, cashBalance, netWorth }
place_virtual_trade
执行纸质交易。购买从现金中扣除;卖出可以增加现金。如果资金不足或没有头寸可供出售,则拒绝。
symbol: "HDFCBANK.NS", qty: 10, side: "BUY"
→ order confirmation with execution price and remaining cash
calculate_greeks
纯Black-Scholes实现——没有外部数学库。自动获取实时现货价格。如果没有提供,则从期权链中读取隐含波动率。
希腊人回来了:
- 德尔塔 --价格对现货变动的敏感性
- 伽马 --δ变化率
- 西塔 --每个日历日的时间衰减(₹)
- 织女星 --对1%静脉注射的敏感性
symbol: "NIFTY", strike: 24000, expiry: "2025-06-26", type: "CE"
→ { delta, gamma, theta, vega, intrinsic, timeValue, spot }
detect_unusual_activity
扫描期权链和股票交易量是否存在异常:
- OI峰值:单次打击OI>2倍平均值
- Vol/OI比值>3倍(激进定位)
- 看跌/看涨比率>1.5(看跌)或<0.5(看涨)
- 最大疼痛发作计算
- 股票交易量>2×3个月平均值
symbol: "RELIANCE"
→ { alerts: [...], summary }
scan_market
使用AND逻辑过滤器筛选6个行业的约30只NSE股票。分批运行4次,以遵守速率限制。
sector: "IT", rsi_below: 30
→ oversold IT stocks sorted by RSI ascending
支持的筛选器: sector, rsi_below, rsi_above, change_above, change_below, signal, min_volume
get_sector_heatmap
按行业返回平均日变化百分比:IT、银行、能源、快速消费品。
设计决策
为什么选择stdio传输? Claude Desktop通过stdin/stdout连接到MCP服务器。无需HTTP服务器或端口管理,更简单、更可靠,适合本地使用。
为什么选择SQLite作为投资组合? 轻量级、零配置、基于文件的持久性。无需单独的数据库进程,即可在服务器重启后继续运行。
为什么要从头开始实施Black-Scholes?
分配需要它,并且它保持了较小的依赖性足迹。这 normCdf 使用Abramowitz&Stegun有理逼近(最大误差<1.5×10⁻⁷),这对于零售期权分析来说足够准确。
缓存策略
基于Map构建的内存缓存用于所有数据类型。每个缓存条目都将值与到期时间戳(Date.now()+ttl)一起存储。读取时,如果条目已过期,则将其删除并返回null,从而触发新的获取。
| 数据 | TTL |
|---|---|
| 市场价格 | 20s |
| 选项链 | 1分钟 |
| 情绪 | 5分钟 |
| 希腊语 | 5分钟 |
在并发请求的情况下,将应用程序保持在免费API速率限制范围内。
局限性
- NewsAPI免费层:每天100个请求。情绪调用被积极缓存以保持在限制范围内。
- NSE的金融期权数据延迟约15分钟。不适合活体剥头皮。
- 如果删除SQLite文件,虚拟投资组合将重置。
scan_market随着signal过滤器运行缓慢(~10-15s)generate_signal每只股票。