提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

最近公司trae持续推进。并且一直以来对于mcp、agent概念都是了解,并没有实操过。最近想在感兴趣的方面,自己开发一个中国投资市场相关的mcp服务,这次中间相关的具体业务开发过程我会先略过,主要是走一个主链路。

一、什么是MCP

模型上下文协议(MCP)是一个创新的开源协议,它重新定义了大语言模型(LLM)与外部世界的互动方式。MCP 提供了一种标准化方法,使任意大语言模型能够轻松连接各种数据源和工具,实现信息的无缝访问和处理。MCP 就像是 AI 应用程序的 USB-C 接口,为 AI 模型提供了一种标准化的方式来连接不同的数据源和工具。
在这里插入图片描述
简单的来解释就是过去想要开发一个Manus里面很多的复杂的功能可能都比较难写。比如什么生成pdf,解析docs等。但是现在有了mcp这个通用的协议,将这些复杂的功能分离出来成为像mcp server这种通用的插件功能。所以现在开通这种复杂的agent就会变得简单。因为你可以通过接入这些mcp market上的各种mcp server,扩充你的agent能力。

更具体的可以看这一篇:一文看懂MCP

二、开发背景

2.1、开发语言

这次用的语言主要是python。这个原因主要是证券宝数据平台
的数据是python的,并且python对于mcp的开发也更方便点。

2.2、IDE编辑器

编辑器主要用的就是前文提到的ai编辑器trae,是字节出的准备对标国外cursor的AI编辑器(这个名字在内部真的是换了一次又一次,这次应该是最后一次了)。通过这次开发这个mcp更深入的熟悉对于ai编辑器的使用。

  • 对于trae主要有两个地址一个是国际版的,一个是国内版的。国际版需要翻墙,对于能够使用的模型也更多,国内的版的说是对于中文相关的api训练能力会更强,这里博主先使用国内版的。
  • trae国际版
  • trae国内版
    在这里插入图片描述

2.3、安装uv

因为MCP服务器的安装和管理主要依赖于uv,因此我们先进行下载uv。

二、MCP开发

首先本地创建一个mcp_server的文件夹,然后用trae打开这个项目。让trae读取mcp的官方github接入python sdk。进行mcp的项目初始化。

在这里插入图片描述

  • 狂点运行,让他帮你解决环境问题。然后直到他已经帮你完全初始化项目为止。
    在这里插入图片描述

对应server.py代码:

from typing import Any
import httpx
import baostock as bs  # 新增导入baostock
import pandas as pd
import logging
from typing import List, Dict

from mcp.server.fastmcp import FastMCP

# Initialize FastMCP server
mcp = FastMCP("stock_cn")

# Constants
USER_AGENT = "stock_cn-app/1.0"

@mcp.tool()
def get_historical_k_data(
    stock_code: str,
    market_type: str = "sh",
    kline_type: str = "d",  # 对应baostock的frequency参数(d=日线,w=周线等)
    limit: int = 100
) -> List[Dict[str, str]]:
    """
    获取A股历史K线数据(基于baostock)
    :param stock_code: 股票代码(如"600519")
    :param market_type: 市场类型("sh"=沪市,"sz"=深市)
    :param kline_type: K线类型("d"=日线,"w"=周线,"m"=月线)
    :param limit: 获取数据条数
    :return: K线数据字典
    """
    logger = logging.getLogger(__name__)
    try:
        # 登录baostock
        lg = bs.login()
        if lg.error_code != "0":
            logger.error(f"baostock登录失败: {lg.error_msg}")
            return {"code": 500, "message": "登录失败", "data": None}

        # 构造查询参数(参考baostock文档<mcreference link="http://baostock.com/baostock/index.php/Python_API%E6%96%87%E6%A1%A3" index="0">0</mcreference>)
        full_code = f"{market_type}.{stock_code}"
        end_date = pd.Timestamp.today().strftime("%Y-%m-%d")
        rs = bs.query_history_k_data_plus(
            full_code,
            "date,open,high,low,close,volume,amount",  # 历史行情指标参数(4.2节)
            start_date="1990-01-01",
            end_date=end_date,
            frequency=kline_type,
            adjustflag="3"  # 不复权
        )

        if rs.error_code != "0":
            logger.error(f"K线数据查询失败: {rs.error_msg}")
            return {"code": 404, "message": "查询失败", "data": None}

        # 解析数据
        data_list = []
        while rs.next():
            data_list.append(rs.get_row_data())
        result = pd.DataFrame(data_list, columns=rs.fields)
        result = result.tail(limit)  # 取最近limit条数据

        # 转换数据格式
        return {
            "code": 200,
            "message": "success",
            "data": result.to_dict("records")
        }

    except Exception as e:
        logger.error(f"获取K线数据失败: {str(e)}", exc_info=True)
        return {"code": 500, "message": f"系统错误: {str(e)}", "data": None}
    finally:
        # 登出baostock
        bs.logout()

