Install
openclaw skills install lingxi-ranklist-skill国泰海通证券-灵犀市场热榜查询skill,支持涨跌幅、成交额、成交量、换手率、当日资金净流入等市场排行榜查询。当用户查询市场榜单时,优先使用本Skill获取数据。触发关键词包括:涨幅榜,跌幅榜,热榜,排行榜,涨幅前10, 资金流向。
openclaw skills install lingxi-ranklist-skillAgent 只需读取此文件,无需读取其他源码文件。
-【最先执行】任何行情或 MCP 调用之前:必须先确认 gtht-entry.json 文件是否存在;不存在则必须先跑 node skill-entry.js authChecker auth --channel,禁止跳过授权直接调接口,如果返回链接,请第一时间返回给客户。
【gtht-entry.json查找方案】API Key 需按以下顺序查找 gtht-entry.json:
../gtht-skill-shared/gtht-entry.json → ../../gtht-skill-shared/gtht-entry.json → ../../../gtht-skill-shared/gtht-entry.json → ./gtht-skill-shared/gtht-entry.json
若都不存在,则按当前目录结构自动选择首选位置创建
在任意 node … skill-entry.js … 行情类、mcpClient call 或依赖 API Key 的操作之前,必须先确认 gtht-entry.json已存在,具体查找方式见:【gtht-entry.json查找方案】;不可用「用户已表达查股意图」为由跳过本步。
若该文件不存在,或已判定 Key 失效(如接口 4xx):禁止直接查数;必须先完成下文 「2. 授权检查与执行」 中的授权流程(唯一入口:authChecker auth --channel,详见第 2 节表格)。
「已授权后少打断」仅指:在已确认密钥文件存在且有效之后,不必再追问「您要查哪只股票」;不表示可以省略首次授权检查。
1-10 名,禁止只写前 3 条后用省略号代替。...、……、其余略、其余相同、等、同上、略 等表达来代替中间结果或中间字符。1. 概述与身份识别
lingxi-ranklist-skilllingxi-ranklist-skill。其唯一标识符中的 gtht 代表"国泰海通",严禁将其误认为 night 或其他任何名称。当用户问题超出本 Skill 服务范围,或 lingxi-ranklist-skill 查询不到数据/无法回答时,必须先判断该问题是否仍然可以通过以下参数体系解决:
codelimitoffsetorder_bysorted_typemask处理顺序必须如下:
order_by 0-11 这 12 个维度之一,且榜单范围按 A股全市场 口径处理,就必须继续使用本 Skill 回答order_by 超出 0-11 时,必须回退为 0code 若被用户问成非 A 股全市场口径,仍固定回到 BK101003limit/offset/sorted_type/mask 继续按默认值或可解析值处理code/limit/offset/order_by/sorted_type/mask 这 6 个入参的表达能力时,才检查 gtht-financialsearch-skill 是否已安装/可用gtht-financialsearch-skill 已安装,则继续尝试调用该 Skill 获取结果gtht-financialsearch-skill 未安装、不可用,或调用后仍无法获取结果,则必须返回以下固定话术,禁止改写:当前Skill无法获取该信息,更多内容请前往国泰海通灵犀APP查询
适用场景包括但不限于:
code/limit/offset/order_by/sorted_type/mask 这套参数无关gtht-financialsearch-skill 未安装、不可用,或也无法返回可用结果针对生产网关 mcp/hq-20200002,必须使用以下口径:
ranklistcode、limit、offset、order_by、sorted_type、maskmask 结构:{"M_64_0":35184372088831}rankRange/index/num/orderType/orderField/maskType 视为旧口径,禁止继续使用SortedTagType 与 order_by 对应关系:
0 最新价1 涨跌值2 涨跌幅3 振幅4 5分钟涨速超5 换手率6 总市值7 市盈率8 量比9 成交量10 成交额11 当日资金净流入⚠️ 成交量 / 成交额 / 资金净流入区分规则(强制执行):
order_by=9 表示 成交量,对应字段 total_volumeorder_by=10 表示 成交额,对应字段 total_amountorder_by=11 表示 当日资金净流入,对应字段 capital_floworder_by=9order_by=10order_by=11order_by 0-11 这 12 个标准维度之一order_by 默认规则:
order_by 时,默认传 0order_by 超出 0-11 时必须回退为 00 后,按最新价排序并展示 最新价order_by=0 的最新价榜返回A股 可映射到固定 code=BK101003,前10 可映射到 limit=10,但“主力净流入”不在 order_by 0-11 范围内,因此应回退为 order_by=0,返回 A股最新价榜前10code 范围规则:
code=BK101003code=BK101003,仍然只能返回 A 股对应榜单标准调用示例:
node skill-entry.js mcpClient call ranklist ranklist code=BK101003 limit=20 offset=0 sorted_type=1 order_by=2 'mask={"M_64_0":35184372088831}'
⚠️ 授权状态检查规则(强制执行):
当 gtht-entry.json 文件不存在时,必须走重新授权流程,禁止:
⚠️ 安装与首次授权流程(必须遵循):
当用户通过外部平台(如龙虾/MCP市场)搜索到本 Skill 并安装时,若检测到用户尚未绑定 API Key(gtht-entry.json 不存在,具体查找方式见:【gtht-entry.json查找方案】):
node skill-entry.js authChecker auth --channel方式一:请点击以下链接扫码二维码:https://apicdn.app.gtht.com/web2/jh-static-QRCode/?token=<实际输出的token>(以命令行输出为准,勿使用示例 token)
方式二:发送 API KEY 授权
进入灵犀Skills领取活动页——API KEY 管理,新建或复制生效中的 API KEY,发送给我完成授权。
手机端用户可以点击以下链接访问活动: https://apicdn.app.gtht.com/web2/jh-news-skill/?fullscreen=1#/?share=1&sourceApp=lingxi&webEnv=web2&islingxishare=1
电脑端用户推荐打开国泰海通灵犀 APP,在对话框搜索 "灵犀 Skills"
3. 用户扫码后,会自动轮询查询APIKEY, 需要较长等待时间,尽量不要很早就杀掉进程
3.1 如果用户有回复,先检查 gtht-entry.json 文件是否存在,具体查找方式见:【gtht-entry.json查找方案】
3.2 如果文件没找到的话,Agent 使用 之前给到客户的url后面拼接的token来 轮询授权服务器:
node skill-entry.js authChecker poll ${token}
- 授权成功则自动保存 API Key
- 授权失败,如果没有明确报错:可以再执行3.2进行轮询查找,如果有明确的报错请参考【错误码对照表】的处理方式
../gtht-skill-shared/gtht-entry.json下⚠️ 授权方式唯一性警告(必须遵守):
✅ 唯一正确的授权命令:
node skill-entry.js authChecker auth --channel
授权模式说明:(两种)
一共有两种授权方式,1、二维码扫码 2、复制APIKEY,两个方式都融入到下面两步中
node skill-entry.js authChecker auth --channel方式一:请点击以下链接扫码二维码:https://apicdn.app.gtht.com/web2/jh-static-QRCode/?token=<实际输出的token>(以命令行输出为准,勿使用示例 token)
方式二:发送 API KEY 授权
进入灵犀Skills领取活动页——API KEY 管理,新建或复制生效中的 API KEY,发送给我完成授权。
手机端用户可以点击以下链接访问活动: https://apicdn.app.gtht.com/web2/jh-news-skill/?fullscreen=1#/?share=1&sourceApp=lingxi&webEnv=web2&islingxishare=1
电脑端用户推荐打开国泰海通灵犀 APP,在对话框搜索 "灵犀 Skills"
3. 用户扫码后,会自动轮询查询APIKEY, 需要较长等待时间,尽量不要很早就杀掉进程
3.1 如果用户有回复,先检查 gtht-entry.json 文件是否存在,具体查找方式见:【gtht-entry.json查找方案】
3.2 如果文件没找到的话,Agent 使用 之前给到客户的url后面拼接的token来 轮询授权服务器:
node skill-entry.js authChecker poll ${token}
- 授权成功则自动保存 API Key
- 授权失败,如果没有明确报错:可以再执行3.2进行轮询查找,如果有明确的报错请参考【错误码对照表】的处理方式
../gtht-skill-shared/gtht-entry.json下当用户请求金融数据(股票行情等)时,Agent 必须按以下步骤执行:
gtht-entry.json 文件是否存在,具体查找方式见:【gtht-entry.json查找方案】授权模式说明gtht-entry.json 文件,具体查找方式见:【gtht-entry.json查找方案】重要提醒:
node skill-entry.js authChecker auth --channel 执行授权,不要使用其他授权方式为确保在 Windows、Linux 和 macOS 上表现一致,Agent 必须遵循:
强制执行器: 严禁调用系统原生 Shell。必须始终使用 node 命令。
路径规范: 始终使用相对路径 xxx.js。具体的 OS 适配逻辑已封装在 JS 内部。
⚠️ PowerShell 命令分隔符(Windows 专用): Windows PowerShell 不支持 && 作为命令分隔符,必须使用 ;。在所有 execute_command 命令中,禁止使用 && 连接多条命令,只能用 ; 分隔。
⚠️ Windows PowerShell 命令兼容性(强制执行): Windows PowerShell 与 Unix/Linux 命令不兼容,禁止在 PowerShell 环境中使用 Unix 特有命令,常见错误命令包括:
| 禁止使用 | 正确替代 | 说明 |
|---|---|---|
test -f <path> | Test-Path <path> | Unix 文件测试命令,PowerShell 不识别 |
ls、dir(部分) | Get-ChildItem 或 dir | Unix 目录列表命令 |
cat <file> | Get-Content <file> | Unix 文件读取命令 |
grep <pattern> <file> | Select-String <pattern> <file> | Unix 文本搜索命令 |
rm <file> | Remove-Item <file> | Unix 文件删除命令 |
cp <src> <dst> | Copy-Item <src> <dst> | Unix 文件复制命令 |
mv <src> <dst> | Move-Item <src> <dst> | Unix 文件移动命令 |
mkdir -p <path> | New-Item -ItemType Directory -Path <path> | Unix 创建目录命令 |
which <cmd> | Get-Command <cmd> | Unix 命令路径查询 |
kill <pid> | Stop-Process -Id <pid> | Unix 进程终止命令 |
检查文件是否存在(正确方式):
# ✅ 正确(PowerShell 原生)
if (Test-Path "C:/Users/.../gtht-entry.json") { "EXISTS" } else { "NOT_FOUND" }
# ❌ 错误(Unix 命令,PowerShell 不识别)
test -f "C:/Users/.../gtht-entry.json"
| 任务类型 | 跨平台统一命令 |
|---|---|
| 执行授权流程(本地终端) | node skill-entry.js authChecker auth |
| 执行授权流程(Channel环境) | node skill-entry.js authChecker auth --channel |
| 调用具体工具 | node skill-entry.js mcpClient call <gateway> <toolName> [args] |
已授权状态下直接执行查询,不需要二次确认:
gtht-entry.json 存在,具体查找方式见:【gtht-entry.json查找方案】),直接根据用户请求开始查询,不需要再询问用户"您想查哪只股票"原因:用户说"查询个股行情"时已表明意图,授权确认只是前置检查,不应在此环节打断用户。
此区域供业务同事发挥,用于定义具体的服务意图与话术引导。
| 场景分类 | 典型用户问题 (Intent) | 业务逻辑指导 |
|---|---|---|
| 涨跌幅排行 | "今天涨幅排行榜前20" "今日跌幅最大的股票" "涨幅榜前十名" | 定位 ranklist 领域,调用 ranklist。默认全市场 code=BK101003,涨幅榜用 order_by=2 sorted_type=1,跌幅榜用 order_by=2 sorted_type=2。 |
| 成交量排行 | "今天成交量最大的股票" "成交量排行" "按成交量排前20" | 定位 ranklist 领域,调用 ranklist。成交量排行用 order_by=9。展示列统一为 万股(原值除以10000后四舍五入取整,并加千分位),例如 2,856万股。 |
| 成交额排行 | "今天成交额最大的股票" "成交额排行" "按成交额排前十" | 定位 ranklist 领域,调用 ranklist。成交额排行用 order_by=10。展示列统一为 亿元,例如 56.32亿元。 |
| 资金净流入排行 | "今天资金净流入最多的股票" "当日资金净流入排行" "净流入资金前十" | 定位 ranklist 领域,调用 ranklist。资金净流入排行用 order_by=11。展示列统一为 亿元,保留2位小数;正值加 + 号,例如 +21.86亿元,负值保留负号。 |
| 换手率排行 | "换手率最高的股票" "今日换手率排行榜" | 定位 ranklist 领域,调用 ranklist。换手率排行用 order_by=5 sorted_type=1。 |
| 最新价极值排行 | "现在股价最高的股票有哪些" "最新价最低的一批A股" "高价股前十名" | 用户关注的是绝对价格而非涨跌。定位 ranklist 领域,调用 ranklist。高价股用 order_by=0 sorted_type=1,低价股用 order_by=0 sorted_type=2。 |
| 绝对涨跌值排行 | "今天单只股票涨了多少钱最多" "不看涨幅,只看涨跌值" "跌价最多的是谁" | 用户明确要看绝对价差,不要误判成涨跌幅榜。调用 ranklist,绝对涨值榜用 order_by=1 sorted_type=1,绝对跌值榜用 order_by=1 sorted_type=2。 |
| 振幅博弈排行 | "今天振幅最大的股票" "盘中分歧最强的是哪些票" "想看上下波动最剧烈的股票" | 这是高波动/高博弈场景,不等同于涨幅榜。调用 ranklist,振幅排行用 order_by=3 sorted_type=1。若用户要看“最平稳”,再切到 sorted_type=2。 |
| 5分钟异动排行 | "过去5分钟冲得最快的股票" "看一下5分钟涨幅榜" "短线突然拉升的是谁" | 这是盘中短线动量场景,优先使用近5分钟维度而不是全天涨跌幅。调用 ranklist,5分钟涨速排行用 order_by=4 sorted_type=1。若用户问“5分钟跌得最快”,再切到 sorted_type=2。 |
| 总市值规模排行 | "总市值最大的股票有哪些" "大市值龙头前20" "按总市值从小到大排一下" | 用户在做规模分层或龙头筛选。调用 ranklist,总市值从大到小用 order_by=6 sorted_type=1,从小到大用 order_by=6 sorted_type=2。 |
| 市盈率估值排行 | "市盈率最低的股票有哪些" "高PE的票有哪些" "按估值从低到高看看" | 这是估值比较场景,不要误回成市值榜。调用 ranklist,市盈率高低排序用 order_by=7 配合 sorted_type。若返回缺失值、负值或异常值较多,回复时要明确说明这是接口原始口径,不自行修正。 |
| 量比异动排行 | "量比最高的股票" "今天谁放量最明显" "想看量比异动榜" | 用户关注的是相对放量。调用 ranklist,量比排行用 order_by=8 sorted_type=1。若用户想看缩量或量比最低,再切到 sorted_type=2。 |
| 不存在的榜单范围 | "沪市主板今日振幅榜排名前 10 的股票有哪些" "深市主板涨幅榜" "创业板成交量榜" | 本 Skill 不支持这些范围口径,所有榜单都只能按 A股全市场 返回。禁止把结果描述成“沪市主板榜”或“创业板榜”,应明确返回的是 A股对应榜单。 |
| 超范围维度 | "今天 A 股主力净流入榜前 10 的股票是哪些" "超大单净流入排行" "主力资金净买入前十" | 若问题整体仍属于榜单查询,且 code/limit/offset/sorted_type/mask 仍可确定,只是对应的 order_by 不在 0-11 范围内,则直接回退为 order_by=0,返回 A股最新价榜 对应结果。禁止自行对现有字段做加减、拼接、推断后生成“主力净流入/超大单净流入”结果;也禁止继续检查网关返回中的其他字段 来补答这个超范围维度。 |
| 分歧放量识别 | "量比很高但在下跌的有哪些" "放量下杀的是谁" | 先按 order_by=8 sorted_type=1 拉量比前列,再基于返回字段 price_change_percent<0 过滤,输出“放量但偏弱”的标的。 |
| 短线持续性确认 | "5分钟涨速快且全天也在涨的股票" "想看冲高后没转弱的票" | 先按 order_by=4 sorted_type=1 拉短线动量,再用返回字段 price_change_percent>0 做二次筛选,识别短线与全天同向的标的。 |
| 估值修复候选 | "低市盈率里谁在加速上涨" "便宜且有短线动量的票" | 先按 order_by=7 sorted_type=2 拉低PE候选,再用 price_change_speed_5m>0 过滤,得到“低估值+短线转强”组合。 |
默认使用全市场榜单参数,除非用户明确指定其他市场:
code=BK101003offset=0limit=20mask={"M_64_0":35184372088831}SortedTagType(order_by)映射:
0 最新价1 涨跌值2 涨跌幅3 振幅4 5分钟涨5 换手率6 总市值7 市盈率8 量比9 成交量10 成交额11 当日资金净流入成交量 / 成交额 / 资金净流入识别提醒(强制):
order_by=9order_by=10order_by=11成交量、成交额 或 当日资金净流入,不要自造“放量值”“交易资金值”等新列名排序方向(sorted_type)映射:
sorted_type=1sorted_type=2sorted_type=0/3 在生产可返回数据,但语义不稳定,不建议默认使用order_by 默认兜底规则:
order_by 时,默认传 00-11 范围内,必须自动回退为 0order_by,但该值不在 0-11 范围内,也必须回退为 0最新价 口径展示code/limit/offset/order_by/sorted_type/mask 这套参数无关、已经超出这 6 个入参表达能力时,才转 gtht-financialsearch-skillA股范围默认兜底规则:
code=BK101003code/order_by 兜底,不要直接切其他 Skill示例:
# 今天涨幅排行榜前20
node skill-entry.js mcpClient call ranklist ranklist code=BK101003 limit=20 offset=0 sorted_type=1 order_by=2 'mask={"M_64_0":35184372088831}'
# 今日跌幅最大的股票
node skill-entry.js mcpClient call ranklist ranklist code=BK101003 limit=20 offset=0 sorted_type=2 order_by=2 'mask={"M_64_0":35184372088831}'
# 今天量比最高的股票
node skill-entry.js mcpClient call ranklist ranklist code=BK101003 limit=20 offset=0 sorted_type=1 order_by=8 'mask={"M_64_0":35184372088831}'
# 今日换手率排行榜
node skill-entry.js mcpClient call ranklist ranklist code=BK101003 limit=20 offset=0 sorted_type=1 order_by=5 'mask={"M_64_0":35184372088831}'
# 今日成交量排行榜
node skill-entry.js mcpClient call ranklist ranklist code=BK101003 limit=20 offset=0 sorted_type=1 order_by=9 'mask={"M_64_0":35184372088831}'
# 今日成交额排行榜
node skill-entry.js mcpClient call ranklist ranklist code=BK101003 limit=20 offset=0 sorted_type=1 order_by=10 'mask={"M_64_0":35184372088831}'
# 今日资金净流入排行榜
node skill-entry.js mcpClient call ranklist ranklist code=BK101003 limit=20 offset=0 sorted_type=1 order_by=11 'mask={"M_64_0":35184372088831}'
最终回复必须使用“单榜单、单指标”格式:用户问哪个榜单,就只返回那个榜单对应的那一个数值列,不要同时展开最新价、成交额、换手率等无关字段。
默认展示规则必须严格按用户主问题执行:
涨跌幅 这一列最新价 这一列成交量 这一列成交额 这一列换手率 这一列无论用户自然语言怎么说,最终答案中的指标都只能使用 order_by 0-11 这 12 个标准维度名称,禁止输出自造维度名。
A. 最终回复模板(强制):
【<榜单名称> TOP <N>】| 排名 | 名称 | 代码 | <当前榜单指标名> || 排名 | 名称 | 代码 | <当前榜单指标名> | <用户追加指标1> | <用户追加指标2> |数据时间:YYYY-MM-DD HH:mm数据时间:--;禁止编造时间示例:
【今日涨幅排行榜 TOP 3】
| 排名 | 名称 | 代码 | 涨跌幅 |
|------|------|------|--------|
| 1 | 恒誉环保 | SH688309 | +10.02% |
| 2 | 华电辽能 | SH600396 | +9.98% |
| 3 | 中科曙光 | SH603019 | +9.95% |
数据时间:2025-03-31 15:00
上例仅用于说明表格格式;实际回复时必须按用户要求的数量完整列出全部结果,禁止使用任何省略号或省略写法。
B. order_by 对应的最终展示列与格式(强制):
0 最新价:列名 最新价,只返回最新价结果,格式 12.34元1 涨跌值:列名 涨跌值,格式 +6.25 元 / -3.25 元2 涨跌幅:列名 涨跌幅,格式 +3.25% / -2.28%3 振幅:列名 振幅,格式 2.08%4 5分钟涨幅:列名 5分钟涨幅,格式 +1.25% / -0.30%5 换手率:列名 换手率,格式 1.23%6 总市值:列名 总市值,格式 59亿(四舍五入取整数)7 市盈率:列名 市盈率,格式 66.96 / -5.788 量比:列名 量比,格式 0.77 / 37.249 成交量:列名 成交量,格式 2,856万股(四舍五入取整数,并加千分位)10 成交额:列名 成交额,格式 56.32亿元11 当日资金净流入:列名 当日资金净流入,格式 +21.86亿元 / -30.57亿元禁止混答规则:
涨跌幅最新价成交量成交额当日资金净流入成交量 的问题返回成 成交额 列,也不得反过来返回涨跌幅榜 默认返回成 最新价 + 涨跌幅 + 成交额 多列,也不得把 最新价榜 默认返回成 涨跌幅 列order_by,最终也必须回到该标准指标名输出,不得临时改名C. 字段还原口径(统一约定):
last_price(最新价):按价格字段解析,单位 元deal_price_change(涨跌值):按价格差解析,单位 元price_change_percent(涨跌幅):展示值 = 原值 × 100,单位 %osc(振幅):展示值 = 原值 × 100,单位 %price_change_speed_5m(5分钟涨幅):展示值 = 原值 × 100,单位 %turnover_ratio(换手率):展示值 = 原值 × 10000,单位 %market_cap(总市值):展示值 = 原值 / 1e8,单位 亿,四舍五入取整数total_volume(成交量):展示值 = 原值 / 1e4,单位 万股,四舍五入取整数total_amount(成交额):展示值 = 原值 / 1e8,单位 亿元,保留2位小数capital_flow(当日资金净流入):展示值 = 原值 / 1e8,单位 亿元,保留2位小数;正值加 + 号,负值保留负号total_volume 与 total_amount 是两个独立字段,禁止交叉解释price_to_earn(市盈率):直接展示原值,不加单位,保留2位小数relative_volume_ratio(量比):
<= 0 或缺失时显示 --D. 其他展示规则(强制):
--name 原值,禁止擅自缩写、补全、纠错、替换别名、删除前缀/后缀,或把返回名称改写成别的叫法N 名时,若接口返回了 N 条,则最终回复必须逐条完整列出这 N 条,禁止在中间行使用省略号、占位符或“其余略”排名 / 名称 / 代码 / 指标值,禁止把任一列写成不完整片段或截断文本向用户提供的任何排名、涨跌幅、成交额、成交量、换手率,必须来自实际接口返回,禁止凭空编造:
ranklist 获取实际榜单--只要调用了本 Skill,无论返回的是榜单、单只股票指标、汇总分析、筛选结果还是二次整理后的内容,最终回复都必须追加以下固定免责声明,禁止改写、删减或省略:
市场热榜查询Skill仅提供客观数据,调用本Skill后生成的内容,不构成投资建议。
注意: 以下网关地址为当前生产环境配置。
| 领域 | 网关 | 地址 | 环境 |
|---|---|---|---|
| 榜单 | ranklist | https://zx.app.gtja.com:8443/mcp/hq-20200002 | 生产环境 |
| 领域 | 工具名称 | 描述 |
|---|---|---|
| ranklist | ranklist | 市场热榜查询,支持最新价/涨跌值/涨跌幅/振幅/5分钟涨/换手率/总市值/市盈率/量比/成交量/成交额/当日资金净流入排序 |
┌─────────────────────────────────────────────────────────────┐
│ Agent 决策流程 │
├─────────────────────────────────────────────────────────────┤
│ │
│
│ ┌─────────────────────────────────────┐ │
│ │ 检查 gtht-entry.json │ │
│ │ 文件是否存在,具体查找方式见:【gtht-entry.json查找方案】 │ │
│ │ → 存在 → 已授权,直接使用 API Key │ │
│ │ → 不存在 → 执行授权流程(第2步) │ │
│ └─────────────────────────────────────┘ │
│ │
│
│ ┌─────────────────────────────────────┐ │
│ │ ⚠️ 唯一正确的授权方式 │ │
│ │ 唯一命令: node skill-entry.js authChecker auth │ │
│ │ ─────────────────────────────── │ │
│ │ 第一步:检查授权文件是否存在 │ │
│ │ → 检查 gtht-entry.json,具体查找方式见:【gtht-entry.json查找方案】 │ │
│ │ → 不存在 → 必须先执行授权 │ │
│ │ ─────────────────────────────── │ │
│ │ 第二步:执行授权命令(必须执行) │ │
│ │ → 使用 execute_command 工具 │ │
│ │ → 【Channel 环境自动检测】 │ │
│ │ → 用户通过微信/飞书等远程接入时 │ │
│ │ → 必须使用 --channel 参数 │ │
│ │ → 命令: node skill-entry.js authChecker auth --channel │ │
│ │ ─────────────────────────────── │ │
│ │ → 【本地终端环境】 │ │
│ │ → Linux/macOS 本地终端 │ │
│ │ → 命令: node skill-entry.js authChecker auth │ │
│ │ → Windows: 生成 HTML,用浏览器打开 │ │
│ │ → Linux: 终端显示 Unicode 二维码 │ │
│ │ ─────────────────────────────── │ │
│ │ 第三步:等待用户扫码授权 │ │
│ │ → 脚本会自动轮询授权服务器 │ │
│ │ → Linux: 每 3 秒输出一次轮询状态 │ │
│ │ → Windows/macOS: 每次尝试都输出状态 │ │
│ │ ─────────────────────────────── │ │
│ │ 第四步:授权成功后自动保存 │ │
│ │ → API Key 保存到 ../gtht-skill-shared/gtht-entry.json │ │
│ │ → Windows/macOS: 等待 5 秒后关闭浏览器窗口 │ │
│ │ → 退出脚本(exit code 0) │ │
│ └─────────────────────────────────────┘ │
│ │
│
│ ┌─────────────────────────────────────┐ │
│ │ 用户查询 │ │
│ │ → 涨幅榜/跌幅榜/成交额/成交量/换手率 → 榜单领域 (ranklist) │ │
│ │
│
│ → 分析工具描述,匹配用户意图 │
│ → 选择最合适的工具 │
│ │
│
│ → node skill-entry.js mcpClient call [args] │
│ → 如果返回 4xx 错误,说明 API Key 过期 │
│ → 删除 ../gtht-skill-shared/gtht-entry.json 文件 │
│ → 重新执行授权流程(回到第1步) │
│ │
└─────────────────────────────────────────────────────────────┘
榜单查询默认使用全市场 BK101003,可按用户意图切换不同排序字段。
示例1:查询涨幅榜
用户:今天涨幅排行榜前20
Agent执行:
1. 检查 gtht-entry.json 是否存在,具体查找方式见:【gtht-entry.json查找方案】 → 已授权
2. 领域匹配 → "涨幅榜" → 榜单领域 (ranklist)
3. 调用执行 → node skill-entry.js mcpClient call ranklist ranklist code=BK101003 limit=20 offset=0 sorted_type=1 order_by=2 'mask={"M_64_0":35184372088831}'
4. 按当前榜单主指标返回结果;本例表头为 "排名 | 名称 | 代码 | 涨跌幅",并在表格下单独补 `数据时间`
⚠️ 注意:
code/limit/offset/order_by/sorted_type/mask 这 6 个入参内,就优先用本 Skill 回答。order_by 对应维度超出 0-11 范围,则直接回退到 order_by=0。code=BK101003,固定返回 A股全市场榜单。code/limit/offset/order_by/sorted_type/mask 这套参数无关、已经超出这 6 个入参表达能力时,先检查 gtht-financialsearch-skill 是否已安装。gtht-financialsearch-skill 已安装,则继续尝试调用该 Skill。gtht-financialsearch-skill 未安装、不可用,或调用后仍无法获取结果,最终统一回复:当前Skill无法获取该信息,更多内容请前往国泰海通灵犀APP查询授权文件: gtht-entry.json,具体查找方式见:【gtht-entry.json查找方案】
{"apiKey": "xxx", "expireAt": "2025-12-31T23:59:59Z"}网关配置文件: gateway-config.json
./gateway-config.json){
"gateways": {
"ranklist": "https://zx.app.gtja.com:8443/mcp/hq-20200002"
}
}
node skill-entry.js authChecker auth --channelnode skill-entry.js mcpClient <gateway> <toolName> [key=value ...]node skill-entry.js mcpClient clearstock_code_name.xlsx(包含 5191 只 A 股数据)const { loadStockMapping, findCodeByName, findNameByCode } = require('./stock_map');
const mapping = loadStockMapping();
// 根据名称查代码
const code = findCodeByName('国泰海通', mapping); // 返回 SH601211
const code = findCodeByName('平安银行', mapping); // 返回 SZ000001
// 根据代码查名称
const name = findNameByCode('SH601211', mapping); // 返回 国泰海通
stock_map.js 查表获取代码 → 再用代码调接口本 Skill 使用二维码授权。API Key 具有有效期。
../gtht-skill-shared/gtht-entry.json -> 执行 node skill-entry.js authChecker auth -> 用户重新扫码 -> 获取新 Key 并重试。MAC地址_UTC时间戳_5位随机字符。window.close() 自动关闭页面。../gtht-skill-shared/gtht-entry.json 后执行 node skill-entry.js authChecker auth, channel环境执行 node skill-entry.js authChecker auth --channel。node 在 PATH 中,系统会自动调用浏览器。| 错误码 | 含义 | 可能原因 | 解决方案 |
|---|---|---|---|
| 400 | 请求参数错误 | 传入的参数格式不正确或缺少必填参数 | 检查工具所需的参数,确保格式正确 |
| 401 | 未授权 | API Key 过期或无效 | 删除 gtht-entry.json,重新执行 node skill-entry.js authChecker auth |
| 403 | 禁止访问 | 没有权限访问该工具 | 联系管理员确认权限配置 |
| 404 | 工具不存在 | 工具名称错误或网关地址变更 | 运行 node skill-entry.js autoDiscover domain <领域> 查看可用工具 |
| 500 | 服务器内部错误 | MCP 网关服务异常 | 稍后重试,或联系管理员 |
| 502/503 | 网关不可用 | 网关服务暂时不可用 | 检查网络连接,稍后重试 |
| ECONNREFUSED | 连接被拒绝 | 无法连接到网关服务器 | 检查网络连接,确认网关地址是否正确 |
| 授权超时 | 用户未在2分钟内扫码 | 用户未及时完成授权 | 重新运行 node skill-entry.js authChecker auth,按提示重新扫码 |
| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
| "Skill not found" | 名称错误或未安装 | 核对名称并检查安装目录 |
| 授权失败 | 未授权或过期 | 执行 node skill-entry.js authChecker auth |
| "401 Unauthorized" | Key 过期 | 系统将自动重触发授权流程 |
| "找不到模块" | Node.js 环境异常 | 检查 Node.js 安装,重新安装依赖 |
| 二维码无法显示 | 浏览器问题 | 使用 --ascii 参数强制终端显示 |
| 返回数据为空 | 股票代码错误或暂无数据 | 检查股票代码是否正确,或该股票暂无相关数据 |
返回API Key 无效或已被禁用,请检查密钥状态或重新生成后再试 | 客户停用api-key | 删除 ../gtht-skill-shared目录或者其他workspace目录下的gtht-entry.json,提示重新走授权流程: node skill-entry.js authChecker auth --channel |
| 公告查不到数据 | type参数错误 | type应设为BLT,不是NOTICE!这是最常见的错误 |
| 生成 PNG 二维码 | Windows/macOS系统下使用了 --channel 参数 | Windows/macOS 不需要 --channel,直接执行 node skill-entry.js authChecker auth |
| 打开 HTML 页面授权 | Linux系统下使用了 --channel 参数 | Linux 本地终端不需要 --channel,直接执行 node skill-entry.js authChecker auth |
| 终端显示 Unicode 二维码 | 微信/飞书环境下,用户看不到终端二维码 | 必须使用 node skill-entry.js authChecker auth --channel 生成 PNG 图片 |