Higress stock-helper MCP Server:基于 REST-to-MCP 将云市场股票行情 API 暴露给 AI 的完整实现
【免费下载链接】higress🤖 AI Gateway | AI Native API Gateway项目地址: https://gitcode.com/GitHub_Trending/hi/higress
stock-helper 是 Higress 仓库中mcp-servers目录下基于REST-to-MCP机制实现的 MCP Server 示例:它把阿里云云市场上"股票实时行情查询"类 API(覆盖 A 股、港股、美股、全球指数、内外盘期货与外汇)转换为 21 个 MCP 工具,让 AI Agent 可以通过标准的tools/list/tools/call协议直接获取 K 线、报价、排行等行情数据。本文基于 mcp-stock-helper 中文文档、mcp-server.yaml 与 api.json 三个核心文件展开,带你完整掌握其订阅配置、工具参数体系与底层请求/响应模板的实现原理。
一、背景:什么是云市场 API MCP 服务
按照 README_ZH.md 的定义:
- 阿里云云市场是生态伙伴的交易服务平台,为合作伙伴提供覆盖上云、商业化和售卖的全链路服务,帮助客户高效获取、部署和管理优质生态产品。其 API 服务涵盖应用开发、身份验证与金融、车辆交通与物流、企业服务、短信与运营商、AI 应用与 OCR、生活服务等多个类目。
- 云市场 API 依托 Higress 提供 MCP 服务:用户只需在云市场完成订阅并获取 AppCode,再把 AppCode 配置到 Higress MCP Server 中,即可将云市场 API 无缝集成进 MCP 工具生态。
对 stock-helper 而言,其上游数据源就是云市场上【聚美智数】的"股票实时行情查询"API。这一点可以从 api.json 的 OpenAPI 3.0.1 定义中确认:该文件声明了 19 个POST接口(路径形如/finance/a-shares-kline、/finance/hk-stocks-price),请求体统一为application/x-www-form-urlencoded,响应为application/json,与 mcp-server.yaml 中 21 个工具的requestTemplate.url一一对应。
二、准备工作:订阅 API 并获取 AppCode
文档给出的接入步骤是本文所有配置的前提:
- 进入云市场 API 详情页,订阅该 API(可优先使用免费试用);
- 使用阿里云账号登录云市场用户控制台,查看已订阅 API 服务的AppCode,并配置到 Higress MCP Server 的配置中。注意:订阅 API 服务后获得的 AppCode 对该账号订阅的所有 API 服务是相同的,一个 AppCode 即可访问全部已订阅服务;
- 云市场用户控制台会实时展示已订阅的预付费 API 服务可用额度,免费试用额度用完后可以重新订阅。
拿到 AppCode 后,它在配置体系中的位置就是下面server.config.appCode:
server: name: stock-helper config: appCode: "" # 填入你在云市场获取的 AppCodeserver.name必须与插件内注册的 MCP Server 名一致(REST-to-MCP 的机制详见 MCP Server 实现指南),网关据此把请求路由到正确的 Server。使用 MCP Server 类插件需要Higress 2.1.0 及以上版本(见 mcp-server 插件说明)。
三、工具总览:21 个行情工具的参数体系
stock-helper 覆盖了股票、期货与外汇三大市场的多类查询能力。以下参数说明完整继承自 README_ZH.md,并依据 mcp-server.yaml 补全了type(K 线周期)等枚举值和必填/可选标记。
3.1 A 股(4 个工具)
| 工具 | 用途与场景 | 参数(必填) |
|---|---|---|
| A股K线 | 提供 A 股不同时间周期(1 分钟、5 分钟、日 K 线等)的 K 线数据,用于技术分析、交易策略制定、历史数据回测 | symbol(必填):品种代码,如sh688193,交易所标识需小写置于数字前;type(必填):K 线类型,1/5/15/30/60/120为分钟级,240日 K、1200周 K、7200月 K、86400年 K;limit:返回条数,默认 10;ma:返回 MA 均线,可选5,10,15,20,25,30,可不传 |
| A股K线复权 | 提供 A 股复权后的 K 线数据,用于长期投资分析、基本面分析 | fuquan(必填):复权状态,0不复权、1前复权、2后复权;symbol(必填)、type(必填,复权接口枚举为1/5/15/30/60/101日 K/102周 K/103月 K/104季度/105半年/106年 K)、limit默认 10 |
| A股报价 | A 股实时报价,用于实时监控、快速交易决策 | symbol(必填):股票代码,英文逗号分割,如sz000002,bj430047,可一次查询多只 |
| A股排行 | 按涨跌率、成交量等条件排序的排行榜,用于发现热点股票、市场趋势分析 | market(必填):hs_a沪深 A 股、hs_b沪深 B 股、hs_bjs北交所、kcb科创板、cyb创业板、hs沪深所有(AB 股全包含);sort(必填):changeRate涨跌率、volume成交量、value成交额、amplitude振幅、turnOver换手率、volumeRatio量比、pe市盈率、pb市净率、totalShare总市值,以及changes_5m/aov_5m/turnover_5d等 5 分钟、5 日、20 日数据;asc:0倒序(由大到小)、1正序,默认 0;limit:每页条数,最大 100,默认 10;page:页码,默认 1 |
3.2 全球指数(2 个工具)
| 工具 | 用途与场景 | 参数 |
|---|---|---|
| 全球指数K线 | 全球指数不同周期(日 K、周 K、月 K 等)K 线数据,用于全球市场分析、资产配置 | symbol(必填):指数品种代码,详见云市场代码表;type(必填):240日 K、1200周 K、7200月 K、21600季 K、43200半年 K、86400年 K;limit默认 10 |
| 全球指数报价 | 全球指数实时报价,用于实时监控、快速决策 | symbol(必填):指数品种代码,详见代码表 |
3.3 内盘期货(3 个工具)
| 工具 | 用途与场景 | 参数 |
|---|---|---|
| 内盘期货K线 | 内盘期货不同周期 K 线数据,用于期货市场分析、交易策略制定 | symbol(必填):期货品种代码;type(必填):0日 K、1/5/30/60/120/240分钟级;limit默认 10 |
| 内盘期货合约 | 提供内盘期货合约信息,用于合约选择、风险管理 | symbol(必填):期货品种代码 |
| 内盘期货报价 | 内盘期货实时报价(含五档盘口、持仓量等),用于实时监控 | symbol(必填):期货品种代码 |
注:yaml 中该工具名实际拼写为
chinna-futures-contract(见 mcp-server.yaml 第 431 行),调用时需使用配置中的原始名称。
3.4 外盘期货与外汇(5 个工具)
| 工具 | 用途与场景 | 参数 |
|---|---|---|
| 外盘期货K线 | 外盘期货不同周期 K 线数据 | symbol(必填)、type(必填,枚举同内盘期货)、limit默认 10 |
| 外盘期货合约 | 外盘期货合约信息,用于合约选择、风险管理 | symbol(必填):期货品种代码 |
| 外盘期货报价 | 外盘期货实时报价(含买卖量、持仓量等) | symbol(必填):期货品种代码 |
| 外汇K线 | 外汇不同周期 K 线数据,用于外汇市场分析、交易策略制定 | symbol(必填):品种代码,如FXINDEX;type(必填):0日 K、1/5/15/30/60/120/240分钟级;limit默认 10 |
| 外汇报价 | 外汇实时报价,用于实时监控、快速决策 | symbol(必填):品种代码,如FXINDEX,CNYRUB,支持逗号分割多币种 |
3.5 港股(3 个工具)
| 工具 | 用途与场景 | 参数 |
|---|---|---|
| 港股K线 | 港股不同周期 K 线数据,用于港股市场分析、交易策略制定 | symbol(必填):如08026;type(必填):1/5/15/30/60/120分钟级,240日 K、1200周 K、7200月 K、21600季 K、43200半年 K、86400年 K;limit默认 10 |
| 港股报价 | 港股实时报价(含 52 周高低、市盈率等) | symbol(必填):以英文逗号分割,如08026,02203 |
| 港股排行 | 港股排行榜,用于发现热点股票、市场趋势分析 | sort(必填):目前仅支持changeRate涨跌率排序;asc:0倒序、1正序,默认 0;limit最大 100、默认 10;page默认 1 |
3.6 美股(4 个工具)
| 工具 | 用途与场景 | 参数 |
|---|---|---|
| 美股K线 | 美股不同周期 K 线数据 | symbol(必填)、type(必填,枚举同港股 K 线)、limit默认 10 |
| 美股品种 | 提供美股品种信息,用于品种选择、风险管理 | market:市场,如美交所、纽交所、纳斯达克 |
| 美股报价 | 美股实时报价(含盘后价格、EPS、股息率等) | symbol(必填):英文逗号分割,如INTC,AAPL |
| 美股排行 | 美股排行榜 | market(必填):all全部美股、tech科技股、china中概股、star明星股;sort(必填):changeRate涨跌率、volume成交量、value成交额、totalShare总市值;asc默认 0;limit最大 100、默认 10;page默认 1 |
四、配置深度解析:mcp-server.yaml 的 REST-to-MCP 结构
mcp-server.yaml 是整个 stock-helper 的核心交付物,它不需要写一行 Go 代码,纯靠声明式配置完成"REST API → MCP 工具"的转换。以china-stock-candlestick(A 股 K 线)为例,其完整结构如下:
server: name: stock-helper config: appCode: "" tools: - name: china-stock-candlestick description: 中国A股K线查询 args: - name: limit description: 返回条数,默认10 type: string position: body - name: symbol description: 股票代码,交易所标识需要小写后放在数字之前 type: string required: true position: body - name: type description: k线类型,1:1分钟,5:五分钟;15:15分钟;30:30分钟,60:60分钟,120:120分钟,240:日K,1200:周K,7200:月K,86400:年K type: string required: true position: body requestTemplate: url: https://jmqqgphqcx.market.alicloudapi.com/finance/a-shares-kline method: POST headers: - key: Content-Type value: application/x-www-form-urlencoded - key: Authorization value: APPCODE {{.config.appCode}} - key: X-Ca-Nonce value: '{{uuidv4}}' responseTemplate: prependBody: |+ # API Response Information Below is the response from an API call. ... ## Response Structure > Content-Type: application/json - **code**: 返回码,详见返回码说明 (Type: integer) - **data**: (Type: object) - **data.list[].close**: 当前收盘价 (Type: string) - **data.list[].day**: 数据时间 (Type: string) ... ## Original Response各字段的作用可逐条对应到源码与文档:
args:定义 MCP 工具的入参。required: true会进入工具inputSchema的required列表(对照 api.json 中各接口required: ["symbol", "type"]的定义完全一致);position: body表示参数放入请求体。对application/x-www-form-urlencoded请求,框架会把 args 渲染进 form body。requestTemplate:声明式构造上游 HTTP 请求。模板引擎是GJSON Template(Go template 语法 + GJSON 路径语法,内置全部 70+ 个 Sprig 函数),支持:{{.config.appCode}}:读取server.config下的配置值——这正是 AppCode 注入认证头的位置;{{.args.xxx}}:读取 MCP 调用时传入的工具参数;{{uuidv4}}:内置模板函数,为每次请求生成随机X-Ca-Nonce防重放头(云市场 API 的鉴权要求)。
responseTemplate.prependBody:在原始 JSON 响应之前拼接一段"响应结构说明"。每个工具的 prependBody 都内置了该接口全部字段的中文字典(例如 A 股 K 线的close/day/high/low/ma_price5等),最后以## Original Response结尾接原始 JSON。这是面向 LLM 的关键设计:让模型在读到原始数据前先理解每个字段的含义与类型,显著提升 AI 对行情数据的解析准确性。
从源码结构看,这一机制实现在 rest_server.go:ResponseTemplate结构体定义了Body、PrependBody、AppendBody三个字段(约第 79 行),并明确校验"PrependBody/AppendBody 不能与 Body 同时使用"(约第 208-210 行);工具调用时执行result = PrependBody + rawResponse + AppendBody(约第 912-913 行)。rest_server_test.go 中的TestPrependBodyAndAppendBody等用例验证了该拼接逻辑与"同时指定 Body 与 PrependBody 时报错"的边界行为。stock-helper 的全部 21 个工具统一采用prependBody(字段字典)+ 原始响应的模式,是这一机制的典型应用。
五、请求链路:从 MCP 调用到云市场 API
把配置、实现与协议串起来,一次完整的工具调用链路如下:
- 发现:AI 客户端向 Higress 发送 MCP
tools/list,网关根据 WasmPlugin 配置返回stock-helper下 21 个工具的名称、描述与inputSchema(schema 即由args渲染而来); - 调用:客户端发送
tools/call,携带如{"name": "china-stock-price", "arguments": {"symbol": "sz000002,bj430047"}}; - 请求构造:REST Server 按
requestTemplate渲染url/method/headers/body,注入Authorization: APPCODE <你的AppCode>与随机X-Ca-Nonce,向云市场上游接口发出POST application/x-www-form-urlencoded请求; - 响应加工:上游返回
{"code": 200, "msg": "成功", "taskNo": "...", "data": {...}}后,框架在 raw JSON 前拼上该工具专属的字段字典(prependBody)作为 MCP 工具结果返回给 AI; - 网关能力复用:整条链路运行在 Higress 数据面内,因此认证、限流、审计日志、可观测性等网关统一能力同样覆盖 MCP 工具调用(见 MCP Server 实现指南 中关于网关托管 MCP Server 收益的说明)。
以 api.json 中港股报价接口的示例响应为例,data以股票代码为 key(如08026、02203),每个对象包含price(实时价格)、changeRate(涨跌率)、52week_high/52week_low(52 周高低)、pe(市盈率)、update_time(数据时间戳)等字段——这与 yaml 中china-hongkong-price的 prependBody 字段说明逐一对应,code=200表示成功,taskNo为本次请求号。
六、部署与调用要点
载体插件:REST-to-MCP 能力内置于 MCP Server 插件。可将 stock-helper 的工具配置放入 mcp-server 类插件的 WasmPlugin
defaultConfig中,或按 MCP Server 实现指南 的 All-in-One 模式将其注册进聚合插件。引用插件的标准 WasmPlugin 形态:apiVersion: extensions.higress.io/v1alpha1 kind: WasmPlugin metadata: name: mcp-server namespace: higress-system spec: selector: matchLabels: higress: higress-system-higress-gateway url: oci://higress-registry.cn-hangzhou.cr.aliyuncs.com/plugins/mcp-server:<version>关键约束:
server.name(stock-helper)必须与插件内注册的 Server 名完全一致,否则请求无法路由到该 Server;config.appCode为空时请求会被上游以鉴权失败拒绝,务必填入云市场 AppCode;- 若需要进一步收敛工具暴露面,可在插件配置中使用
allowTools白名单只放行部分工具(如仅保留china-stock-price、china-stock-rank); - 版本前提:MCP Server 类插件要求 Higress 2.1.0 及以上。
验证方式:部署后可用任意 MCP 客户端连接 Higress 的 MCP 端点,先
tools/list确认 21 个工具及其 schema,再发起tools/call验证真实行情返回。行情类接口依赖云市场账号额度,免费试用额度用尽后需按第二节步骤重新订阅。
七、小结
stock-helper 是 Higress REST-to-MCP 机制的教科书式样本:
- 零代码集成:21 个 MCP 工具完全由 mcp-server.yaml 声明式定义,上游契约则固化在 api.json 的 OpenAPI 3.0.1 文档中,两者可交叉验证参数与必填项的一致性;
- LLM 友好的响应设计:
prependBody为每个工具注入字段字典,解决"原始 JSON 对 AI 不友好"的核心问题,其拼接与互斥校验逻辑可在 rest_server.go 中溯源; - 完整参数体系:从 A 股复权的
fuquan、排行的market/sort枚举到 K 线type的分钟级/日/周/月/年周期编码,本文第三节表格可作为直接可查的参数手册; - 网关托管收益:AppCode 集中配置于网关侧而非散落在各应用,工具调用天然复用 Higress 的认证、限流与可观测能力,符合 MCP 实现指南 所描述的托管模式。
如果你想接入自己的云市场 API,只需参照本文的requestTemplate+responseTemplate结构编写一份 mcp-server.yaml,即可复用完全相同的机制。
【免费下载链接】higress🤖 AI Gateway | AI Native API Gateway项目地址: https://gitcode.com/GitHub_Trending/hi/higress
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考