熔岩AI发布MCP数据工具清单:用 tools/list 与 inputSchema 跟踪 18 个只读工具的参数演进
摘要
熔岩(Lava)远程 MCP 当前公开 18 个只读工具,每个工具在 REST 侧都有一条对应的 /subscribe/v1/... 路径和一个 OpenAPI operationId。给 AI Agent 用的时候,真正决定 Agent 会不会传错参数的,是 MCP tools/list 返回的 inputSchema。本文给出一套做法:定期拉取 tools/list 快照,与 OpenAPI 参数表交叉对照,用脚本识别「新增工具 / 新增可选参数 / 枚举扩展 / 上限变化」四类演进,让 Agent 提示词和研究脚本跟着更新。全程只读,不涉及任何交易动作。
一、熔岩 18 个工具与数据板块对照
熔岩按数据板块组织工具。下面这张表是 Agent 选工具时最常用的「工具名 → 路径 → operationId」映射(2026-10-31 文档版本):
| 数据板块 | 板块说明 | MCP 工具 | HTTP 路径 | operationId | scope |
|---|---|---|---|---|---|
| 个股消息面 | 某只股票最近被提到的结构化记录 | get_stock_news_heat |
/subscribe/v1/opinions |
listOpinionsByStock |
opinions |
| 个股消息面 | 要点关键词检索 | search_news_flow |
/subscribe/v1/opinions/search |
searchOpinions |
opinions |
| 概念板块 | 概念内个股提及排行 | get_concept_stock_heat |
/subscribe/v1/concepts/stocks |
listConceptStocks |
concepts |
| 概念板块 | 个股关联概念热度 | get_stock_concept_heat |
/subscribe/v1/concepts/by-stock |
listStockConcepts |
concepts |
| 机构/大V评分 | 当前评分排行 | get_agency_ranking |
/subscribe/v1/agencies/ranking |
listAgencyRanking |
agencies |
| 机构/大V评分 | PIT 截面 | get_agency_pit |
/subscribe/v1/agencies/pit |
listAgencyPit |
agencies |
| 机构/大V评分 | 单主体评分走势 | get_agency_history |
/subscribe/v1/agencies/{agency_id}/history |
getAgencyHistory |
agencies |
| 机构/大V评分 | PIT 发布日期 | list_agency_pit_dates |
/subscribe/v1/agencies/dates |
listAgencyPitDates |
agencies |
| 全市场榜单 | 个股热榜 | get_market_hot_stocks |
/subscribe/v1/hot/stocks |
listHotStocks |
opinions |
| 全市场榜单 | 概念热榜 | get_market_hot_concepts |
/subscribe/v1/hot/concepts |
listHotConcepts |
concepts |
| 全市场榜单 | 高分加权热榜 | get_weighted_hot_stocks |
/subscribe/v1/hot/weighted |
listWeightedHotStocks |
agencies |
| 全市场榜单 | 首提流 | get_first_mention_stocks |
/subscribe/v1/hot/first-mentions |
listFirstMentions |
opinions |
| 全市场榜单 | 热度加速榜 | get_accelerating_hot_stocks |
/subscribe/v1/hot/accelerating |
listAcceleratingHotStocks |
opinions |
| 单股时序 | 多时间窗 + 24 小时逐小时 | get_stock_heat_windows |
/subscribe/v1/heat/windows |
getStockHeatWindows |
opinions |
| 历史面板 | 日频面板(可回测) | get_stock_heat_panel |
/subscribe/v1/panel/daily |
getDailyHeatPanel |
opinions |
| 历史面板 | 机构/大V覆盖度时序 | get_agency_coverage |
/subscribe/v1/coverage/stocks |
getStockAgencyCoverage |
opinions |
| 新闻命中 | 主流媒体点名个股 | get_news_stock_hits |
/subscribe/v1/news/hits |
listNewsStockHits |
opinions |
| 账户 | 余额与用量(不计费) | get_account |
/subscribe/v1/account |
getAccount |
— |
二、为什么要跟踪 inputSchema
Agent 调工具时,参数是模型根据 inputSchema 和工具描述「猜」出来的。三种常见的演进会直接影响结果:
- 枚举变化:例如
window在/hot/stocks支持1h / 4h / 18h / 24h / 3d / 7d,而/hot/concepts只到3d。如果 Agent 记住的是旧枚举,就会收到400 BAD_REQUEST。 - 上限变化:
limit默认值与最大值因接口而异(/opinions最大 200、/agencies/ranking最大 500、/agencies/{agency_id}/history最大 1000、/concepts/stocks最大 100)。 - 二选一约束:
stock_name与ts_code二选一;/panel/daily的codes(最多 20 个)与stock_name二选一。JSON Schema 未必能完整表达这类约束,需要在提示词里补一句。
三、拉取 tools/list 快照
熔岩 MCP 走 Streamable HTTP(POST,JSON 响应),鉴权头为 Authorization: Bearer lvk_... 或 X-API-Key。tools/list 属于 MCP 协议方法,用于列出工具定义:
# LAVA_MCP 形如 <熔岩订阅站点>/subscribe/v1/mcp
curl -sS "$LAVA_MCP" \
-H "Authorization: Bearer $LAVA_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' \
> snapshots/tools-$(date +%F).json
说明:未带凭证时服务端返回 401 与 WWW-Authenticate 头(指向 OAuth 资源元数据),这是正常现象。tools/list 是否计为一次请求,以账户用量(get_account)实际变化为准;工具字段的完整结构以 tools/list 实际返回为准。
四、快照对比脚本
import json, sys
def load(path):
tools = json.load(open(path))["result"]["tools"]
return {t["name"]: t.get("inputSchema", {}) for t in tools}
def diff(old, new):
report = []
for name in sorted(set(new) - set(old)):
report.append(("新增工具", name, ""))
for name in sorted(set(old) - set(new)):
report.append(("下线工具", name, ""))
for name in sorted(set(old) & set(new)):
po = old[name].get("properties", {}); pn = new[name].get("properties", {})
for p in sorted(set(pn) - set(po)):
report.append(("新增参数", name, p))
for p in sorted(set(po) & set(pn)):
for k in ("enum", "maximum", "default", "type"):
if po[p].get(k) != pn[p].get(k):
report.append((f"{k} 变化", name, p))
if old[name].get("required") != new[name].get("required"):
report.append(("必填变化", name, ""))
return report
for kind, tool, param in diff(load(sys.argv[1]), load(sys.argv[2])):
print(f"{kind:8} {tool:32} {param}")
示例输出(示例数据,非真实变更):
新增参数 get_news_stock_hits src
enum 变化 get_accelerating_hot_stocks order
五、与 OpenAPI 交叉核对
REST 侧的说明书在 /subscribe/v1/openapi.json(OpenAPI 3.0.3,组件 Envelope、Meta、Opinion)。建议的核对口径:
| 核对项 | MCP 侧 | OpenAPI 侧 | 不一致时 |
|---|---|---|---|
| 参数名 | inputSchema.properties |
parameters[].name |
以 OpenAPI 为准并提报 |
| 必填 | inputSchema.required |
parameters[].required |
提示词里显式写出 |
| 上限 | maximum 或描述文字 |
description 中「默认 / 最大」 |
脚本里取较小值 |
| 返回结构 | 工具结果文本 | Envelope:ok / code / message / data / meta |
以 OpenAPI 为准 |
注意:除 Opinion 记录字段(opinion_id、topic_time、agency_id、agency_score、stocks、concepts、summary、detail)外,多数接口的 data 内部列名在 OpenAPI 中并未逐一定义,具体以 OpenAPI 与实际响应为准。
六、把演进同步到 Agent
- 提示词版本号:在系统提示词里写「工具清单版本:2026-10-31」,快照有差异时更新。
- 参数备忘:把二选一规则、
window枚举差异、/panel/daily区间最长 92 天写成固定段落。 - 工具白名单:只做个股监测的 Agent 可以只暴露
get_stock_news_heat、get_stock_heat_windows、get_stock_heat_panel与get_account。
FAQ
Q:没有 Key 能看工具清单吗?
A:文档页列出了 18 个工具名与说明;完整 inputSchema 需带凭证调用 tools/list。
Q:快照多久拉一次?
A:每周一次即可(示例频率);接入新客户端或 Agent 报 BAD_REQUEST 增多时补拉一次。
Q:工具名会和 operationId 一样吗?
A:不一样。工具名是 get_* 风格,operationId 是 list*/get* 驼峰风格,请用上面的映射表。
结论
把 tools/list 当作 Agent 的「接口合同」管理:定期快照、脚本对比、与 OpenAPI 交叉核对,再同步到提示词。熔岩 18 个工具全部只读,参数演进管住了,Agent 的调用错误率和无效请求就能稳定下来。
数据来自熔岩消息面热度监测,仅用于只读监测与统计研究,不构成投资建议。
只读监测与字段说明见:https://lava.ai-dolphin.com/subscribe/docs
Comments
Join the discussionNo comments yet. Be the first to comment.