~/docs/mcp/tools/

MCP 工具参考

蜀农 API 的 MCP 端点当前提供 4 个工具,覆盖天气、知识库、图像识别与时间四类农业场景。客户端通过 tools/list 获取定义,通过 tools/call 调用。

工具清单

工具名 用途 是否需要外部输入
weather_search 查询中国城市实时天气与未来 7 日预报 城市名
knowledge_search 检索平台农技知识库,返回可溯源的原文片段 检索问题
crop_growth_recognize 作物图像识别:生育期判断、茶芽计数 图片地址或 base64
get_current_time 当前时间、星期与二十四节气 无

四个工具均为同步返回,无副作用,可安全重试。工具结果是字符串化的 JSON,需要二次解析,详见 MCP 接入。


weather_search

查询中国城市的天气。数据源为中国天气网,支持实时天气和未来 7 日预报两种模式。

参数

参数 类型 必填 说明
location string 是 城市名称(如 成都、北京)或中国天气网 9 位城市编码(如 101270101)
date string 否 传 now 返回实时天气(默认值);传 YYYY-MM-DD 返回该城市未来 7 日逐日预报

实时天气

传入 {"location": "成都", "date": "now"},返回:

{
  "city": "101270101",
  "weather": "阴",
  "temperature": "19.8℃",
  "humidity": "",
  "wind": "北风 1级",
  "updateTime": "20:50"
}
字段 说明
city 服务端解析出的城市编码
weather 当前天气现象,如 阴、多云、小雨
temperature 气温,带 ℃ 单位
humidity 相对湿度,部分站点可能为空字符串
wind 风向与风力,如 北风 1级
updateTime 数据更新时间,HH:mm 格式

7 日预报

传入 {"location": "成都", "date": "2026-10-26"}(当天),返回(节选首日):

{
  "city": "成都",
  "forecast": [
    {
      "date": "2026-10-26",
      "weather": "阴",
      "high": "20℃",
      "low": "13℃",
      "wind": "微风",
      "humidity": "23%",
      "week": "一"
    }
  ]
}

forecast 固定为 7 个元素,从当天开始排列,传入的 date 只用于触发预报模式,不影响起始日期。week 为星期的中文单字表示。

预报模式下 city 回显你传入的名称,实时模式下 city 返回内部城市编码。两个模式的字段不一致,解析时请分别处理。

使用建议

  • 优先传 9 位城市编码。城市名存在重名(如多个城市有同名区县)时,编码更准确。
  • 农事决策类问题建议同时取实时天气与 7 日预报,病虫害预警通常需要连续多日的温湿度趋势。
  • 预报数据用于趋势判断,不宜作为精确到某小时的作业依据。

knowledge_search

检索平台内置的农技知识库,采用向量 + 全文 + RRF 融合的混合检索策略,返回原文片段与分数,便于在回答中标注知识来源。

参数

参数 类型 必填 说明
query string 是 检索问题,尽量完整表达意图,如 小麦抽穗期水肥管理要点
kbCode string 否 知识库编码。指定则仅在该知识库检索,不传则检索账号已开通的全部知识库
topK integer 否 返回片段数,默认 5,上限 20
useRerank boolean 否 是否启用精排,默认 false。开启可提升相关性,但会增加响应耗时
scoreThreshold number 否 分数阈值(0~1),默认 0.7,低于阈值的片段被过滤;传 0 表示不过滤。仅对向量与精排阶段生效

返回示例(命中)

{
  "kb_code": "TEA_MANAGER_001,Strip_Intercropping,RICE_001,CORN_001,SOYBEAN_001",
  "kb_name": "茶树管理,玉米大豆带状复合种植技术,水稻,玉米,大豆",
  "query": "茶树修剪技术要点",
  "mode": "hybrid",
  "score_type": "rrf(≈1/(60+rank), 仅用于排序)",
  "total": 2,
  "counts": {"vector": 32, "fulltext": 2, "hybrid": 2, "rerank": 0},
  "sources": [
    {
      "doc_name": "茶树农事操作.docx",
      "chunk_index": 1,
      "content": "7月底驻芽期时,提示对茶树进行浅修,同步施基肥或者复合肥……",
      "score": 0.0164
    }
  ],
  "warnings": ["Rerank 精排已手动关闭"]
}
字段 说明
kb_code 本次实际参与检索的知识库编码列表,逗号分隔
kb_name 对应知识库的中文名称
query 回显检索问题
mode 命中模式:hybrid(向量 + 全文融合)或 vector(全文无命中时降级为纯向量)
score_type score 的计量方式,随 mode 变化,见下方说明
total 返回的片段数量
counts 各检索阶段的候选数量:vector、fulltext、hybrid、rerank
sources[].doc_name 来源文档名
sources[].chunk_index 片段在原文中的序号,便于回溯上下文
sources[].content 片段原文
sources[].score 相关性分数,含义由 score_type 决定
warnings 服务端提示,如精排被关闭、阈值过滤情况、降级原因

