Skip to main content
Glama
mouse114514

Xadeus-QQ-MCP

Xadeus-QQ-MCP

Listed on awesome-remote-mcp-servers

Built by a 15-year-old developer, based on Amadeus-QQ-MCP.

Xadeus-QQ-MCP MCP server

QQ MCP (Model Context Protocol) Server — connects to QQ via NapCatQQ (OneBot v11), giving AI agents direct control over QQ (send/receive messages, group management, auto-wake on incoming messages, and more).

Python 3.12+ License: MIT


Features

Feature

Description

Auto-Wake

Incoming QQ messages matching rules trigger the AI agent window automatically. Cross-platform — Windows (keybd_event), macOS (osascript+pbcopy), Linux (xdotool+xclip). Supports any client — opencode, Cursor, Claude Desktop, Windsurf — configure via set_wake_config

Dedup Lock

Prevents duplicate wake during processing. Unlock manually when done

Persistent Rules

Wake rules saved to wake_rules.json, auto-loaded on restart

wait_for_reply Built-in

send_message waits for reply by default

Group Moderation

Mute, unmute, kick, set card, send notices

File Sending

Send any file from URL to QQ groups/private chats

Message Recall

Recall bot-sent messages

Timer Scheduler

Cron or interval-based timed wake

One-Click Setup

Auto-detect NapCat, configure ports, update agent configs

Related MCP server: kimi-bridge

Architecture

QQ ←→ NapCat (OneBot v11)
          ↓  WebSocket :3001 / HTTP :3000
    Xadeus-QQ-MCP (Python MCP Server)
          ↓  MCP Protocol
    AI Agent (opencode / Cursor / Claude / ...)

Quick Start

Prerequisites

  1. Install NapCat.Shell and QQ

  2. Configure NapCat OneBot v11 (WebSocket :3001, HTTP :3000)

.\quickstart.ps1 -qq 你的QQ号

Auto-detects NapCat, configures HTTP:3000/WS:3001, creates Python venv, writes QQ_OVERRIDE, generates NapCat start script, sets window wake patterns.

Options:

.\quickstart.ps1 -qq 123456 -windowTitle "OC,opencode,cmd"   # Custom window patterns
.\quickstart.ps1 -configFile config.json                      # Config file mode
.\quickstart.ps1 -restart                                     # Kill stale MCP + wait for recovery

Default -windowTitle: OC,opencode,Administrator,cmd,管理员 (comma-separated substrings, matched case-insensitively against window titles)

Also available via Python:

python setup.py          # Interactive mode
python setup.py --qq YOUR_QQ --fast   # Non-interactive

Manual Setup

git clone https://github.com/mouse114514/Xadeus-QQ-MCP
cd Xadeus-QQ-MCP

# Virtual env
uv venv
uv sync

# Start MCP Server
uv run python -m qq_agent_mcp --qq YOUR_QQ

Configure Your AI Agent

Important: The --qq argument passed by your AI agent config is ignored at runtime. Instead, set QQ_OVERRIDE environment variable before starting your agent:

$env:QQ_OVERRIDE = "YOUR_QQ"

Or edit the fallback value in src/qq_agent_mcp/__main__.py:QQ_OVERRIDE.

This works around AI agents that cache the MCP command at startup and ignore subsequent config file changes.

opencode — edit ~/.config/opencode/opencode.json:

{
  "mcp": {
    "qq-agent": {
      "type": "local",
      "command": [
        "C:\\path\\.venv\\Scripts\\python.exe",
        "-m", "qq_agent_mcp",
        "--qq", "YOUR_QQ"
      ],
      "enabled": true,
      "timeout": 120000
    }
  }
}

Cursor / Claude Desktop / Windsurf — edit the respective MCP config file:

{
  "mcpServers": {
    "qq-agent": {
      "command": "C:\\path\\.venv\\Scripts\\python.exe",
      "args": ["-m", "qq_agent_mcp", "--qq", "YOUR_QQ"],
      "enabled": true
    }
  }
}

Or just run python setup.py — it detects all installed agents automatically.

Wake Target Configuration

Use set_wake_config to bind to any AI agent window:

{
  "window_title_patterns": ["opencode", "cursor", "claude"],
  "focus_shortcut": "ctrl+l"
}

Saved to src/qq_agent_mcp/wake_config.json.

MCP Tools

Messaging

Tool

Description

send_message

Send text with segmentation and optional reply wait

send_image

Send image (base64)

send_voice

Send voice (base64)

wait_for_reply

Wait for new messages

Context & History

Tool

Description

get_recent_context

Recent messages for a group/friend

batch_get_recent_context

Batch query multiple targets

screenshot_chat

Render chat screenshot (iPhone dark mode style)

compress_context

Archive old messages to summary

Wake System

Tool

Description

add_wake_rule

Add auto-wake rule (group/private + keywords)

remove_wake_rule

Remove wake rule by index

list_wake_rules

List all wake rules

set_wake_pending

Lock/unlock wake to prevent duplicates

set_wake_enabled

Enable/disable all or specific rules

set_wake_config

Configure target window and focus shortcut

get_wake_config

View current wake config

diagnose_wake

Debug wake monitor state

Group Management

Tool

Description

get_group_list

List joined groups

get_group_member_list

List group members

get_group_member_info

Get member details

mute_member

Mute a member

unmute_member

Unmute a member

kick_member

Kick a member

set_member_card

Set group nickname

send_group_notice

Send group notice

System

Tool

Description

check_status

Check QQ and NapCat connection

get_friend_list

List friends

recall_message

Recall bot message

send_file

Send file from URL

add_timer

Add scheduled wake (cron/interval)

remove_timer

Remove timer

list_timers

List all timers

Known Issues & Workarounds

Issue

Cause

Workaround

MCP won't restart after crash/kill

opencode has restart backoff; after ~3 kills it stops retrying

Restart your AI agent, or .\quickstart.ps1 -restart

Two MCP processes always appear

FastMCP stdio transport spawns parent+child chain

Named mutex prevents duplicate typing (built-in fix)

Config changes ignored after editing opencode.json

opencode caches MCP command at startup

Restart opencode, or use QQ_OVERRIDE env var

Wake message doubled

Both processes try to type simultaneously

Fixed via Windows named mutex (Local\XadeusQQ_MCP_WakeTyping)

Messages from same QQ ignored

is_self filter in context.py and wake.py

Removed in current build

Wake won't fire even with matching rule

Lock (_pending) held from previous wake

Auto-unlock after 5 min, or call set_wake_pending(false)

Restart Helper

.\quickstart.ps1 -restart

Kills stale MCP processes and waits for auto-restart. If the agent doesn't recover, it prompts you to restart manually.

Tech Stack

  • Python 3.12+ (httpx, aiohttp, FastMCP)

  • NapCat.Shell (QQ + OneBot v11)

  • Win32 API (ctypes) — window activation, keyboard simulation

License

Based on Amadeus-QQ-MCP (MIT License).


中文版

Xadeus-QQ-MCP

Listed on awesome-remote-mcp-servers

由一位 15 岁高中生基于 Amadeus-QQ-MCP 深度优化改造。

QQ MCP (Model Context Protocol) Server — 通过 NapCatQQ (OneBot v11) 协议连接 QQ,为 AI Agent 提供直接操控 QQ 的能力(收发消息、管理群聊、自动唤醒等)。


