股票交易MCP服务器

一个与Zerodha Kite API交互的MCP服务器,支持股票买卖、持仓查询等功能,适用于自动化交易场景。

  • by 121yaseen
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 121yaseen/zerodha-mcp

使用说明

Zerodha风筝MCP服务器

该项目实现了一个MCP(模型上下文协议)服务器,该服务器与Zerodha Kite API交互,允许您执行买卖股票、获取您的持股和头寸等交易操作。

先决条件

  1. Node.js和npm/yarn: 请确保您已安装Node.js。此项目使用 typescript 和 esbuild 用于建筑。
  2. 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 变量in index.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服务器:

  1. 转到光标设置(Cmd/Ctrl+,)。

  2. 引导到 Extensions -> MCP.

  3. 点击 Edit in settings.json 为了 Model Context Protocol: Servers.

  4. 添加以下配置:

    {
      "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访问令牌。