score 不是统一的相似度。hybrid 模式下 score_type 为 rrf(≈1/(60+rank), 仅用于排序),分数量级很小(常见 0.01~0.03),只能用于排序,不能按 0.7 之类的主观阈值理解;vector 模式下 score_type 为 cosine_similarity(0~1),才是 0~1 的余弦相似度。判断相关性时先看 score_type,不要跨模式比较数值大小。

未命中行为

检索的候选片段被 scoreThreshold 全部过滤时,服务端按工具调用失败返回:isError 为 true,text 是一段纯文本(不是 JSON),内容包含各阶段候选数与真实原因:

Error invoking method: knowledgeSearch
知识库未命中相关片段(候选: 向量 32 条 / 全文 0 条); score_threshold=0.7 过滤掉全部 32 条候选(最高分 0.6385), 可降低阈值或传 0 关闭过滤。可改用更具体的关键词或同义词重试, 或适当降低 score_threshold; 在获得命中内容前不要编造引用

不存在 total 为 0 且 isError 为 false 的"正常空结果"。收到这种失败时,应告知用户知识库暂无相关资料,或改用更具体的关键词重试,不要让模型编造引用。

知识库范围

账号可检索的知识库取决于开通情况,kb_code 会随检索结果返回,可以直接从中取用。常见编码示例:

编码 知识库
RICE_001 水稻
CORN_001 玉米
SOYBEAN_001 大豆
TEA_MANAGER_001 茶树管理
Strip_Intercropping 玉米大豆带状复合种植技术

问题超出已开通知识库覆盖范围时,默认阈值(0.7)会把候选全部过滤掉,从而走到上面的"未命中"分支。只有在显式传 scoreThreshold: 0 时,才会返回与问题无关的低分片段。

使用建议

  • 明确作物和生育期后再提问,query 写全"作物 + 生育期 + 农事环节"三段,召回质量明显更好。
  • 已知知识库范围时传 kbCode,避免跨库召回噪声。
  • 需要标注引用来源时,用 doc_name 与 chunk_index 定位原文,score 可作为排序置信度参考(注意 score_type)。
  • useRerank 适合跨库检索或 topK 较大的场景,单库小范围检索收益有限。
  • scoreThreshold 调得过低会放进大量噪声片段,只有在确知知识库有覆盖、但默认阈值下被滤空时才下探,不建议长期传 0。

crop_growth_recognize

作物生长周期图像识别。传入图片地址或 base64,返回识别结果。支持小麦生育期判断、茶芽计数、茶树生育期三种识别类型。

参数

参数 类型 必填 说明
imageUrl string 是 图片地址。支持公网 http/https 直链、data URI、纯 base64 字符串
recognitionType string 否 识别类型:wheat_stage(小麦生育期)、tea_count(茶芽计数)、tea_stage(茶树生育期)。不传时默认使用 wheat_stage

返回示例(茶芽计数)

{
  "status": "success",
  "data": {
    "task_type": "detect",
    "detections": [
      {
        "class_id": 0,
        "confidence": 0.9231,
        "bbox": [128, 96, 176, 148],
        "class_name": "tea"
      }
    ],
    "count": 1,
    "inference_time": 0.1187,
    "input_size": [640, 640],
    "model_id": "tea_count",
    "model_name": "茶叶数量检测",
    "recognized_result": 1,
    "original_image": "http://si-device.oss-cn-chengdu.aliyuncs.com/detections%2F20261026_134828_169552.jpg?OSSAccessKeyId=LTAI5t********&Expires=1792997308&Signature=***",
    "original_compressed": false
  },
  "message": "检测成功",
  "error": null
}
字段 说明
status success 表示链路成功;失败时该字段不存在,改为返回 error
data.task_type 推理任务类型,检测类为 detect
data.detections 检测框数组,未检出目标时为空数组
data.detections[].confidence 置信度(0~1)
data.detections[].bbox 检测框坐标 [x1, y1, x2, y2],单位为像素
data.detections[].class_name 类别名称
data.count 检出目标数量,等于 detections 的长度
data.inference_time 模型推理耗时,单位秒
data.input_size 模型输入尺寸
data.model_id / data.model_name 实际使用的模型标识与名称
data.recognized_result 结构化识别结论。tea_count 为检出数量(整数,未检出为 0);生育期类为阶段名称,未识别出结果时为 null
data.original_image 服务端转存的原图链接(http 直链,带签名),有效期约 1 小时
data.original_compressed 原图是否经过压缩

返回示例(小麦生育期)

{
  "status": "success",
  "data": {
    "task_type": "detect",
    "detections": [],
    "count": 0,
    "model_id": "wheat_stage",
    "model_name": "小麦生育时期",
    "recognized_result": null
  },
  "message": "检测成功",
  "error": null
}

recognized_result 为 null 表示模型未能在图中识别出明确的生育期,常见于拍摄距离过远、叶片遮挡严重或图片本身不是作物。此时不应向用户输出具体生育期结论。

图片要求