功能亮点

功能

说明

Auto-Wake 自动唤醒

QQ 消息匹配规则时自动激活 AI Agent 窗口。跨平台 — Windows (keybd_event)、macOS (osascript+pbcopy)、Linux (xdotool+xclip)。支持任意客户端 — opencode、Cursor、Claude Desktop、Windsurf,通过 set_wake_config 配置窗口标题即可

Pending 防重复锁

唤醒后自动上锁,防止重复唤醒。Agent 干完活后手动解锁

规则持久化

唤醒规则自动保存到 wake_rules.json,重启后自动加载

wait_for_reply 一体化

send_message 默认自动等待回复

群管理

禁言、解禁、踢人、设名片、发公告

文件发送

从 URL 下载文件发送到群/私聊

消息撤回

撤回机器人发送的消息

定时任务

支持 cron 和间隔两种模式的定时唤醒

一键配置

自动检测 NapCat、端口、多 Agent 配置

架构

QQ ←→ NapCat (OneBot v11)
          ↓  WebSocket :3001 / HTTP :3000
    Xadeus-QQ-MCP (Python MCP Server)
          ↓  MCP 协议
    AI Agent (opencode / Cursor / Claude / ...)

快速开始

前置条件

  1. 安装 NapCat.Shell 和 QQ

  2. 配置 NapCat OneBot v11 (WebSocket :3001, HTTP :3000)

一键配置(推荐)

.\quickstart.ps1 -qq 你的QQ号

自动检测 NapCat、配置 HTTP:3000/WS:3001、创建 Python venv、 写入 QQ_OVERRIDE、生成 NapCat 启动脚本、设置窗口唤醒匹配模式。

选项:

.\quickstart.ps1 -qq 123456 -windowTitle "OC,opencode,cmd"   # 自定义窗口匹配模式
.\quickstart.ps1 -configFile config.json                      # 配置文件模式
.\quickstart.ps1 -restart                                     # 杀死残留 MCP + 等待恢复

默认 -windowTitleOC,opencode,Administrator,cmd,管理员 (逗号分隔,不区分大小写子串匹配窗口标题)

Python 版(功能相同):

python setup.py                           # 交互模式
python setup.py --qq 你的QQ号 --fast       # 静默模式

手动安装

git clone https://github.com/mouse114514/Xadeus-QQ-MCP
cd Xadeus-QQ-MCP

# 虚拟环境
uv venv
uv sync

# 启动 MCP Server
uv run python -m qq_agent_mcp --qq 你的QQ号

配置 AI Agent

重要:AI Agent 配置中的 --qq 参数在运行时会被忽略。 正确方式:启动 Agent 前设置环境变量:

$env:QQ_OVERRIDE = "你的QQ号"

或直接修改 src/qq_agent_mcp/__main__.py:QQ_OVERRIDE 的默认值。

这样做是为了绕过 AI Agent 缓存 MCP 命令的问题—— Agent 只在启动时读取一次配置,改配置文件不生效。

opencode — 编辑 ~/.config/opencode/opencode.json:

{
  "mcp": {
    "qq-agent": {
      "type": "local",
      "command": [
        "C:\\path\\.venv\\Scripts\\python.exe",
        "-m", "qq_agent_mcp",
        "--qq", "你的QQ号"
      ],
      "enabled": true,
      "timeout": 120000
    }
  }
}

Cursor / Claude Desktop / Windsurf — 编辑对应 MCP 配置文件:

{
  "mcpServers": {
    "qq-agent": {
      "command": "C:\\path\\.venv\\Scripts\\python.exe",
      "args": ["-m", "qq_agent_mcp", "--qq", "你的QQ号"],
      "enabled": true
    }
  }
}

运行 python setup.py 可自动检测并配置所有已安装的 Agent。

唤醒目标配置

通过 set_wake_config 配置窗口标题,即可绑定到任意 AI Agent:

{
  "window_title_patterns": ["opencode", "cursor", "claude"],
  "focus_shortcut": "ctrl+l"
}

配置文件保存在 src/qq_agent_mcp/wake_config.json

MCP 工具一览

消息

工具

说明

send_message

发文本消息,支持分段、等待回复

send_image

发图片

send_voice

发语音

wait_for_reply

等待新消息

上下文

工具

说明

get_recent_context

查看最近消息

batch_get_recent_context

批量查看多目标

screenshot_chat

生成聊天截图(iPhone 深色模式)

compress_context

压缩缓存

唤醒系统

工具

说明

add_wake_rule

添加唤醒规则(群/私聊 + 关键词)

remove_wake_rule

删除唤醒规则

list_wake_rules

查看所有规则

set_wake_pending

锁定/解锁唤醒

set_wake_enabled

启用/禁用规则

set_wake_config

配置窗口标题和快捷键

get_wake_config

查看唤醒配置

diagnose_wake

诊断唤醒状态

群管理

工具

说明

get_group_list

群列表

get_group_member_list

群成员列表

get_group_member_info

成员详情

mute_member

禁言

unmute_member

解禁

kick_member

踢出

set_member_card

设群名片

send_group_notice

发群公告

系统

工具

说明

check_status

检查连接状态

get_friend_list

好友列表

recall_message

撤回消息

send_file

发送文件

add_timer

添加定时任务

remove_timer

删除定时任务

list_timers

查看所有定时任务

已知问题

问题

原因

解决方法

MCP 被杀后无法自启

opencode 有重启退避策略

重启 AI Agent,或 .\quickstart.ps1 -restart

总是有两个 MCP 进程

FastMCP stdio 产生父子进程链

内置命名互斥锁解决重复打字

改 opencode.json 不生效

opencode 启动时缓存命令

重启 opencode,或用 QQ_OVERRIDE 环境变量

唤醒消息出现双倍字符

两个进程同时打字

已修复(Windows 命名互斥锁)

同 QQ 号发消息不唤醒

is_self 过滤器阻挡

已修复(移除 context.py/wake.py 过滤)

匹配规则但不唤醒

唤醒锁 (_pending) 未释放

5 分钟自动解锁,或调用 set_wake_pending(false)

重启助手

.\quickstart.ps1 -restart

杀死残留 MCP 进程并等待自动重启。如果 Agent 不自动恢复,会提示你手动重启。

技术栈

  • Python 3.12+ (httpx, aiohttp, FastMCP)

  • NapCat.Shell (QQ + OneBot v11)

  • Win32 API (ctypes) — 窗口激活、键盘模拟

授权

基于 Amadeus-QQ-MCP (MIT License) 改造。

Available Tools

33 tools
add_timerA
Idempotent

Add a timer task that triggers a wake with the given message at scheduled times.

Supports cron expressions and fixed-interval scheduling:

  • cron_expr: "0 8 * * *" = every day at 8am

  • interval_seconds: 3600 = every hour

  • once: if True, auto-removes after first trigger

At least one of cron_expr or interval_seconds must be provided. Use list_timers to see active timers, remove_timer to cancel.

