使用说明
Zerodha风筝MCP服务器
该项目实现了一个MCP(模型上下文协议)服务器,该服务器与Zerodha Kite API交互,允许您执行买卖股票、获取您的持股和头寸等交易操作。
先决条件
- Node.js和npm/yarn: 请确保您已安装Node.js。此项目使用
typescript和esbuild用于建筑。 - Zerodha Kite开发人员帐户: 你需要一个Zerodha的帐户,并访问他们的开发者API。
安装说明
1.创建风筝应用程序
- 首选 https://developers.kite.trade/create 并创建一个新的应用程序。
- 在应用程序创建期间,您可以使用任何URL重定向(例如:,
https://localhost:3000/api/callback/userauth).此URL主要用于初始身份验证流程。 - 记下
API key和API secret在应用程序创建后提供。
2.在项目中配置API密钥
- 打开
index.ts文件。 - 替换
"your_api_key"使用您的实际Kite应用程序API key.const apiKey = "YOUR_ACTUAL_API_KEY"; // Replace with your API key - 重要提示: 这
apiSecret需要用于初始访问令牌生成。它在评论index.ts默认情况下,文件。您需要取消注释并添加您的API secret当第一次生成访问令牌时。// const apiSecret = "YOUR_ACTUAL_API_SECRET"; // Uncomment and replace for first-time token generation
3.获取访问令牌
访问令牌是服务器对Kite API进行身份验证调用所必需的。它需要生成一次,然后可以重复使用。
- 步骤3a:获取登录URL
- 在……里面
index.ts,暂时取消注释getLoginUrl功能:// async function getLoginUrl() { // return kc.getLoginURL(); // } - 您还需要调用此函数。您可以添加一行,如下所示
console.log(await getLoginUrl());在文件末尾或在单独的脚本中运行它。 - 运行修改后的
index.ts(例如,使用ts-node index.ts或者通过构建和运行JS输出)。这将打印一个登录URL到您的控制台。
- 在……里面
- 步骤3b:授权并获取请求令牌
- 在浏览器中打开打印的登录URL。
- 使用您的Zerodha凭据登录并授权该应用程序。
- 成功授权后,您将被重定向到指定的
redirect_url。URL将包含request_token参数(例如。,https://localhost:3000/api/callback/userauth?request_token=YOUR_REQUEST_TOKEN). - 复制此
request_token.
- 步骤3c:生成访问令牌
- 在……里面
index.ts,取消注释getAccessToken发挥作用,确保您的apiSecret设置正确:// async function getAccessToken(requestToken: string) { // const response = await kc.generateSession(requestToken, apiSecret); // console.log(response.access_token); // } - 使用以下命令调用此函数
request_token你得到了。例如,添加await getAccessToken("YOUR_REQUEST_TOKEN");或者以交互方式运行它。 - 运行脚本。这将打印您的
access_token到控制台。
- 在……里面
- 步骤3d:在中设置访问令牌
index.ts- 复制生成的
access_token. - 将其粘贴到
access_token变量inindex.ts:const access_token = "YOUR_GENERATED_ACCESS_TOKEN"; // Replace with your access token - 安全说明: 生成访问令牌后,您可以(并且应该)注释掉或删除
getLoginUrl和getAccessToken功能,尤其是apiSecret从index.ts以避免意外暴露。这access_token寿命长。
- 复制生成的
4.安装依赖项
导航到终端中的项目根目录并运行:
npm install
# or
yarn install
这将安装 kiteconnect, @modelcontextprotocol/sdk, zod以及其他必要的依赖关系。
5.建设项目
该项目使用TypeScript。你需要将其编译为JavaScript。一种常见的方法是使用 esbuild 如MCP服务器设置所建议的。如果你有 build 脚本在你的 package.json (例如。, esbuild trader.ts --bundle --outfile=dist/trader.js --platform=node --format=esm),运行:
npm run build
# or
yarn build
这通常会创建一个 dist 已编译的目录 trader.js 文件。确保输出路径与您将在MCP服务器配置中使用的路径匹配(见下文)。
运行MCP服务器
设置完成并构建项目后,可以启动MCP服务器。这 trader.ts (编译为 dist/trader.js)是MCP服务器的入口点。
当配置了像Cursor这样的MCP客户端时,服务器通过标准输入/输出(stdio)监听命令。
使用游标进行配置
要将此交易者机器人用作Cursor中的MCP服务器:
-
转到光标设置(Cmd/Ctrl+,)。
-
引导到
Extensions->MCP. -
点击
Edit in settings.json为了Model Context Protocol: Servers. -
添加以下配置:
{ "mcpServers": { "trader": { "command": "node", "args": ["/path/to/your/Zerodha-MCP/dist/trader.js"] // Ensure this path is correct } } }重要提示: 替换
/path/to/your/Zerodha-MCP/dist/trader.js与编译的绝对路径trader.js您系统上的文件。例如,如果您的用户名是user项目正在进行中Development/Zerodha-MCP,路径将是/Users/user/Development/Zerodha-MCP/dist/trader.js.
可用的MCP工具
服务器公开了以下可由MCP客户端调用的工具:
-
trader.add- 说明: 一个简单的工具来添加两个数字。
- 参数:
a(number):第一个数字。b(数字):第二个数字。
- 退货: 汇票金额
a和b.
-
trader.sellStock- 说明: 对给定股票发出市价卖出订单。
- 参数:
tradingsymbol(string):股票的交易符号(例如,“INFY”、“RELIANCE”)。quantity(number):要出售的股份数量。
- 退货: 如果交易失败,则显示确认消息“股票已成功售出”或错误。
- 注: 这使用
PRODUCT_CNC(现购自运,用于交割交易)以及EXCHANGE_NSE订单标签会自动生成并递增。
-
trader.buyStock- 说明: 对给定股票发出市场买入订单。
- 参数:
tradingsymbol(string):股票的交易符号。quantity(number):要购买的股票数量。
- 退货: 确认消息“股票购买成功”或交易失败时出现错误。
- 注: 这使用
PRODUCT_CNC和EXCHANGE_NSE订单标签会自动生成并递增。
-
trader.getPositions- 说明: 获取您当前的空缺职位。
- 参数: 没有。
- 退货: 表示您当前位置的JSON字符串。
-
trader.getHoldings- 说明: 获取您当前持有的股票(您demat账户中的股票)。
- 参数: 没有。
- 退货: 一个JSON字符串,表示您的持有量。
项目结构亮点
index.ts:包含核心Kite Connect API交互逻辑,包括设置API密钥、访问代币和买卖股票的功能,以及获取配置文件、持股和头寸。它还处理持久化orderTagCounter在……里面counter.json以确保订单标签的唯一性。trader.ts:使用以下命令设置MCP服务器@modelcontextprotocol/sdk它定义了服务器公开的工具,并将它们映射到中的函数index.ts.counter.json:在与相同的目录中自动创建index.js(或其编译输出)以存储和持久化上次使用的订单标签号。这确保了订单标签在服务器重启时是唯一的。
开发说明
- 订单标记: 系统使用增量计数器(
orderTagCounter在……里面index.ts,坚持counter.json)标记订单。这有助于识别订单。 - 错误处理: 实现了基本的错误处理(将日志记录到控制台)。您可能希望扩展此功能,以便通过MCP进行更稳健的错误报告。
- 初始设置: 这
init()功能在index.ts在以下情况下自动调用index.ts是进口的。它加载orderTagCounter并设置Kite Connect访问令牌。