imageUrl 必须是服务端能直接下载到的地址:公网可访问、无重定向跳转、返回的 Content-Type 为图片类型。返回 302 跳转的 CDN 链接、需要登录态鉴权的链接、境外站点链接都可能下载失败。遇到这种情况,请先在你的环境下载图片,转成 base64 后传入。

使用 base64 时,直接传编码后的字符串,不需要 data:image/jpeg;base64, 前缀;使用 data URI 则需带完整前缀。建议单张图片不超过 4 MB。

拍摄建议:

  • 相机垂直俯拍,目标占据画面主要区域,避免强烈逆光。
  • 茶芽计数需要能分辨单芽轮廓,建议拍摄距离小于 50 厘米。
  • 生育期判断建议整株入镜,保留茎叶与穗部形态。

失败返回

图片下载失败时按工具调用失败返回:isError 为 true,text 是纯文本(不是 JSON),首行是方法名,第二行起是原因:

Error invoking method: cropGrowthRecognize
图片下载失败: HTTP 404 https://example.com/a.jpg

可能的错误内容:图片下载失败: HTTP 404(地址不可访问)、图片下载失败: HTTP 302(存在重定向)、HTTP connect timed out(服务端无法访问该域名)。

这行文本不能按 JSON 解析,客户端应读取 isError 或匹配文本前缀判断失败,不要把整段返回当作识别结果。

使用建议

  • 始终显式传 recognitionType。不传时服务端默认落到 wheat_stage,即使图片是茶树也不会自动切换。
  • 对 confidence 低于 0.5 的检测结果,建议提示用户重新拍摄,不要直接采信。
  • original_image 链接约 1 小时后失效,需要长期留存图片请自行下载转存。

get_current_time

获取当前日期时间,附带农历节气信息。适合处理"现在几点"“今天星期几”"还有几天到下一个节气"这类时间相关问题,避免模型凭训练数据推算日期出错。

参数

参数 类型 必填 说明
timezone string 否 IANA 时区标识,如 Asia/Shanghai、UTC、America/New_York,默认 Asia/Shanghai
format string 否 输出格式,采用 Java DateTimeFormatter 模式,如 yyyy-MM-dd HH:mm:ss
withSolarTerms string 否 是否附带全年二十四节气。传 true 取当年,传四位年份(如 2026)取指定年份;不传则只返回当前与下一个节气

返回示例

{
  "timezone": "Asia/Shanghai",
  "datetime": "2026-10-25 21:06:13",
  "date": "2026-10-25",
  "time": "21:06:13",
  "weekday": "星期日",
  "unix": 1792933573,
  "solar_term": "霜降",
  "solar_term_date": "2026-10-23",
  "next_solar_term": "立冬",
  "next_solar_term_date": "2026-11-07",
  "days_to_next_solar_term": 13,
  "solar_term_year": 2026,
  "solar_terms": [
    {"name": "小寒", "date": "2026-01-05"},
    {"name": "大寒", "date": "2026-01-20"}
  ]
}
字段 说明
datetime / date / time 指定时区下的日期时间、日期、时间
weekday 星期,中文全称,如 星期日
unix Unix 时间戳(秒)
solar_term 当前所处节气;尚未进入当年第一个或已过最后一个节气时按就近取用
solar_term_date 当前节气的交节日期
next_solar_term / next_solar_term_date 下一个节气名称与日期
days_to_next_solar_term 距下一个节气的天数
solar_term_year solar_terms 对应的年份
solar_terms 全年二十四节气列表,仅在传入 withSolarTerms 时返回

使用建议

  • 农事建议涉及"播种适期"“越冬前”"追肥窗口"等时间判断时,先调用该工具取当前日期与节气,再结合当地气候给建议。
  • 需要跨节气排农事计划时,传 withSolarTerms 一次性取全年节气表,减少调用次数。
  • format 只影响 datetime 字段,date、time 等字段保持固定格式。

常见问题

工具列表里只有 4 个工具,能自己扩展吗?

不能。MCP 端点的工具集由平台统一维护,不支持在端点侧注册自定义工具。如果业务需要专有函数,请在自有应用里使用 REST 接口的 tools 参数(参见 工具调用),由你的代码执行自定义函数。

调用工具需要消耗模型 Token 吗?

MCP 端点只执行工具本身,不调用大模型,因此不会产生对话类 Token 消耗。工具使用量如何计费,以控制台展示为准,参见 计费说明。

为什么工具调用成功了,返回内容却是空的?

先看 isError。工具执行失败时服务端会返回 isError: true,text 是 Error invoking method: <方法名> 开头的纯文本,不是 JSON,不要按 JSON 解析。isError 为 false 但没有内容,通常是业务侧"确实没结果":knowledge_search 的 sources 可能为空数组、crop_growth_recognize 的 detections 可能为空、生育期类的 recognized_result 可能为 null,这些不是故障。

一次会话能调用多少次工具?

单次会话没有工具调用次数上限,但端点存在频率限制。被限流时按指数退避重试,不要密集轮询。