Mutates the timer configuration. Timers persist across restarts.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYes
cron_exprNo
interval_secondsNo
onceNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false and destructiveHint=false, and the description explicitly states that it mutates the timer configuration and that timers persist across restarts, adding valuable behavioral context beyond annotations. No contradiction found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: a clear first sentence, bullet-like examples for scheduling, a note on constraints, and cross-references to sibling tools. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, usage, parameter details, and mutation behavior, but it omits any mention of what the tool returns (e.g., success indication, timer ID). With no output schema, this gap may leave the agent unsure how to handle the response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates well by providing examples for cron_expr and interval_seconds, explaining the once flag, and noting the constraint that at least one of cron_expr or interval_seconds must be provided. The message parameter is required and self-explanatory, but no additional detail is given.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool adds a timer task with a message at scheduled times, and specifies two scheduling methods. It mentions related sibling tools (list_timers, remove_timer) but does not explicitly distinguish from add_wake_rule, which is a close sibling also dealing with scheduling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context: supports cron and interval scheduling, with examples; notes that at least one must be provided; explains the 'once' flag; and points to list_timers and remove_timer for management. However, it does not specify when not to use this tool or compare it to alternatives like add_wake_rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_wake_ruleA
Idempotent

Add a wake rule: when a matching message arrives, opencode wakes up.

When a message matches this rule, the agent is activated and the message context is made available. Use add_wake_rule to create rules, list_wake_rules to see them, remove_wake_rule to delete, and set_wake_enabled to toggle.

Rules are persisted to disk and survive restarts. Keywords are optional: empty list matches any message. target_id=None matches any source.

Mutates the wake rule configuration.

ParametersJSON Schema
NameRequiredDescriptionDefault
target_typeYes
target_idNo
keywordsNo
ignore_if_focusedNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses mutation of wake rule configuration, persistence across restarts, and specifics about keyword and target_id behavior. Aligns with annotations (idempotentHint true) without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise, well-structured: first sentence states purpose, second clarifies usage with siblings, third gives parameter details. No wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, usage, persistence, and key parameter semantics. Lacks mention of return value or behavior if rule already exists, but still fairly complete given no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% coverage, but description adds meaning for target_id ('matches any source') and keywords ('empty list matches any message'). However, target_type and ignore_if_focused are not explained, leaving some ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool adds a wake rule that activates opencode on matching messages. It differentiates from siblings by naming related tools (list, remove, set_wake_enabled) for other operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use this tool (to create rules) and provides alternatives for other operations (list, remove, toggle). Also clarifies persistence and default behaviors for empty/null parameters.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

batch_get_recent_contextA
Read-onlyIdempotent

Query recent messages for multiple groups/friends in one call.

More efficient than calling get_recent_context multiple times: uses at most 2 OneBot API calls (one for group names, one for friend names) regardless of how many targets you query. Each target's messages are returned independently with errors for unmonitored targets.

Use this when you need to read context from 2+ conversations at once. For a single target, use get_recent_context instead (simpler).

Read-only. No side effects.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetsYes
limitNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=false. The description adds: 'Read-only. No side effects.' It also explains efficiency and error handling ('uses at most 2 OneBot API calls... errors for unmonitored targets'). No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with 5 sentences, front-loaded with the purpose. Each sentence adds value. Could be slightly more structured, but overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool complexity (batching, two params, no output schema), the description covers efficiency, error handling, and usage context. It does not describe return format, but that is acceptable without an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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 not directly describe the 'targets' or 'limit' parameters. The description gives context about targets being multiple groups/friends but lacks details on structure or meaning. This is insufficient for a 0% coverage tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Query recent messages for multiple groups/friends in one call.' It uses a specific verb and resource, and distinguishes from the sibling 'get_recent_context' by emphasizing batching and efficiency.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use: 'Use this when you need to read context from 2+ conversations at once. For a single target, use get_recent_context instead (simpler).' This provides clear context and an alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_statusA
Read-onlyIdempotent

Check QQ login status, NapCat connection, and monitored targets.

Returns the bot's QQ account, online status, uptime, list of monitored groups and friends, and buffer statistics. Use this to verify the server is running correctly before calling other tools. Not the same as get_group_list or get_friend_list — this is a health check, not a query.

Read-only. No side effects. Safe to call at any time.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint, destructiveHint, idempotentHint. The description adds context by stating 'Read-only. No side effects. Safe to call at any time' and describes the return values. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences, front-loaded with the purpose, and every sentence adds value. No unnecessary text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters, rich annotations, and no output schema requirement, the description fully covers what the tool does, its return values, and when to use it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so schema coverage is 100%. Baseline of 4 for zero parameters is appropriate; the description adds no param info needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Check') and clearly defines the resource (QQ login status, NapCat connection, monitored targets). It distinguishes itself from siblings by stating it's a health check, not a query like get_group_list or get_friend_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states to use this tool to verify the server is running correctly before calling other tools. It also contrasts with similar tools, providing clear context. No explicit when-not-to-use scenarios are mentioned, but the guidance is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compress_contextA
Destructive

Compress all buffered messages for a target into a single summary, freeing buffer space.

This is destructive: raw messages are replaced by a compressed summary. Once compressed, individual messages cannot be recovered from the buffer. Use this after get_recent_context when you want to archive old conversations and make room for new messages.

The compression uses the client LLM (via MCP sampling) to generate a concise summary. Falls back to rule-based compression if LLM is unavailable.

Destructive: permanently replaces raw messages with a summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYes
target_typeNogroup

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds significant details beyond annotations: raw messages are replaced and unrecoverable, compression uses client LLM via MCP sampling with fallback. It fully aligns with destructiveHint=true and provides useful behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a summary line followed by bullet points. It is concise but could be slightly more compact. No unnecessary content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity and no output schema, the description covers the essential aspects: usage, behavior, fallback, and side effects. It is sufficiently complete for an agent to understand what the tool does and its consequences.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description should explain the parameters but does not. 'target' and 'target_type' are not described, leaving the agent to infer their meaning from the tool's purpose. This is a clear gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool's purpose: compressing buffered messages into a summary to free space. It uses a specific verb-resource pair and distinguishes from related tools like get_recent_context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use ('after get_recent_context when you want to archive old conversations') and notes the destructive nature. However, it could more directly state when not to use it (e.g., when raw messages are needed).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

debug_wake_pipelineA
Read-onlyIdempotent

Simulate a wake trigger to debug the wake pipeline.

Creates a fake message from the given target_id and target_type and checks: is the callback registered, does any rule match the fake message, is the monitor currently pending or running. Then invokes the callback to exercise the full activation pipeline. The response fields (callback_set, matches_rules, pending, running, callback_invoked) tell you exactly where the pipeline is broken. Use diagnose_wake for a read-only snapshot without triggering the callback.

Read-only with respect to QQ. May invoke the wake callback.

ParametersJSON Schema
NameRequiredDescriptionDefault
target_typeNoprivate
target_idNo3838379219

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that it creates a fake message and may invoke the wake callback, and that it is 'read-only with respect to QQ'. These details add value beyond the annotations (readOnlyHint, destructiveHint, idempotentHint). No contradiction detected because the description qualifies the read-only scope.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (two paragraphs) and front-loads the purpose. Every sentence contributes, though the second paragraph could be slightly shorter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Explains the response fields, distinguishes from diagnose_wake, and covers the main purpose. However, it does not mention error cases or prerequisites. Given no output schema, the description adequately describes expected output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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 mentions parameters only in passing ('from the given target_id and target_type') without explaining valid values, constraints, or semantics. This provides minimal additional meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Simulate a wake trigger to debug the wake pipeline' and explains the steps and response fields. It explicitly distinguishes from sibling tool 'diagnose_wake' by noting that diagnose_wake is a read-only snapshot without callback invocation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit alternative: 'Use diagnose_wake for a read-only snapshot without triggering the callback.' It also explains the purpose (debugging) and what it checks, making it clear when to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

