goofish-cli
goofish-cli is an MCP server that automates Xianyu (Goofish) account operations — auth, listings, media, search, and real-time IM — for AI agents.
Authentication: import login state (
auth_login, browser auto-detect or QR), check validity (auth_status), and manually clear risk-control circuit breakers (auth_reset_guard).Item management: fetch item details (
item_get), view richer browser-based details (item_view), list your on-sale items (item_list), publish with auto category + address (item_publish), and delist/delete (item_delete).Publishing helpers: AI category recognition (
category_recommend), default shipping address (location_default), and image upload to Xianyu CDN (media_upload).Search: browser-driven keyword search resistant to anti-bot controls (
search_items).Instant messaging: list chat sessions (
message_list_chats), pull conversation history (message_history), send text or image messages (message_send), and stream live events (message / read / new_msg) over a persistent WebSocket (message_watch).Skills setup: install the built-in Claude Skills bundle into
~/.claude/skills/or a custom directory, list them, or force-overwrite (skills_install).
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@goofish-cliCheck my Xianyu login status."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
goofish-cli
闲鱼 CLI · 原生支持 MCP · 为 AI Agent 而生
Goofish (Xianyu) automation CLI · MCP-ready · Built for AI Agents
https://github.com/user-attachments/assets/ae20ae2f-ccdf-4d3e-a947-69182d4c4eff
goofish-cli 把闲鱼(Xianyu/Goofish)的核心运营能力抽成一套结构化命令,
同一份定义同时输出给四种消费者:
👨💻 人类:
goofish item get 12345 --format table🤖 AI Agent(Claude Code / Cursor / Codex):
uvx goofish-cli→ 自动注册成 MCP tool🧩 Claude Skills(v0.3):5 个内置 skill,
goofish skills install一行装到~/.claude/skills/OpenClaw:ClawHub bundle 一次安装 MCP server + 5 个 skills
架构思想来自 opencli 的 single-registry 设计。
特别鸣谢
Related MCP server: xhs-mcp-light
✨ 核心特性
🔐 17 个命令覆盖核心链路:发布、下架、查询、图片上传、AI 类目识别、默认地址、IM 收发 + 会话列表、skills 安装
📡 真·实时 IM:WebSocket 长连 + 自动重连 + 三类事件分类输出
event=message(收到消息)·event=read(已读回执)·event=new_msg(轻量通知)
🛡 内置风控护栏:账号与业务桶限流(经营 1 次/分钟、媒体 9 次/分钟)+ RGV587 自动熔断
🧠 AI-first I/O:
--format json/yaml/table/md/csv,给 LLM 喂 JSON、给人看表格⚡ 一次定义,三种入口:CLI / MCP / Skill 共享同一 registry
✅ 真实端到端验证:每个命令都跑过真实账号
🚀 60 秒上手
# 1. 安装
pip install goofish-cli # 或 uv pip install goofish-cli
# 2. 导入 cookie(从浏览器 DevTools → Application → Cookies 导出)
goofish auth login ~/Downloads/goofish-cookies.json
# 3. 验证登录态
goofish auth status
# → {"unb":"<masked-unb>","tracknick":"<masked-tracknick>","nick":"...","valid":true}
# 4. 干活
goofish item get 1045171414271
goofish message watch # 实时接收消息
goofish message send <cid> <toid> --text "在的" # 发消息不占用桌面的沙箱模式
需要运行中的本机 Docker Desktop / Docker Engine。安装支持沙箱的版本后,先在终端执行:
goofish sandbox --help
goofish sandbox start
# 手动打开输出的观察链接,默认 http://127.0.0.1:16080/vnc.html?autoconnect=1&resize=scale
goofish sandbox login # 在虚拟桌面里扫码并确认
goofish sandbox run auth status --format json
goofish sandbox run search items '机械键盘' --limit 3让 AI 客户端也使用沙箱时,将原有 goofish MCP 配置替换为:
{
"mcpServers": {
"goofish": {
"command": "goofish",
"args": ["sandbox", "mcp"]
}
}
}客户端必须能找到 goofish 和 docker;桌面客户端找不到命令时,将 command 改为 command -v goofish 输出的绝对路径,并检查客户端 PATH 中是否有 Docker。Codex 使用 TOML,见 MCP 客户端配置。不要同时保留原来的本机 Goofish server;直接运行 uvx goofish-cli 仍使用本机模式。
首次启动会下载并构建镜像。Chromium 在容器虚拟桌面里常驻,登录态保存在独立卷;命令不会自动打开宿主机浏览器。平台要求验证时,执行 goofish sandbox browse --item-id <商品ID>,在观察页面人工完成。升级后用 stop、start --rebuild 更新镜像,状态卷保留。
如果 sandbox --help 不识别命令,当前安装的发行版尚未包含沙箱功能。源码安装、完整的登录/恢复步骤和限制见沙箱指南。
🧩 Claude Skills(v0.3 新增)
v0.3 起内置 5 个 Claude Skill,装完之后 Claude Code / Cursor 里的 Agent 在识别到 闲鱼任务就会自动加载对应 skill 的知识库,不再靠 zero-shot 试错。
# 装到 ~/.claude/skills/(默认)
goofish skills install
# 或者只看有哪些 skill,不拷贝
goofish skills install --list
# 或者装到自定义目录 + 覆盖已有的
goofish skills install --dest ./skills --force5 个 skill 分工
Skill | 什么时候激活 | 核心能力 |
| 用户首次提闲鱼 / 问这工具能干啥 | 总入口,dispatch 到其他 4 个 skill |
| 发商品 / 上架 / 挂闲置 | 类目识别 → 标题 5 段式 → 风控扫描 → 图片检查 → 确认发布 |
| 回消息 / 看未读 / 议价 | 拉未读 → 意图 5 分类 → 议价三档(小刀/大刀/屠龙刀)→ 用户确认发送 |
| 发布前 / 发送前 / 被限流了 | 违禁词表、外联词正则、发布红线、x5sec 恢复指引(被其他 skill 频繁引用) |
| 店铺没流量 / 曝光掉了 | 买家视角搜索 + 历史对比 → 归因清单 + 修复建议(纯读不写) |
skill 的源文件在仓库的 skills/ 目录下(每个 skill 一个子目录,含 SKILL.md
references/*.md知识库)。也可以走 Claude Code Plugin Marketplace 安装:
claude /plugin marketplace add fancyboi999/goofish-cliOpenClaw / ClawHub
OpenClaw 2026.6.1 及以上可把本仓库作为 compatible bundle 加载。已发布到
ClawHub,安装:
openclaw plugins install clawhub:openclaw-goofish
# 登录态由用户在终端初始化,不交给 Agent 覆盖
uvx --from goofish-cli==0.6.0 goofish auth login --qr
openclaw plugins inspect goofish --json
openclaw gateway restart本地开发无需发布:
openclaw plugins install -l .
openclaw plugins inspect goofish --json重启后新会话会获得 5 个 skills,以及 goofish__auth_status、
goofish__item_get 等 MCP tools。bundle 默认不暴露需要操作者执行或会长期阻塞的
auth_login、auth_reset_guard、message_watch、skills_install。
运行 MCP server 需要 PATH 中有 uv。完整说明见
MCP 接入指南。
📟 命令详略与真实输出
$ goofish list-commands --format table命令 | 说明 | 写操作 |
| 从 JSON 文件或 cookie 字符串导入登录态 | ❌ |
| 检查登录态是否有效 | ❌ |
| 手动解除风控熔断 | ❌ |
| 查询闲鱼商品详情 | ❌ |
| 发布商品(自动识别类目 + 默认地址) | ✅ |
| 下架/删除商品 | ✅ |
| 上传图片到闲鱼 CDN | ✅ |
| AI 识别商品类目 | ❌ |
| 获取默认发布地址 | ❌ |
| 会话列表(默认 HTTP + 短时 WS,补最近消息并按活动时间倒序) | ❌ |
| 搜索闲鱼商品(浏览器路径 Playwright + 系统 Chrome) | ❌ |
| 浏览器视角看商品详情(字段完整,抗风控; | ❌ |
| 拉取会话历史消息 | ❌ |
| 发送文本/图片 | ✅ |
| 常驻 IM 长连(JSONL 输出) | ❌ |
会话读取使用真实消息时间,而非会话创建时间:
goofish message list-chats --format json
goofish message history <cid> --limit 20 --timeout 30 --format jsonlist-chats 默认 --watch-secs 5,在一个已就绪的连接中补齐真人会话的最近消息页;
--watch-secs 0 关闭 WS 会话发现,结果可能遗漏 HTTP 未返回的会话。
--timeout 限制摘要读取阶段。历史输出保留 cid、message_id 和毫秒时间 created_at,
--limit 0 保留完整翻页行为,其他正数只读最近 N 条。
metadata_status 标明摘要是当前、为空、不完整或读取失败;无法确定的时间为 null。
has_more 只代表 HTTP 分页,enumeration_complete=false 表明短时同步不能证明全部历史会话已覆盖。
接口契约与异常边界见 会话同步。
{
"unb": "<masked-unb>",
"tracknick": "<masked-tracknick>",
"nick": "闲鱼用户昵称",
"valid": true,
"h5_token_exp": "2026-04-21T20:30:00+08:00"
}$ goofish message watch实时输出(小号给主号发 3 条 + 主号读了所有消息):
{"event":"message","cid":"<masked-cid>","send_user_id":"<masked-user-id>","send_user_name":"小号昵称","send_message":"测试消息1"}
{"event":"message","cid":"<masked-cid>","send_user_id":"<masked-user-id>","send_user_name":"小号昵称","send_message":"测试消息2"}
{"event":"message","cid":"<masked-cid>","send_user_id":"<masked-user-id>","send_user_name":"小号昵称","send_message":"测试消息3"}
{"event":"read","cid":"<masked-cid>","msg_ids":["<masked-msg-id-1>","<masked-msg-id-2>","<masked-msg-id-3>"],"status":1,"ts":"<masked-timestamp>"}事件 | 字段 |
| cid · send_user_id · send_user_name · send_message · content_type |
| cid · msg_ids[] · status · ts |
| cid · msg_id · ts(服务端只推指针,需 |
自动跳过噪音:/s/para(对方正在输入)、contentType=8(会话激活心跳)。
$ goofish message send <masked-cid> <masked-user-id> \
--text "在的 claude 测试成功 ✅" --item-id 1045171414271{"ok": true, "mid": "<masked-message-id>", "cid": "<masked-cid>"}goofish item publish "男士毛呢大衣 驼色长款" \
"全新未拆封 原价 2999 现 999" ./a.png ./b.png 999 --format json流程:上传图片 → 推荐类目 → 默认地址 → 提交。已有上传收据可通过
--images-json '[{"url":"https://example.alicdn.com/image.png","width":1024,"height":1024}]'
复用,省略本地图片参数;已确认类目和地址分别通过 --category-json、--location-json
传入对应工具返回的完整 DTO。
返回 item_id、status="accepted" 和 requires_readback=true;使用
goofish item get <item_id> 和自己的商品列表确认保存。失败也保留已上传图片和准备信息;
submission_unknown 必须先核对商品列表,不自动重复发布。
发布与下架共用账号的 item.write 预算,默认 1 次/分钟;媒体上传独立计数,默认
9 次/分钟。一个多图商品只消耗一次商品预算。
🔌 接入 Claude Code(MCP)
以下为本机模式;需要隔离桌面时,使用上面的沙箱 MCP 配置,客户端位置见 MCP 接入指南。
在项目根目录 .mcp.json 配置:
{
"mcpServers": {
"goofish": {
"command": "uvx",
"args": ["goofish-cli"]
}
}
}Claude 会自动把全部命令看成 tool:mcp__goofish__item_get / mcp__goofish__item_publish / mcp__goofish__message_watch... 你在对话里直接说"帮我看下 itemId=xxx 的详情",Claude 就会调用。
🎯 项目亮点
能力 | 说明 |
11 个核心 mtop 接口 | 发布/下架/查询/图片/类目/地址/IM 全覆盖 |
CLI + |
|
MCP Server |
|
WebSocket 批量 push 全量解码 | 一帧多条消息全部还原,不丢单 |
WebSocket 自动重连 | 断线自退避重连,长跑无感知 |
已读回执 / typing / 新消息通知分类 |
|
全局限流 + 风控熔断 | 账号业务预算 + RGV587 自动熔断 |
回归验证 |
|
包分发 |
|
🗺 Roadmap
v0.1:12 个命令 + MCP + IM 三类事件
v0.2:
goofish message list-chats(会话列表 + sessionType 分类:1 真人 / 3 系统 / 6 互动 / 23 通知;--watch-secs支持合并 WSackDiff(pts=0)历史推送补齐 h5 接口漏掉的会话)v0.2:浏览器自动化链路(吸纳 OpenCLI 精华)—— Playwright + 系统 Chrome 驱动
goofish search items/goofish item view,抗风控 & 完整字段v0.2.3 / v0.2.4:session 自动续命(passport 快速进入)+
auth login --qr扫码兜底v0.3:Claude Skills 包装(5 个 skill:overview / risk-guard / publish-item / reply-buyer / shop-diagnosis)+
goofish skills installv0.4:
goofish message create-chat(主动与陌生用户建会话)v0.4:
goofish order(订单状态查询 / 发货)v0.4:历史数据落盘(SQLite / JSONL),给 shop-diagnosis 做时序归因
v0.5:支持发视频消息
🛠 开发
git clone https://github.com/fancyboi999/goofish-cli
cd goofish-cli
uv venv --python 3.11
uv pip install -e ".[dev]"
uv run pytest # 33 测全绿
uv run ruff check src tests # 零告警详细请看 CONTRIBUTING.md 和 docs/architecture.md。
⚠️ 合规声明
本工具仅用于用户自有账号的自动化运营。严禁:
欺诈 / 刷单 / 虚假交易
针对闲鱼平台的 SaaS 化转售
违反闲鱼、淘宝、阿里巴巴用户协议的行为
工具不提供:绕过滑块验证、批量设备 ID 伪造、自动化规避封号。遇到风控请人工处理(见 docs/compliance.md)。
📜 License
Available Tools
17 toolsauth_loginC
导入登录态(默认从本机浏览器 auto-detect;支持 Chrome/Edge/Brave/Safari/Firefox 等)
| Name | Required | Description | Default |
|---|---|---|---|
| qr | No | ||
| raw | No | ||
| source | No | ||
| browser | No | auto | |
| qr_timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses the default source (local browser auto-detect) and browser support, but says nothing about the credential-import being a sensitive/state-changing operation, whether it overwrites an existing session, what authentication or permissions are needed, or that a QR-code flow exists (implied only by the schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with a parenthetical qualifier — no filler or redundancy. Its brevity is efficient, though for a five-parameter credential tool it borders on under-specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. But with zero annotations, 0% parameter coverage, and a security-sensitive login-import operation, the description is far too thin to let an agent invoke this correctly or safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across five parameters, so the description must compensate. It only clarifies browser (default auto-detect plus supported values) and leaves qr, raw, source, and qr_timeout entirely unexplained in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: importing a login state (登录态), with the default acquisition path (auto-detect from the local browser). It is clear what the tool does, but it never distinguishes itself from auth_status or auth_reset_guard, which are the obvious adjacent siblings an agent must choose between.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when it runs by default (auto-detect from the local browser) and enumerates supported browsers, which is useful context. However, it gives no explicit when-to-use vs auth_status/auth_reset_guard guidance, no prerequisites, and no indication of what happens if an existing session is already present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
auth_reset_guardB
手动解除风控熔断状态
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing. For a security-sensitive mutation that disables a protective mechanism, an agent needs to know about authorization requirements, whether the reset is permanent or temporary, and what side effects follow — none of which appear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short phrase with zero filler, front-loading the action and target. It is appropriately sized for a zero-parameter tool, though it borders on under-specification rather than true conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. But for a zero-param, annotation-free mutation that resets a risk-control guard, the description omits the critical context an agent needs: authorization prerequisites, when this should be invoked, and consequences of the reset.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to document; the baseline for a parameterless tool applies. The description does not need to add anything here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource: manually clearing/releasing the risk-control circuit-breaker (guard) state. It is clearly distinct from sibling auth tools like auth_login and auth_status. However, it does not explicitly differentiate itself from those siblings or state the scope of what the reset affects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word '手动' (manually) faintly implies use when automatic recovery has not occurred, but no explicit when-to-use condition, prerequisite, or alternative (e.g., checking state via auth_status first) is given. An agent cannot confidently decide when this action is warranted versus waiting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
auth_statusA
检查登录态是否有效,返回 unb / tracknick / 昵称
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool returns login-relevant fields, but it does not explicitly state whether the operation is read-only or what happens when the login state is invalid, leaving some behavioral ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It directly states the action and the return values, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 params) and the presence of an output schema describing return values, the description is largely complete. It could be slightly enhanced by noting when to use it (e.g., before auth-dependent operations), but the core information is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, so the baseline is 4. The description does not need to add parameter details, and the schema already has no properties. The description appropriately focuses on the return information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('检查' / check) and resource ('登录态' / login state), and specifies the return fields (unb / tracknick / 昵称), which clearly distinguishes it from sibling auth tools like auth_login and auth_reset_guard.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that the tool is used to check login validity, but it does not provide explicit when-to-use context or mention alternatives such as auth_login or auth_reset_guard. No exclusions or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
category_recommendA
AI 识别商品类目,输入标题+图片返回 catId/catName
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| images_json | No | [] |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits, but it only states the basic recognition capability and return values. It does not mention whether the operation is read-only, how accuracy or error cases are handled, or any limitations or prerequisites (e.g., image format), leaving a significant transparency gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence that front-loads the core purpose and immediately states inputs and outputs. Every word contributes value, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple two-parameter tool and the existence of an output schema (which handles return value structure), the description sufficiently covers the main input-output contract. It could add a note about the optionality of images or prerequisites, but for a basic classification tool it is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does add meaning by indicating that 'title' and 'image' are the semantic inputs, which the schema titles ('Title', 'Images Json') do not convey. However, it does not clarify that title is required while images_json is optional, nor does it explain the format of images_json beyond what the schema defaults suggest.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's function: AI-based product category recognition, with explicit inputs (title and image) and outputs (catId/catName). This distinguishes it from sibling tools, which cover auth, item management, media upload, and messaging.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a product title and image are available and a category is needed, but it does not explicitly say when to prefer this over alternatives or mention any exclusions. No sibling tool offers similar category functionality, so the context is adequate but not fully spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
item_deleteB
下架/删除商品(写操作,受限流和风控护栏保护)
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states '写操作' (write operation) and mentions rate limiting and risk control protections, which adds useful context about side effects and constraints. However, it does not disclose whether the deletion is permanent or reversible, or what consequences occur beyond the operation itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact phrase that front-loads the core action and resource, followed by a brief note on operation type and protections. Every word earns its place, with no redundancy or filler. It is highly efficient and appropriately sized for a tool with one parameter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's delete/delist operation and the existence of an output schema, the description covers the basic purpose but lacks crucial contextual information. It does not mention whether the delete is soft (delist) or hard (permanent), what happens to associated data, or any side effects. It also provides no usage alternatives, making it incomplete for an agent to fully understand the tool's impact.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one required parameter, item_id, with 0% description coverage. The description does not explain the parameter's meaning or any special requirements. Although item_id is self-explanatory, the description provides no additional value beyond the schema, and the low coverage means the description should compensate but fails to do so.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action '下架/删除' (delist/delete) and the resource '商品' (item/product), making the tool's purpose unmistakable. It also distinguishes from sibling tools like item_get, item_list, and item_publish by indicating it's a delete/delist operation, which is unique among the given siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, exclusions, or scenarios where other tools like item_get or item_publish would be more appropriate. The only hint is that it's a write operation, but that's not explicit usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
item_getB
查询闲鱼商品详情(只读)
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description includes the annotation '(只读)' (read-only), which is a useful behavioral hint, but with no annotations provided, it carries the full burden of disclosure. It does not mention authentication requirements, error behavior (e.g., item not found), rate limits, or any other side effects. The single read-only note is insufficient context for an agent to anticipate tool behavior fully.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that directly communicates purpose and the read-only nature. It is front-loaded and contains no filler words, making it efficient for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple nature of the tool (one parameter, output schema exists) the description covers basic purpose, but lacks usage guidance and parameter context. The output schema presumably handles return values, but the description still leaves gaps around when to use the tool and what the item_id parameter means, making it minimally adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has only one parameter, item_id, but the description does not elaborate on what this ID represents, how to obtain it, or any validation rules. Since schema description coverage is 0%, the description should compensate, but it adds no additional semantic meaning beyond the parameter's name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: querying Xianyu item details (read-only). The verb '查询' (query) plus resource '商品详情' (item details) makes the purpose explicit. It also distinguishes from siblings like item_delete, item_publish, and item_list by specifying a read-only detail retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as item_view or item_list. The description does not mention exclusions, prerequisites, or scenarios where this tool is preferred. Users are left to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
item_listC
查看当前账号的在售商品(API 直签)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. '查看' implies a read, but nothing is said about pagination behavior, auth/permission requirements (the 'API 直签' hint is unexplained), or result limits, despite a limit parameter defaulting to 50.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the resource front-loaded and no padding. The parenthetical '(API 直签)' consumes space without conveying actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and this is a simple read-only list tool. However, with zero annotations and no mention of pagination or scope limits, the description is only minimally sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One optional parameter (limit) with 0% schema description coverage; the description never mentions it. The parameter is self-explanatory from its name and default of 50, so the gap is minor, but the description adds no meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (查看/list) and resource (在售商品, on-sale items) scoped to the current account, which distinguishes it from search_items and item_get. The trailing '(API 直签)' is opaque jargon that adds no usable clarity, and there is no explicit differentiation from item_view.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to choose this tool over search_items, item_get, or item_view. The only implicit signal is the 'current account' scope. An agent must guess at the selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
item_publishC
发布商品(自动识别类目 + 默认地址),价格单位元
| Name | Required | Description | Default |
|---|---|---|---|
| desc | Yes | ||
| price | Yes | ||
| title | Yes | ||
| images | No | ||
| delivery | No | 无需邮寄 | |
| post_price | No | ||
| images_json | No | [] | |
| category_json | No | ||
| location_json | No | ||
| original_price | No | ||
| can_self_pickup | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses two behaviors an agent could not infer: category auto-detection and default-address use, plus the yuan price unit. However, it says nothing about permissions/auth, irreversibility of publishing, failure modes (e.g., duplicate titles), or what happens to category_json/location_json params when auto-detection is claimed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single line is front-loaded and free of waste, with the two automatic behaviors and the price unit packed in compactly. For an 11-parameter mutation tool, however, this brevity crosses into under-specification rather than disciplined conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be described. But for a mutation tool with 11 parameters, 0% schema coverage, and no annotations, the description leaves most of the calling contract (non-required params, delivery enum semantics, json field formats) undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 11 parameters, so the description must compensate and largely fails. It clarifies the price unit (yuan) and implies category/location are optional due to auto-detection, but leaves images, delivery enum, post_price, original_price, can_self_pickup, and the *_json fields entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb+resource (publish an item) and adds meaningful scope: category is auto-detected and the default address is used. This is readily distinguishable from siblings like item_delete, item_get, and item_list by verb alone, though it never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance. The agent can infer that this creates a new listing, but nothing tells it how this relates to category_recommend or location_default, which the description implies are handled internally, nor any prerequisite or precondition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
item_viewB
浏览器视角查看商品详情(读取页面响应,含图片和卖家字段)
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It does disclose something useful beyond the name: the tool reads the live page response and returns image and seller fields. It says nothing about auth requirements, blocking/rate limits, failure modes when the page lacks the item, or whether the call is purely read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the retrieval mechanism and return content front-loaded in a parenthetical. No filler, though the parenthetical could be split into a clearer when-to-use statement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is not strictly required, and the description still names the notable payload fields. The critical missing piece is routing versus item_get in a sibling set that contains both, plus any note on browser-fetch fragility.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (item_id) with 0% schema description coverage; the description says nothing about its expected format (numeric ID, slug, or URL). The parameter name is largely self-explanatory, which prevents a lower score, but no format or validation guidance is added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('查看商品详情') and adds a meaningful qualifier ('浏览器视角', reading the page response) that implies a distinct retrieval mechanism. However, it never names or distinguishes itself from the sibling item_get, which likely returns the same resource via another path, so the agent must guess between them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'浏览器视角' hints that this is browser-page-based rather than API-based, but the description gives no explicit when-to-use, when-not-to-use, or alternative (item_get, search_items, item_list). The user must infer the choice from a two-character qualifier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
location_defaultB
获取账号默认发布地址
| Name | Required | Description | Default |
|---|---|---|---|
| latitude | No | ||
| longitude | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. '获取' implies a read-only 'get' operation, but it does not mention whether authentication is needed, potential side effects, or behavior when no default exists. Minimal transparency beyond the verb.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, front-loaded with the action verb and resource. Every word earns its place with no redundant details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter with an output schema, the core purpose is clear, and the output schema can cover return values. However, missing parameter semantics and usage context leave notable gaps, making this adequate but incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention latitude or longitude at all. The input schema shows defaults but not their meaning or effect on the result, so the agent has little guidance on how to use these parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description '获取账号默认发布地址' (get account's default publishing address) uses a specific verb and resource, clearly indicating the tool's purpose. It distinguishes itself from sibling tools like item_publish by focusing specifically on retrieving the default location.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, nor are there prerequisites, exclusions, or contextual hints. The description only states what it does, not when it should be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
media_uploadC
上传图片,独立媒体预算,返回可复用图片收据
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose one useful behavioral fact — the returned receipt is reusable — but says nothing about auth requirements, accepted formats, size limits, or whether uploads consume a shared quota (the '独立媒体预算' phrase hints at quota behavior without explaining it).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very short, with the core action front-loaded. However, '独立媒体预算' is an unexplained clause that occupies space without conveying actionable meaning, so not every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be described. But for a mutation/upload tool with no annotations, no documented path semantics, and no usage conditions, the description leaves too much for the agent to guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required parameter 'path', so the description must compensate and does not. An agent cannot tell whether 'path' is a local filesystem path, a URL, or a media identifier — a critical ambiguity for an upload tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (上传图片 = upload image) and adds the outcome (returns a reusable image receipt). It does not differentiate from siblings, though none of the listed siblings are competing upload tools, so the risk of misselection is low. The phrase '独立媒体预算' (independent media budget) is cryptic and adds fog rather than clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to call this versus alternatives, no prerequisites, no indication of what kind of image or workflow this fits. The agent is left to infer everything about the trigger condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
message_historyC
拉取指定 cid 会话的历史消息(翻页到底)
| Name | Required | Description | Default |
|---|---|---|---|
| cid | Yes | ||
| limit | No | ||
| timeout | No | ||
| limit_per_page | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose one real behavioral trait beyond the schema: the call auto-paginates through all pages rather than returning a single page. It says nothing about read-only safety, rate limits, or what happens on very large histories despite a timeout parameter being present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler, and the key resource (cid conversation) is front-loaded. It is arguably too terse for a four-parameter tool, but there is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is not required. However, for a tool with four undocumented parameters and zero annotations, the description omits pagination-control semantics, default behavior (limit=0, timeout=30s), and any guidance on choosing between this and the sibling message tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across four parameters, so the description must compensate and it largely does not. It clarifies only that cid identifies the conversation; the distinction between limit and limit_per_page, and the role of timeout, are left entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: pulling historical messages for a given cid conversation. This clearly separates it from message_list_chats (list conversations) and message_watch (live streaming). It does not, however, explicitly name those siblings or contrast itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus message_list_chats or message_watch, nor any prerequisites (e.g. must the cid be known/authenticated first). The parenthetical '(翻页到底)' implies a full-history fetch, but the agent must infer that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
message_list_chatsC
会话列表:HTTP + 默认短时 WS 发现,最近消息补齐并按活动时间倒序
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | ||
| fetch_num | No | ||
| watch_secs | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose non-obvious behavior beyond the schema — that the call touches HTTP and briefly opens a WebSocket by default, and that recent messages are backfilled (implying extra network work and latency). However it says nothing about permissions, rate limits, blocking duration, or whether the WS phase can be suppressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single tight line with the resource front-loaded, so there is no wasted text. The density borders on cryptic, but every clause carries information about mechanics and ordering.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, but the rest is thin: three undocumented parameters, no annotations, no guidance on choosing this over message_history or message_watch, and no statement of what the WS discovery phase costs or requires.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across three parameters (timeout, fetch_num, watch_secs) whose names alone are ambiguous. The phrase 短时 WS 发现 hints at the short watch window but never maps to watch_secs, and timeout and fetch_num are entirely unaddressed, so the description does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource and action (会话列表 = chat list) and adds scope detail: discovery over HTTP plus a default short-lived WebSocket, recent-message backfill, and activity-time descending order. That is clear enough for an agent to know what it returns, though it never distinguishes itself explicitly from siblings like message_history or message_watch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance, and no sibling is named as an alternative. An agent choosing between message_list_chats, message_history, and message_watch gets nothing beyond an implicit hint from the mention of a short WS discovery phase.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
message_sendC
向会话发送消息(text/image)。text 必填,image 走 url+wh
| Name | Required | Description | Default |
|---|---|---|---|
| cid | Yes | ||
| kind | No | text | |
| text | No | ||
| toid | Yes | ||
| item_id | No | ||
| image_url | No | ||
| image_width | No | ||
| image_height | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It discloses the requirement for text (though this conflicts with the schema where text is optional) and that images use URL+dimensions, but omits auth needs, side effects, or failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, very concise sentence that front-loads the main action. However, it lacks structure and packs multiple details awkwardly, but it is not verbose or redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 8 parameters, no annotations, and an output schema, the description is under-specified. It fails to explain core parameters like cid and toid, making it incomplete for reliable tool invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only clarifies text and image parameters (text required, image uses url+wh), but leaves cid, toid, item_id, and dimension fields unexplained, which is insufficient for 8 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool sends a message (text/image) to a conversation, using the verb 'send' and specifying the resource. It distinguishes itself from sibling tools like message_history and message_list_chats, which are for reading or listing messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description mentions text/image but does not explain when to choose one kind or when other messaging tools might be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
message_watchA
常驻 IM 长连接,下行事件以 JSONL 输出到 stdout(Ctrl-C 退出)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description shoulders the transparency burden. It discloses key behavioral traits: the long-lived nature ('常驻'), output format (JSONL to stdout), and termination method (Ctrl-C). This goes beyond a bare restatement of the name, though it omits potential details like reconnection behavior or error handling, which are less critical for a simple watch tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with the key concept ('常驻 IM 长连接'), followed by output specifics and exit instruction. Every word contributes meaning without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has zero parameters and an output schema exists, the description adequately covers the tool's purpose, mode of operation, and termination. It tells the agent what to expect (JSONL stream) and how to stop it, making it sufficient for safe invocation. No additional context is necessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the baseline is 4. No parameter documentation is needed, and the description focuses on the tool's behavior, which is appropriate for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a persistent IM long connection that outputs downstream events as JSONL to stdout, and mentions exit via Ctrl-C. This distinguishes it from siblings like message_history (past messages) and message_send (sending), establishing a specific watch/stream scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for live event monitoring ('常驻' meaning resident/continuous) and provides exit instructions, but it does not explicitly state when to prefer this over alternatives like message_history for historical data. No exclusions or alternative tool names are given, leaving usage guidance implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_itemsB
搜索闲鱼商品(浏览器路径,抗风控;--pages 跨页抓取)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| pages | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It adds one genuinely useful behavioral trait — that it goes through a browser path resistant to anti-bot/risk control — and hints at multi-page crawling, but says nothing about authentication requirements, rate limits, or request cost for what is presumably a scraping operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with a tight parenthetical; nothing is redundant. It is arguably under-specified rather than bloated, but it wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and that covers part of the gap. Still, for a scraping-based search tool with zero annotation coverage and 0% parameter documentation, the absence of auth/cost/pagination context leaves it only minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain the three parameters, but it only clarifies one: --pages is described as cross-page crawling. The required query and the limit parameter (default 20) are left entirely undefined, so an agent cannot tell whether limit caps results per page or overall.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource (搜索闲鱼商品 / search Xianyu items), so the agent knows exactly what it retrieves. It does not, however, distinguish itself from the sibling item_list or the item_get/item_view tools, leaving ambiguity about which search/list variant to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is given, and the closest sibling (item_list) is never mentioned or contrasted. The only contextual hint is the parenthetical about a browser path and anti-risk-control, which is a mechanism note rather than selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skills_installC
把内置 Claude Skills 复制到 ~/.claude/skills/(或 --dest 指定目录)
| Name | Required | Description | Default |
|---|---|---|---|
| dest | No | ||
| list | No | ||
| force | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the write target (~/.claude/skills/), which is useful behavioral context for a filesystem mutation, but it says nothing about overwrite semantics implied by the `force` parameter, nor about what `list` does, nor about permissions/idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no padding; the action and destination are front-loaded. Only minor issue is referring to the parameter as --dest rather than the schema field name `dest`.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter mutation tool with zero annotation coverage and no schema descriptions, the description is too thin: it omits the behavior of two of three parameters and any overwrite/force semantics. The existence of an output schema excuses it from explaining return values, but not from the rest.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must document the three parameters, but it only explains `dest` (and even then as a CLI-style --dest flag rather than the schema's `dest` name). `list` and `force` are entirely unexplained, leaving the agent to guess.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource+destination: copies built-in Claude Skills into ~/.claude/skills/ or a --dest directory. An agent can tell exactly what the tool does. It does not need to differentiate from siblings, which are all unrelated item/message/auth tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of when to prefer this over any alternative (e.g. list mode vs install). The description only restates the action; nothing routes the agent's decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v0.5.3- Changed
auth_login4 fields changed- added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / propertiesRemoved value: -{ - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - changed
Output schema / titlePrevious value: -"auth_loginOutput"New value: +"auth_loginDictOutput"
- Changed
auth_reset_guard1 field changed- changed
Output schema / additionalPropertiesPrevious value: -{ - "type": "boolean" -}New value: +true
- Changed
item_list4 fields changed- added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / propertiesRemoved value: -{ - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - changed
Output schema / titlePrevious value: -"item_listOutput"New value: +"item_listDictOutput"
- Changed
item_publish8 fields changed- added
Input schema / properties / category_jsonAdded value: +{ + "default": "", + "title": "Category Json", + "type": "string" +} - added
Input schema / properties / images / anyOfAdded value: +[ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } +] - added
Input schema / properties / images / defaultAdded value: +null - removed
Input schema / properties / images / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / images / typeRemoved value: -"array" - added
Input schema / properties / images_jsonAdded value: +{ + "default": "[]", + "title": "Images Json", + "type": "string" +} - added
Input schema / properties / location_jsonAdded value: +{ + "default": "", + "title": "Location Json", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "title", - "desc", - "images", - "price" -]New value: +[ + "title", + "desc", + "price" +]
- Changed
item_view4 fields changed- added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / propertiesRemoved value: -{ - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - changed
Output schema / titlePrevious value: -"item_viewOutput"New value: +"item_viewDictOutput"
- Changed
message_history6 fields changed- added
Input schema / properties / limitAdded value: +{ + "default": 0, + "title": "Limit", + "type": "integer" +} - added
Input schema / properties / timeoutAdded value: +{ + "default": 30, + "title": "Timeout", + "type": "number" +} - added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / propertiesRemoved value: -{ - "result": { - "items": { - "additionalProperties": true, - "type": "object" - }, - "title": "Result", - "type": "array" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - changed
Output schema / titlePrevious value: -"message_historyOutput"New value: +"message_historyDictOutput"
- Changed
message_list_chats2 fields changed- added
Input schema / properties / timeoutAdded value: +{ + "default": 30, + "title": "Timeout", + "type": "number" +} - changed
Input schema / properties / watch_secs / defaultPrevious value: -0New value: +5
- Changed
search_items5 fields changed- added
Input schema / properties / pagesAdded value: +{ + "default": 1, + "title": "Pages", + "type": "integer" +} - added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / propertiesRemoved value: -{ - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - changed
Output schema / titlePrevious value: -"search_itemsOutput"New value: +"search_itemsDictOutput"
- Changed
skills_install4 fields changed- added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / propertiesRemoved value: -{ - "result": { - "items": { - "additionalProperties": true, - "type": "object" - }, - "title": "Result", - "type": "array" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - changed
Output schema / titlePrevious value: -"skills_installOutput"New value: +"skills_installDictOutput"
17 tool updates
v0.3.0- First observed
auth_login - First observed
auth_reset_guard - First observed
auth_status - First observed
category_recommend - First observed
item_delete - First observed
item_get - First observed
item_list - First observed
item_publish - First observed
item_view - First observed
location_default - First observed
media_upload - First observed
message_history - First observed
message_list_chats - First observed
message_send - First observed
message_watch - First observed
search_items - First observed
skills_install
TDQS
Scored across 17 tools
Most tools target distinct resources and actions, but item_get and item_view both retrieve item details and could be confused despite the API-vs-browser distinction. The messaging and auth tools are clearly separated.
Most names follow a consistent snake_case resource_action pattern (auth_status, item_publish, message_send), with a few deviations such as search_items and skills_install. The set remains readable and predictable overall.
Seventeen tools is slightly above the ideal range but reasonable for a CLI covering auth, item management, messaging, media, category, location, and skills. Each domain group is small and the tools mostly earn their place.
The surface covers login, search, list, view, publish, delete, media, category, location, and messaging well, but lacks an obvious item update/edit operation. Agents can work around this only by deleting and republishing, which is a notable gap.
Maintenance
Related MCP Connectors
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
Hosted MCP server for 3Dsellers, the multichannel selling platform. Connect Claude, ChatGPT, Cursor, VS Code or any MCP client and manage your eBay, Amazon, Walmart, Etsy, Shopify, WooCommerce and TikTok Shop stores in plain language: search and update products, publish listings, sync inventory, tag and track orders, run bulk actions and CSV imports, and reply to customer messages. 150+ tools. Sign in with OAuth or a personal token. No eBay developer account and nothing to install. Setup guides and config examples for every client: https://github.com/3dsellers/3dsellers-mcp
MCP server for Gainium — manage trading bots, deals, and balances via AI assistants
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- FlicenseAqualityDmaintenanceAn MCP server that automates Xianyu marketplace operations through Playwright, allowing users to manage listings and conduct market research via natural language. It features integrated tools for generating AI-powered product descriptions and cover images using DashScope.1124-
- FlicenseAqualityDmaintenanceA lightweight MCP server that lets AI assistants publish notes to Xiaohongshu (Little Red Book) via browser automation. Supports login, image-text note publishing with up to 9 images, and search.41-
- AlicenseNot gradedqualityCmaintenanceAn MCP server that exposes browser automation tools and Taobao product search/detail lookup via Playwright. It requires a logged-in Taobao session and is best-effort scraping, not an official API.1ISC
- FlicenseCqualityBmaintenanceProvides MCP interface to Xianyu (Goofish) for searching items, managing price watches, and monitoring prices via CLI, HTTP API, or MCP.373-