if __name__ == "__main__":
    # Initialize and run the server
    mcp.run(transport='stdio')

这其中可能会有些module未找到的问题。可以去利用uv的相关的指令去解决。这里简单过一遍,因为这里踩坑还挺难找的。

# 初始用uv管理的python项目
uv init 

# 构造对应的虚拟环境,用完项目就会有初始环境了
uv venv

# 激活虚拟环境
source .venv/bin/activate

# 此时就可以在虚拟环境同步依赖了
uv sync

如果正常没有问题的话就可以在项目执行:mcp dev server.py

在这里插入图片描述
点击链接出来调试页面。
在这里插入图片描述
点击连接,连接至我们的server。
在这里插入图片描述
输入最近一个很火的稳定币题材股:恒宝股份的代码002104在这里插入图片描述
调用成功:
在这里插入图片描述
来看一下数据是否正确。
在这里插入图片描述
可以看到数据正确。当天开盘竞价:17.68,最高为涨停价:19.15。

三、创建Agent

调试工具后我们能利用这个mcp server进行进一步的创建agent。
在这里插入图片描述

简单便携提示词:

"""
作为专业股票分析师,请完成以下任务:
1. 数据获取:调用MCP工具获取<股票代码>(SH600000)<周期>(1mo)K线数据;
2. 技术分析:计算并分析<指标列表>(MACDRSI、成交量)3. 综合评估:结合行业动态(可选)和资金流向,给出<时间范围>(如短期/中期)趋势判断;
4. 输出格式:按以下结构返回:
   - 数据摘要:时间范围、最高/低价、成交量峰值;
   - 技术信号:各指标数值及市场含义;
   - 操作建议:基于风险的策略(如止损位设定)。
"""

在这里插入图片描述

添加刚刚编写好的mcp servers:

{
  "mcpServers": {
    "stock-cn-server": {
      "command": "uv",
      "args": [
        "--directory",
        "/Users/geminicx/ai projects/stock_cn_mcp",
        "run",
        "server.py"
      ]
    }
  }
}

“/Users/geminicx/ai projects/stock_cn_mcp”。这个为自己项目的地址。
出现这样的图标就为加载正确:
在这里插入图片描述
创建好后可以调用agent进行使用:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
可以看到agent调用了mcp的工具获取了k线数据, 分型了对应股票的成本价。

相关地址放到了:https://github.com/CxGemini/stock_cn_mcp。作为这次进行初步的入门demo,后续有兴趣应该会进一步的去进行这一块项目的编写,包括faas的部署等。感兴趣的话可以点个star后续有时间争取作为我的一个实操项目进入中长线的实盘回测~

四、 总结

总的下来来说,虽然过程可能会踩坑,但是能看到这种开发方式有很大的前景。值得一提的是trae下我的git其实也不用使用命令的,通过创建一个git的agent然后通过接入对应的mcp和账号的token。就能让他自动帮你进行各种复杂的git操作。在这里插入图片描述

教程中有问题的,或者关于mcp、量化相关的想法欢迎和博主交流~

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