diagnose_wakeA
Read-onlyIdempotent

Return the current state of the wake monitor for debugging.

Shows: whether the monitor is running, all active rules (with target_type, target_id, keywords, enabled state, ignore_if_focused), whether the message callback is registered on the context manager, and total buffered messages across all targets. Use this as the first step when wake is not working — if monitor_created or callback_set is False, the monitor was never initialized. For a more aggressive test that injects a fake message, use debug_wake_pipeline instead.

Read-only. No side effects.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, idempotent, non-destructive. Description adds detail on output fields and explicitly states 'Read-only. No side effects.', reinforcing safety but not adding new behavioral insight beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise yet comprehensive: first sentence states purpose, then structured list of outputs, then usage guidance. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Fully describes the tool's output and usage context. No missing information for a debugging tool with no parameters and no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters, so baseline is 4. Description does not need to elaborate on parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it returns the current state of the wake monitor for debugging, listing specific components. Distinguishes from sibling 'debug_wake_pipeline' which injects fake messages.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly recommends use as first step when wake is not working, and contrasts with 'debug_wake_pipeline' for more aggressive testing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_friend_listA
Read-onlyIdempotent

List all QQ friends of the bot account.

Returns user IDs and nicknames. Use this to discover valid friend IDs for send_message or get_recent_context with target_type="private". For group list use get_group_list instead.

Read-only. No side effects.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, destructiveHint, idempotentHint. Description confirms 'Read-only. No side effects.' No contradictions, but doesn't add much beyond annotations. Still accurate and sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four succinct sentences with no wasted words. Front-loaded with the core action, then usage context, then contrast with sibling. Excellent structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters, no output schema, and rich annotations, the description is fully complete. It explains purpose, usage, and alternatives, leaving no gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters; baseline 4 as per rule. Description adds no parameter details, but none are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists all QQ friends of the bot account, specifying it returns user IDs and nicknames. It distinguishes itself from get_group_list, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says use this to discover friend IDs for send_message or get_recent_context, and advises using get_group_list for groups. This provides clear when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_group_listA
Read-onlyIdempotent

List all QQ groups the bot has joined.

Returns group IDs, names, and member counts for every group the bot is a member of. Use this to discover valid group IDs for send_message, get_recent_context, or other group-targeting tools. For friend list use get_friend_list instead. For batch name resolution use batch_get_recent_context.

Read-only. No side effects.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds 'Read-only. No side effects,' which reinforces but doesn't significantly expand beyond annotations. It does mention return fields, adding some context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences with no wasted words. The main purpose is front-loaded, and each sentence adds value: purpose, return fields, usage, alternatives.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but the description explains return data (group IDs, names, member counts). The tool is simple with no parameters, and the description covers all needed context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no parameters (100% coverage). The description compensates by explaining what the tool returns and how to use it, which is sufficient. Baseline 4 for zero-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'List all QQ groups the bot has joined.' It specifies the return data (group IDs, names, member counts) and distinguishes from siblings like get_friend_list and batch_get_recent_context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells when to use the tool ('discover valid group IDs for send_message, get_recent_context, or other group-targeting tools') and provides alternatives: 'For friend list use get_friend_list instead. For batch name resolution use batch_get_recent_context.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_group_member_infoA
Read-onlyIdempotent

Get detailed info for a specific QQ group member.

Returns: user_id, nickname, card (group nickname), role (owner/ admin/member), join_time (unix timestamp), last_sent_time, level, title (group honorific), and age/gender if available. Unlike get_group_member_list which returns all members, this gives a single member's full profile. Use this to look up a specific user before deciding to mute, kick, or set their card. Use get_group_member_list when you need to enumerate all members.

Read-only. No side effects.

ParametersJSON Schema
NameRequiredDescriptionDefault
group_idYes
user_idYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false. Description adds 'Read-only. No side effects.' consistent with annotations, and lists exact return fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two efficient sentences plus a bulleted list; front-loaded with purpose; no extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only info retrieval with two obvious parameters and no output schema, the description provides all necessary context: what it does, return fields, and usage guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage, but parameters (group_id, user_id) are self-explanatory from names. Description does not elaborate on them, but minimal explanation needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it returns detailed info for a specific QQ group member, lists fields, and distinguishes from sibling tool get_group_member_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises when to use this tool (before muting, kicking, setting card) and when to use alternative (get_group_member_list for enumeration).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_group_member_listA
Read-onlyIdempotent

List all members of a QQ group.

Returns for each member: user_id (QQ number), nickname, card (group nickname), role (owner/admin/member), join_time (unix timestamp), last_sent_time, level, and title (group honorific). Use get_group_member_info for a single member's detailed info. Use get_group_list to discover valid group_id values. The response includes a count field for the number of members. Large groups (>200 members) may be paginated by QQ; the result includes all members QQ returns in one call.

Read-only. No side effects.

ParametersJSON Schema
NameRequiredDescriptionDefault
group_idYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true. Description adds that the tool is 'Read-only. No side effects.' and discloses pagination behavior for large groups, which adds useful context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise with clear structure: main purpose, return fields, usage alternatives, pagination note, and read-only statement. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given one simple parameter, no output schema, the description covers return fields, usage context, pagination, and safety. Complete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description must compensate. It implies that group_id identifies a QQ group and suggests using get_group_list to discover valid values. This provides sufficient meaning for the single required parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'List all members of a QQ group' with verb and resource. It distinguishes from siblings by mentioning get_group_member_info for single member and get_group_list for valid group_ids.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit alternatives: use get_group_member_info for single member details, use get_group_list to discover valid group_id values. Also notes pagination handling for large groups (>200 members).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_recent_contextA
Read-onlyIdempotent

Retrieve recent messages for one group or friend from the in-memory buffer.

Returns buffered messages (backfill from history + real-time via WebSocket) as raw message objects with sender info, content, timestamps, and image URLs. This is the primary tool for reading chat context. For multiple targets at once, use batch_get_recent_context instead (fewer API calls). To archive old messages and free buffer space, use compress_context.

Messages older than the buffer window are lost. Call compress_context periodically to preserve important conversations.

Read-only. No side effects on the chat.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYes
target_typeNogroup
limitNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, destructiveHint, and idempotentHint. The description adds context about the in-memory buffer behavior: messages older than the buffer window are lost, and periodically calling compress_context is necessary to preserve conversations. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear first sentence stating purpose, followed by return details, alternatives, and cautions. It is slightly lengthy but every sentence adds value. Could be more concise, but no redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 3 parameters, no output schema, but informative annotations, the description covers purpose, behavior (read-only, buffer loss), and alternatives. Missing details on return format specifics and error handling, but sufficient for an agent to use effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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 implies 'target' is a group or friend but does not explain 'target_type' or 'limit' parameters. No additional details about parameter values or constraints are provided beyond the schema's defaults and titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves recent messages for one group or friend from the in-memory buffer, specifying the return type. It distinguishes itself from siblings like batch_get_recent_context and compress_context by naming them and their purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states that this is the primary tool for reading chat context, advises using batch_get_recent_context for multiple targets to reduce API calls, and recommends compress_context to archive old messages and preserve important conversations. It also warns about buffer window data loss.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_wake_configA
Read-onlyIdempotent

Return the current wake configuration (window title patterns, shortcut).

Use set_wake_config to modify these settings. Changes take effect immediately for future wake activations.

Read-only. No side effects.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds 'Read-only. No side effects' which reinforces but does not significantly add beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences: first states purpose, second provides guidance, third summarizes behavior. No wasted words, front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While there is no output schema, the tool is simple with no parameters and clear annotations. The description lacks return structure details but is sufficient given low complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so schema coverage is 100%. The description adds no parameter details, but baseline for 0 parameters is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies 'Return the current wake configuration (window title patterns, shortcut)' which is a specific verb+resource pair and distinguishes from the sibling 'set_wake_config'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states to use 'set_wake_config' for modifications, providing clear context for when to use this tool vs the alternative. No exclusions beyond that.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

kick_memberA
DestructiveIdempotent

Kick a member from a QQ group.

group_id: the QQ group number. user_id: the QQ number to kick. reject_add_request: if True, rejects future join requests from this user. Requires bot to have admin privileges. This is irreversible for the current session — the user can re-join if not rejected. Consider using mute_member (temporary) as a less drastic alternative. The bot cannot kick group owners or admins of equal rank; returns error in those cases.

Destructive: removes a member from the group.

ParametersJSON Schema
NameRequiredDescriptionDefault
group_idYes
user_idYes
reject_add_requestNo

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructive and idempotent hints. Description adds key behavioral traits: irreversible for current session, returns error on privileged users, and clarifies reject_add_request behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured, front-loaded with action. Each sentence serves a purpose, no redundancy, and efficiently covers all necessary details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite complexity (irreversibility, admin privileges, error cases), description covers all necessary context, including effects and alternatives.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, description fully explains all three parameters: group_id, user_id, and reject_add_request, providing meaning and usage context beyond type hints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Kick a member from a QQ group' with specific verb and resource. Distinguishes from sibling tool mute_member by emphasizing irreversible nature.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly recommends mute_member as a less drastic alternative, mentions admin privileges required, and explains limitations (cannot kick group owners/admins).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_timersA
Read-onlyIdempotent

List all configured timer tasks.

Shows each timer's index, message, cron expression, interval, once flag, and next run time. Use add_timer to create timers, remove_timer to cancel.

Read-only. No side effects.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint, destructiveHint, idempotentHint; description adds context that it shows specific fields (index, message, cron, etc.) and confirms 'Read-only. No side effects.'

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the main action. Every sentence provides value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but description covers what fields are shown (index, message, cron, etc.), making it complete for a simple list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters, so baseline is 4. Description doesn't need to add param info; it correctly implies no arguments needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List all configured timer tasks,' using a specific verb and resource. It distinguishes from sibling tools like add_timer and remove_timer by focusing on listing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description explicitly mentions when to use this tool (listing) and provides alternatives: 'Use add_timer to create timers, remove_timer to cancel.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_wake_rulesA
Read-onlyIdempotent

List all configured wake rules.

Shows each rule's target type, ID, keywords, enabled state, and focus-ignoring setting. Use add_wake_rule to create rules, remove_wake_rule to delete, and set_wake_enabled to toggle.

Read-only. No side effects.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint, destructiveHint, and idempotentHint. The description reinforces these and adds detail on what each rule's output contains, which is helpful but not critical.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four concise sentences with no wasted words. Front-loaded with purpose, followed by output details and sibling pointers. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter list tool with thorough annotations, the description is complete. It explains what is listed and what fields are shown, compensating for lack of output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so baseline 4 applies. The description does not need to add parameter details beyond what the empty schema already indicates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all configured wake rules and specifies the fields shown (target type, ID, keywords, etc.). It distinguishes from siblings by mentioning add_wake_rule, remove_wake_rule, and set_wake_enabled.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use ('List all configured wake rules'), mentions alternatives for related operations, and declares read-only nature, guiding appropriate selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mute_memberB
Idempotent

Mute a member in a QQ group.

group_id: the QQ group number. user_id: the QQ number to mute. duration: mute time in seconds (default 600 = 10 minutes). Requires bot to have admin privileges in the group. Use unmute_member to reverse.

Mutates the group by muting a member.

ParametersJSON Schema
NameRequiredDescriptionDefault
group_idYes
user_idYes
durationNo

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate mutation (readOnlyHint=false) and idempotency (idempotentHint=true). Description adds 'Mutates the group by muting a member' and default duration, but lacks details on error states or behavior when bot lacks privileges.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short, front-loaded with the purpose, and efficient. However, it repeats parameter explanations that could be inferred from the schema, making it slightly less concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the main points: purpose, parameters, prerequisite, and reversal. Lacks details on error handling or behavior when member is already muted. Acceptable for a simple mutation tool with no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema description coverage, the description explains each parameter: group_id as QQ group number, user_id as QQ number, and duration with default 600 seconds. This adds meaning beyond the schema's type/title only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Mute a member in a QQ group' and explains parameters. It mentions unmute_member as a sibling tool but does not explicitly differentiate from other sibling tools like kick_member or set_member_card.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description includes prerequisite 'Requires bot to have admin privileges' and suggests unmute_member for reversal. However, it does not provide guidance on when to prefer mute over other mutation tools like kick_member.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

recall_messageA
DestructiveIdempotent

Recall (delete) a message sent by the bot.

message_id: the message ID to recall (obtained from send_message's or send_image's message_id in the response). Only works for messages sent by the bot itself within approximately 2 minutes of sending, or anytime if the bot has admin/owner privileges in the group. Cannot recall messages sent by other users. Use this to undo accidental sends. The message is permanently deleted for all members.

Destructive: permanently deletes a message.

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds significant behavioral context beyond the annotations. It details the permanent deletion for all members, time limits, permission requirements, and the source of message_id. This fully informs the agent of the tool's side effects and constraints, complementing the destructiveHint=true annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear first line, parameter details, usage conditions, and a final note. While it is slightly verbose, every sentence adds necessary information. Front-loading of the core purpose is good, though the parameter explanation could be integrated more concisely. Overall, it is effective without excess.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has one simple parameter, no output schema, and annotations already cover destructiveness, the description is fully complete. It covers permissions, time constraints, message source, scope (only bot's messages), and the permanent deletion effect. No important aspect is missing for correct usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one parameter (message_id) with no description in the schema itself. The tool description fully explains what message_id is, where to obtain it (from send_message or send_image responses), and its role in the operation. This adds complete semantic meaning beyond the schema's type and required status.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool recalls (deletes) a message sent by the bot. It specifies the action ('Recall (delete)'), the target resource ('a message sent by the bot'), and distinguishes it from sibling tools like send_message or send_image by focusing on deletion. The purpose is unambiguous and specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear guidelines on when to use the tool ('Use this to undo accidental sends') and constraints (only within 2 minutes unless bot has admin/owner privileges, cannot recall other users' messages). It implicitly tells the agent not to use it for messages from other users. While it does not explicitly name alternative tools, the context is sufficient for correct selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_timerA
DestructiveIdempotent

Remove a timer task by index.

Use list_timers to get current indices. Timers are renumbered after removal. This permanently deletes the timer.

Destructive: permanently removes a timer.

ParametersJSON Schema
NameRequiredDescriptionDefault
indexYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description adds useful context beyond annotations: 'Timers are renumbered after removal' and reaffirms destructiveness. Annotations already cover destructiveness and idempotency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four concise sentences with no wasted words. Main action and key usage notes are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one param and no output schema, description covers action, prerequisite, renumbering behavior, and destructiveness. Could mention error handling for invalid index.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Parameter 'index' is only described as the position from list_timers but lacks specifics on indexing (0-based vs 1-based) or valid range. With 0% schema coverage, description insufficiently compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Remove a timer task by index.' with specific verb and resource. Distinguishes from siblings like add_timer and list_timers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises 'Use list_timers to get current indices.' and warns about renumbering after removal, guiding proper usage sequence and caution.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_wake_ruleA
DestructiveIdempotent

Remove a wake rule by index.

Use list_wake_rules to get the current indices. Rules are renumbered after removal. This permanently deletes the rule; to temporarily disable, use set_wake_enabled instead.

Destructive: permanently removes a wake rule.

ParametersJSON Schema
NameRequiredDescriptionDefault
indexYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds context beyond annotations: renumbering after removal, permanent deletion. Annotations already mark destructiveHint=true, but description reinforces and explains behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short paragraphs with no wasted words. Front-loaded with action, then steps, then alternative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers main usage and alternatives. Lack of output schema is fine. Could mention error cases (e.g., invalid index) but overall adequate for single-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Single parameter 'index' is explained as identifier for the rule. Schema provides no description coverage, but description adds that index is used to select which rule to remove. Could specify starting index (e.g., 0-based) but not essential.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states removal of wake rule by index. Distinguishes from siblings by referencing list_wake_rules for indices and set_wake_enabled for temporary disable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use (permanent delete), prerequisite (list indices), and alternative (use set_wake_enabled for temporary disable).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

screenshot_chatA
Read-onlyIdempotent

Render a QQ-style dark-mode chat screenshot starting from a given message.

Uses Playwright to render messages as an iPhone-style QQ chat screenshot and returns a base64-encoded PNG image. The screenshot starts from the given message_id and renders downward. If messages fit on one screen, earlier messages are prepended to fill it (bottom-aligned). If they overflow, later messages are cut off.

Requires: Playwright browser (lazy-started on first call). If the message_id is not found in the buffer, returns an error.

Use get_recent_context first to find valid message_ids. The screenshot is read-only and does not modify the chat.

Read-only. No side effects on the chat.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYes
message_idYes
target_typeNogroup

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds significant behavioral details beyond annotations: Playwright usage, base64 PNG, rendering logic (bottom-aligned, overflow cut), error condition, and read-only nature. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise with three main sentences and extra notes. Front-loaded with purpose. Every sentence adds value, though slight redundancy in read-only statements.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but description specifies base64 PNG and error conditions. Prerequisites and usage flow are clear given sibling tools. Slight gap in target parameter explanation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description must compensate. It explains message_id usage well but does not clarify target (group/user ID?) or target_type (default group). Only partial param semantics covered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool renders a QQ-style dark-mode chat screenshot starting from a given message. It specifies the resource (chat screenshot) and action (render) and differentiates from siblings like send_message or get_recent_context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It advises to use get_recent_context first to find valid message IDs, providing a clear prerequisite. It does not explicitly state when not to use or list alternatives, but the context implies it's for visual output.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_fileA

Download a file from a URL and send it to a QQ group or friend.

Downloads the file to a temporary directory, uploads it to QQ, then cleans up. Supports any file type. For text use send_message, for images use send_image, for audio use send_voice.

Behavior: requires a publicly accessible URL (no auth). Download timeout is 60 seconds. The file is sent as a QQ file attachment.

Mutates the chat by sending a file.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYes
file_urlYes
file_nameNo
target_typeNogroup

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses temporary directory usage, cleanup after upload, support for any file type, 60-second timeout, and that it mutates chat. Adds value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise paragraphs, front-loaded with main purpose, then behavioral details and alternatives. No fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers essential behavioral details and usage distinctions, but lacks explicit parameter descriptions for all four parameters. Output schema absent but acceptable given tool simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage; description mentions file_url and file_name (optional) and target_type (defaults group), but does not explain 'target' parameter (group ID vs friend ID). Partial clarity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it downloads a file from a URL and sends to QQ group/friend. Distinguishes from siblings by naming send_message, send_image, send_voice for alternative content types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use (download and send file from URL) and when not (text, image, audio). Mentions requirement of publicly accessible URL without auth.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_group_noticeA
Idempotent

Send a group announcement (notice) to a QQ group.

group_id: the QQ group number. content: the announcement text (plain text only, no rich media). Requires bot to have admin privileges. The notice appears in the group's announcement bar for all members. Unlike send_message, this is persistent and visible to members who join later. Avoid posting notices too frequently — QQ may rate-limit or throttle excessive notices.

Mutates the group by posting an announcement.

ParametersJSON Schema
NameRequiredDescriptionDefault
group_idYes
contentYes

TDQS

A3.8/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description contradicts the idempotentHint annotation (true) by warning that excessive notices may be rate-limited, implying non-idempotent behavior. Annotations already indicate mutation (readOnlyHint=false), but the description adds useful admin privilege requirement and rate limit warning; nevertheless, the contradiction mandates a score of 1.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (5 lines) and front-loaded with the core purpose. Every sentence adds value: purpose, parameters, requirements, caveats, and sibling differentiation. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description covers prerequisites (admin privileges), behavior (persistent, visible to all), side effects (mutates group), and a caveat (rate limiting). It lacks return value or error details, but overall is sufficient for a mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates by explaining group_id as 'the QQ group number' and content as 'announcement text (plain text only)'. This adds meaning beyond the schema, though format details are minimal.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool sends a group announcement to a QQ group, using specific verbs ('send') and resources ('group announcement'). It distinguishes from the sibling tool send_message by noting persistence and visibility to later joiners.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool (persistent notices) and contrasts it with send_message. It warns about rate limiting and suggests not posting too frequently, but does not explicitly list when not to use it or other alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_imageA

Send a base64-encoded image to a QQ group or friend.

For text messages use send_message. For audio use send_voice. For files use send_file. This tool only sends images.

Behavior: same rate limiting and dedup as send_message. The image is sent as a QQ-native image (not a file attachment).

Mutates the chat by sending an image.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYes
imageYes
target_typeNogroup
reply_toNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false (mutates). The description adds context: 'same rate limiting and dedup as send_message', 'sent as QQ-native image', and explicitly states 'Mutates the chat'. No contradictions with annotations and adds useful behavioral details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is five sentences without wasted words. Each sentence adds distinct value: purpose, sibling alternatives, exclusivity, behavioral note, mutation acknowledgment. Front-loaded with the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and 4 parameters, the description covers the core functionality but omits error handling, response format, size limits, and authentication. The openWorldHint suggests unknown side effects not clarified. Adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must explain parameters. It clarifies that 'image' is base64-encoded and that 'target_type' defaults to group, but does not explain 'target' format, 'reply_to', or constraints like allowed image formats/sizes. Insufficient compensation for missing schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool sends a base64-encoded image to a QQ group or friend. It explicitly distinguishes from siblings like send_message, send_voice, and send_file, leaving no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use guidance by referencing siblings: 'For text messages use send_message. For audio use send_voice. For files use send_file. This tool only sends images.' It lacks mention of prerequisites or edge cases but is above average.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_messageA

Send a text message to a QQ group or friend, optionally waiting for a reply.

This is the primary tool for sending text messages. It supports message splitting via </分段> tags or punctuation-based chunking. The message is sent immediately and the bot's own message is written to the buffer.

To split a reply into multiple messages, insert </分段> at split points. For example: "Hi</分段>How are you?" sends two separate messages.

Behavior: rate-limited (60s dedup window), duplicate content within 60s is blocked. After sending, blocks until a reply arrives (unless wait_reply=False). The reply includes the full message objects.

Use send_image for images, send_voice for audio, send_file for files. For a standalone wait without sending, use wait_for_reply.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYes
contentYes
target_typeNogroup
reply_toNo
split_contentNo
num_chunksNo
wait_replyNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses rate-limiting (60s dedup window), blocking behavior on reply, and reply content. Annotations are minimal, so description adds significant context beyond readOnlyHint and destructiveHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with core function, example, behavior, and alternatives grouped. Slightly verbose but every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers usage, behavior, splitting, and alternatives. Lacks error cases and full reply format, but is sufficient for a messaging tool given 7 params and no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, the description partially compensates by explaining content splitting and wait_reply behavior, but lacks explicit description for all parameters (e.g., num_chunks is only indirectly hinted).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool sends a text message to a QQ group or friend with optional reply waiting. It distinguishes from siblings by naming alternative tools for images, audio, files, and standalone waiting.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides when to use alternatives (e.g., send_image for images) and describes message splitting technique with </分段> tags. This guides the agent to choose correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_voiceA

Send a base64-encoded voice message to a QQ group or friend.

NapCat auto-converts common audio formats (MP3, WAV, AMR, OGG, FLAC) to SILK for QQ voice playback. For text use send_message, for images use send_image, for files use send_file.

Behavior: same rate limiting as send_message. Voice messages cannot be replied to (no reply_to parameter).

Mutates the chat by sending a voice message.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYes
audioYes
target_typeNogroup

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses auto-conversion to SILK, same rate limiting, and no reply_to parameter. Annotations confirm mutation (readOnlyHint=false). Adds valuable context beyond annotations, though could mention size limits or error cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with main purpose, followed by conversion info and sibling comparisons. Three sentences plus a behavior note are concise and well-structured. Could be slightly more streamlined, but effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, usage alternatives, conversion, and behavioral constraints. No output schema needed; complexity moderate. Missing explicit parameter details but otherwise complete for sending a voice message.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%. Description does not explicitly map parameters to variables. While overall context hints at target and audio, it lacks detailed semantics for each parameter, which is needed given no schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb 'Send' with specific resource 'base64-encoded voice message to a QQ group or friend.' Differentiates from siblings like send_message, send_image, send_file by naming alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use this tool vs alternatives ('For text use send_message...'). Also mentions rate limiting same as send_message and notes that voice messages cannot be replied to.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_member_cardA
Idempotent

Set a member's group nickname (card). Empty string clears it.

group_id: the QQ group number. user_id: the QQ number. card: the new nickname text. Requires bot to have admin privileges.

Mutates the member's group card.

ParametersJSON Schema
NameRequiredDescriptionDefault
group_idYes
user_idYes
cardNo

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=false, destructiveHint=false, idempotentHint=true. The description adds that it 'Mutates the member's group card,' which aligns. It does not disclose additional behavioral traits like rate limits or error handling, but the annotation coverage is sufficient to avoid major gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with three sentences, each serving a purpose: purpose, parameter explanation, privilege and mutation note. It is front-loaded and contains no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, the description covers the essential: what it does, parameters, and admin requirement. It lacks details on possible errors or validation (e.g., invalid card length), but for a straightforward mutation, it is almost complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates by explaining each parameter: 'group_id: the QQ group number. user_id: the QQ number. card: the new nickname text.' It adds meaning beyond schema, but could be more explicit about formats (e.g., numeric strings).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Set a member's group nickname (card)' with the verb 'set' and resource 'member's group nickname'. It also notes the empty string behavior, distinguishing it from any sibling tool that might alter member properties.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes a crucial prerequisite: 'Requires bot to have admin privileges.' It implicitly guides when to use this tool (to change a nickname). However, it does not explicitly mention when not to use it or provide alternatives, though no direct competitor exists among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_wake_configA
Idempotent

Configure the wake target window and focus shortcut.

window_title_patterns: substrings to match against the window title (e.g., ["opencode", "cursor"]). The wake system focuses the first matching window. focus_shortcut: keyboard shortcut to focus the input box (e.g., "ctrl+l"). Changes take effect immediately.

Mutates the wake configuration. Persisted across restarts.

ParametersJSON Schema
NameRequiredDescriptionDefault
window_title_patternsNo
focus_shortcutNo

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide idempotentHint=true and readOnlyHint=false. The description adds that changes 'take effect immediately' and are 'persisted across restarts,' which goes beyond the annotations. However, it does not disclose potential side effects, permission requirements, or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (~80 words) and well-structured: it starts with the overall purpose, then explains each parameter, and ends with behavioral notes. Every sentence adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 optional parameters, no output schema), the description covers the core functionality and persistence. It lacks explicit mention of what happens when both parameters are null (likely resetting to defaults), but this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 0% coverage (no parameter descriptions), so the description fully compensates by explaining both parameters in detail: window_title_patterns are substrings for matching window titles, and focus_shortcut is a keyboard shortcut for focusing the input box. Examples are provided, adding essential meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Configure the wake target window and focus shortcut.' It uses a specific verb and resource, and the explanation of parameters distinguishes it from sibling tools like get_wake_config (read-only) and add_wake_rule (adds rules rather than setting config).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide explicit guidance on when to use this tool versus alternatives such as add_wake_rule or set_wake_enabled. It only describes what it does without context about appropriate scenarios or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_wake_enabledA
Idempotent

Enable or disable a specific wake rule (or all rules if index is None).

Use list_wake_rules to see current indices and states. Disabled rules are skipped during wake matching but remain in the configuration. Use remove_wake_rule to permanently delete a rule.

Mutates the wake rule configuration.

ParametersJSON Schema
NameRequiredDescriptionDefault
indexYes
enabledYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate non-readOnly, non-destructive, idempotent. Description adds context that mutation occurs and what disable means (skipped but kept). No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with main action, no redundant sentences, efficient and clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple toggle tool with two parameters, the description covers purpose, usage, and behavioral effects adequately with no output schema needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage. Description adds that index can be None (all rules) but this contradicts schema which marks index as required integer. Otherwise, parameters are minimally explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (enable/disable) and resource (wake rule), and distinguishes from siblings like list_wake_rules and remove_wake_rule.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance: use list_wake_rules to see current indices/states, explains disabled rules are skipped but remain, and directs to remove_wake_rule for permanent deletion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_wake_pendingA
Idempotent

Manually set the wake pending state to block or allow new wakes.

When pending=True, incoming messages will NOT trigger wake even if they match a rule. When pending=False, messages trigger wake normally. Use this to prevent duplicate wakes while the agent is already working.

Mutates the wake monitor state.

ParametersJSON Schema
NameRequiredDescriptionDefault
pendingYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral detail beyond annotations: explains what happens when pending is True vs False, and states 'Mutates the wake monitor state.' Annotations already indicate idempotentHint=true and non-read-only, and the description aligns without contradiction, adding useful context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (5 short sentences) and front-loaded with the tool's purpose. Every sentence adds value, with no fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (single boolean parameter, no output schema), the description is largely complete. It explains the parameter, use case, and side effects. Minor gaps: no mention of permissions, error conditions, or return values, but these are not critical for a simple state setter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema coverage, the description fully explains the sole parameter 'pending' by detailing the behavior for True and False values. This adds significant meaning beyond the schema, which only specifies type and required status.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: manually set the wake pending state to block or allow new wakes. It uses specific verbs ('set', 'block', 'allow') and identifies the resource ('wake pending state'). However, it does not explicitly differentiate from sibling tools like set_wake_config or set_wake_enabled, but the distinct boolean parameter makes the purpose clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a use case: 'Use this to prevent duplicate wakes while the agent is already working.' This gives context but lacks explicit guidance on when not to use it or alternatives (e.g., set_wake_enabled) that 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.

test_wake_activationA
Idempotent

Manually trigger the wake activation sequence to verify it works.

Sends a test keystroke to the opencode window. Use this to verify the wake system is functional. On Linux, this always returns False (wake is Windows-only). Does not affect any QQ messages.

Read-only with respect to QQ. May type text into opencode window.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description says 'sends a test keystroke' which is not idempotent, contradicting idempotentHint: true. Also adds platform behavior but contradiction lowers score.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five sentences, front-loaded purpose, no wasted words, each sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, usage, platform, and effect on QQ. Missing explicit return values for Windows, but sufficient for a no-param tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters; schema coverage 100% so baseline 3. Description adds no param info.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it manually triggers wake activation and sends test keystroke. Distinguishes from siblings by specifying it's for verification.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says use to verify wake system functionality and notes platform limitation. No explicit alternatives mentioned but context sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unmute_memberA
Idempotent

Unmute a member in a QQ group (set mute duration to 0).

group_id: the QQ group number. user_id: the QQ number to unmute. Requires bot to have admin privileges. Use mute_member to mute. Unmuting a member who is not muted is a no-op (returns success). Call get_group_member_list first to verify a member is currently muted before deciding to unmute.

Mutates the group by unmuting a member.

ParametersJSON Schema
NameRequiredDescriptionDefault
group_idYes
user_idYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes mutation effect ('Mutates the group by unmuting a member'), idempotency (no-op if already unmuted), and admin privilege requirement. Adds value beyond annotations which already indicate idempotent and non-destructive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Multiple sentences but each adds essential information (action, parameters, requirements, behavior, alternatives). Front-loaded with main purpose. Could be slightly shorter but still efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, description covers return behavior (success), idempotency, and prerequisites. Sufficient for a simple mutation tool. Annotations already cover safety and idempotency.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds context to both parameters by calling group_id a 'QQ group number' and user_id a 'QQ number', clarifying their meaning beyond the schema's generic titles. Schema coverage 0%, so description compensates well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Unmute a member in a QQ group', providing specific verb and resource. Distinguishes from sibling 'mute_member' by mentioning it. No ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use (when member is muted), when-not (no-op if not muted), prerequisites (admin privileges, check member list via get_group_member_list), and alternatives (mute_member). Comprehensive guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wait_for_replyA
Read-onlyIdempotent

Block until a new message arrives from a specific group or friend.

Use this as a standalone follow-up after send_message (with wait_reply=False) or when you need to wait for a reply without sending first. Returns only messages from others (not the bot's own). Times out after timeout seconds (max 300).

If you want to send a message AND wait for a reply in one call, use send_message with wait_reply=True instead — it's simpler.

Read-only. No side effects on the chat.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYes
target_typeNogroup
timeoutNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds value beyond annotations: describes blocking behavior, timeout (max 300), return filtering (only others' messages), and explicitly states read-only and no side effects. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise, well-structured with clear sections. Front-loaded with purpose. Every sentence adds distinct value, no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 3 parameters, no output schema, and siblings, description fully explains behavior, constraints, side effects, and use cases. References sibling tool send_message for combined functionality. Complete for its complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description compensates by explaining the timeout parameter and its max value. Implicitly describes target as 'specific group or friend' and target_type via context, though not as precisely as possible. Adds meaningful guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it blocks until a new message arrives from a specific group or friend, distinguishes from send_message by noting it returns only others' messages and has a timeout. Differentiates from sibling send_message by specifying when to use each.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs when to use: as a standalone follow-up after send_message with wait_reply=False or when waiting without sending first. Clearly tells when not to use: if sending and waiting in one call, use send_message with wait_reply=True. Provides alternative.

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.

  1. 1 tool updatev0.1.1
    • Changedset_wake_enabled4 fields changed
      • removedInput schema / properties / index / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / index / default
        Removed value: -null
      • addedInput schema / properties / index / type
        Added value: +"integer"
      • changedInput schema / required
        Previous value: -[
        -  "enabled"
        -]New value: +[
        +  "index",
        +  "enabled"
        +]
  2. 33 tool updatesv0.1.0
    • First observedadd_timer
    • First observedadd_wake_rule
    • First observedbatch_get_recent_context
    • First observedcheck_status
    • First observedcompress_context
    • First observeddebug_wake_pipeline
    • First observeddiagnose_wake
    • First observedget_friend_list
    • First observedget_group_list
    • First observedget_group_member_info
    • First observedget_group_member_list
    • First observedget_recent_context
    • First observedget_wake_config
    • First observedkick_member
    • First observedlist_timers
    • First observedlist_wake_rules
    • First observedmute_member
    • First observedrecall_message
    • First observedremove_timer
    • First observedremove_wake_rule
    • First observedscreenshot_chat
    • First observedsend_file
    • First observedsend_group_notice
    • First observedsend_image
    • First observedsend_message
    • First observedsend_voice
    • First observedset_member_card
    • First observedset_wake_config
    • First observedset_wake_enabled
    • First observedset_wake_pending
    • First observedtest_wake_activation
    • First observedunmute_member
    • First observedwait_for_reply

TDQS

A4.1/5.0

Scored across 33 tools

Disambiguation5/5

Each tool has a clearly distinct purpose, with descriptions explicitly differentiating them (e.g., send_message vs send_image vs send_voice). Overlap is minimal and well-documented.

Naming Consistency5/5

All tools follow a consistent verb_noun snake_case pattern (e.g., add_timer, list_timers, send_message). No mixing of conventions.

Tool Count3/5

33 tools is high, but the domain (QQ bot management, wake rules, timers, configuration) justifies the count. Still, it feels heavy compared to typical well-scoped sets.

Completeness4/5

The tool surface covers the core domain comprehensively: messaging, group management, context handling, wake configuration, and debugging. Minor gaps exist (e.g., no message editing), but overall coverage is strong.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    An MCP server that enables AI clients to send and receive QQ messages through NapCatQQ (OneBot v11) for both private and group chats. It supports message context management, real-time WebSocket listening, and human-like typing simulation.
    7
    25
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A MCP server that exposes QQ bot capabilities over Streamable HTTP, enabling clients to query bot status, read group and friend info, fetch chat history, and send group/private text messages.
    2
    MIT