mcp-qzone-safe
Provides tools for interacting with QQ 空间 (Qzone): viewing a user's latest posts, reading comments and nested replies, liking posts, commenting or replying to comments, and publishing posts, with safety gates such as whitelists, rate limits, deduplication, and audit logging.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-qzone-safecheck the latest QZone posts from 123456789 and like the newest one"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-qzone-safe
把 QQ 空间接给大模型的 MCP 服务:看说说、点赞、评论(含楼中楼回复)、发说说——每一件都过闸门。
为什么需要它:QQ 空间没有给 AI 用的接口。直接暴露太危险(乱评论、刷屏、@错人)。 这个 MCP 的设计前提是:先保证不闯祸,再谈能做什么。
工具
工具 | 作用 | 写操作 |
| 看某个 QQ 号的最新说说 | ❌ |
| 读某条说说的评论(含楼中楼) | ❌ |
| 点赞 | ✅ 限频 + 去重 |
| 评论 / 回复某条评论 | ✅ 限频 + 去重 + 字数 |
| 发说说 | ✅ 默认关闭 |
| 好友名册(她给每个人写的定义) | ✅ 本地文件 |
Related MCP server: qq-onebot-mcp
五道闸门
闸门 | 默认值 | 说明 |
白名单 | 空 | 只能对 |
去重 | 24 小时 | 同一条说说只能赞一次 / 评一次 |
限频 | 赞 20/时、50/天;评论 3/时、10/天;发说说 1/天 | 评论比点赞严得多 |
长度 | 评论 120 字、说说 300 字 | 且拒绝 CQ 码 |
审计 | 全量 | 每次调用写 |
发说说默认关闭,必须显式 publishEnabled: true 才能用。
安装
npm install -g mcp-qzone-safe需要有一个兼容 OneBot v11 的网关(例如 SnowLuma)在跑。
配置
配置文件默认 ~/.config/qzone-safe/config.json(可用 QZONE_CONFIG 覆盖):
{
"onebot": {
"baseUrl": "http://127.0.0.1:3000",
"token": "your-access-token"
},
"allowUins": ["123456789"],
"groupUinsFrom": ["987654321"],
"limits": {
"like": { "perHour": 20, "perDay": 50 },
"comment": { "perHour": 3, "perDay": 10 },
"publish": { "perHour": 1, "perDay": 1 }
},
"maxCommentChars": 120,
"maxPublishChars": 300,
"publishEnabled": false
}也可以用环境变量覆盖:
变量 | 说明 |
| OneBot 地址,默认 |
| 访问令牌 |
| 配置文件路径 |
| 状态目录(审计/限频),默认 |
|
|
| 可选:与宿主(如 qq-bridge)共用状态目录 |
接到 MCP 客户端
以 DSH 为例:
- id: mcp-qzone-safe
name: '@deepseek-ai/dsh-mcp'
config:
command: npx
args: ['-y', 'mcp-qzone-safe']
env:
QZONE_ONEBOT_URL: http://127.0.0.1:3000
QZONE_ONEBOT_TOKEN: ${SNOWLUMA_TOKEN}关于楼中楼回复
QQ 空间的回复是二级评论,get_qzone_msg_detail 只把一级评论列在 comments 里,
回复藏在每条的 replies 下——只看 comment_num 会以为“没回”。
调用时要传:
{
"tid": "说说 id",
"content": "回复内容",
"comment_id": "1", // 一级评论的 commentId(不是 "0")
"comment_uin": "123456" // 被回复评论的作者
}comment_id 传错是最常见的失败原因(-10049)。
与宿主的联动(可选)
设置了 QZONE_BRIDGE_STATE_DIR 后,会同步这几个文件:
文件 | 作用 |
| 记录“我回过谁”,避免重复回 |
| 待回复队列,回完自动移除 |
| 我发过哪些评论,用来追踪别人的回复 |
| 好友名册 |
不设置就完全独立运行,只是没有这些联动。
开发
src/config.js 配置解析(环境变量 > 文件 > 默认)
src/guard.js 限流/去重(纯函数,有单测)
src/format.js 说说/评论整理 + 文本校验(纯函数,有单测)
src/index.js MCP 服务与工具
test/ node:testnpm test许可
MIT © 2026 HOHOLI
验证过的场景(真跑)
层 | 命令 | 覆盖 | 结果 |
单元 |
| 限频/去重/文本校验/说说解析 | 8/8 |
MCP 协议(真实 OneBot) |
| 列工具、读说说、读评论、白名单拦截、publish 关闭、好友名册 | 7/7 |
协议层测试只调用读接口(qzone_see_posts / qzone_comments / friend_list),
不会点赞、不会评论、不会发说说——避免在真实账号上留下痕迹。
写操作的闸门由单元测试覆盖:24 小时去重、每小时/每天上限、长度限制、CQ 码拒绝、
白名单校验。真实写操作请先用 publishEnabled: false + 小号自测。
实测发现的问题(写在这,避免重踩)
楼中楼的
comment_id不是"0"—— 必须传一级评论的真实 id(通常是"1"等), 传"0"会得到-10049 该条内容已被删除。回复的可见性 —— 回复挂在
replies里,comment_num只统计一级评论; 只数comment_num会误以为「没回复」。target_uin是说说主人,不是评论者 —— 传成评论者会直接失败。群里的人不等于好友 —— 白名单可以配置成「自动并入某个群的成员」(
groupUinsFrom)。
写操作实测(真实 QQ 空间)
在真实账号上跑过一轮,确认「点赞 / 评论」确实落到空间上:
动作 | 结果 | 怎么验证的 |
评论别人的说说 | ✅ 成功 | 拉说说详情,评论区里能看到她写的那句 |
点赞别人的说说 | ✅ 成功 |
|
发说说 | ✅ 成功 | 发布后 |
实测抓到的 bug(已修)
qzone_comments没传target_uin—— 看别人的说说时桥接返回-8 原文已经被删除, 而那条说说其实好好的。现在target_uin作为可选参数透传。qzone_like成功后没写限频记录 —— 同一条可以说无限重复点赞,每小时/每天上限形同虚设。评论去重 key 多了个空冒号(
tid:)—— 已改成直接用 tid。
这三条都是「单元测试全绿但真实环境会坏」的典型:mock 不会模拟桥接对参数的要求, 也发现不了「忘记写记录」这种逻辑遗漏。所以协议层测试必须连真实 OneBot。
Available Tools
7 toolsfriend_listA
查看好友名册(谁写过定义、谁还没写)。返回每个好友的 uin / 名字 / 关系 / 语气 / 备注。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden. It does usefully disclose the shape of each returned record (uin / name / relationship / tone / notes), which compensates for the missing output schema, but says nothing about result size, pagination, ordering, or auth requirements for a zero-arg tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the purpose and its scope qualifier come first, then the return payload. Nothing is redundant and every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with no output schema, the description covers what the tool does and what comes back, which is most of what an agent needs. It stops short of stating whether the whole roster is always returned or whether the caller must handle large lists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters and the schema is empty, so there is nothing for the description to disambiguate. Baseline 4 applies; the enumerated return fields are a bonus rather than a parameter explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('查看好友名册') plus a distinguishing scope detail — whether each friend has written a definition or not. That separates it from a pure friend-note writer like friend_note, though the description never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The read-only listing intent is implied by '查看' and by the fact it returns a roster, but there is no explicit statement of when to call this instead of friend_note or the qzone_* tools. The agent must infer that this is the lookup step before writing notes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
friend_noteA
给一个好友写下你的定义(名字/关系/该怎么跟他说话/备注)。传了哪项就更新哪项,notes 会追加。
| Name | Required | Description | Default |
|---|---|---|---|
| uin | Yes | 好友 QQ 号 | |
| name | No | 你对他/她的称呼 | |
| note | No | 一条备注(追加) | |
| tone | No | 该怎么跟他说话(语气/分寸) | |
| relation | No | 他/她跟你是什么关系 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full load and does disclose two meaningful behaviors: it is a partial update (only supplied fields change, others presumably preserved) and the note field is append-only rather than overwritten. It does not say what happens to unset fields explicitly, whether existing values can be cleared, or what the call returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the purpose then the update semantics; no filler. Minor deduction for the plural 'notes' reference that does not match the schema's 'note' parameter name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter mutation tool with no annotations and no output schema, the definition covers the core contract (partial update, append semantics) but leaves open whether the friend must pre-exist, whether fields can be reset, and what the response contains. Adequate, not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so each of the five parameters already has a Chinese description in the schema; the description largely restates those field names. The one piece of added meaning is the append behavior of the note field, but it refers to it as 'notes' while the schema parameter is singular 'note', a small mismatch that could confuse mapping.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: writing your own definition/profile for a friend, with the four field groups enumerated (name/relation/tone/note). It is distinguishable from siblings like friend_list (listing) and the qzone_* tools (posting/liking), though it never explicitly contrasts itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the update semantics ('传了哪项就更新哪项') which implies this is the tool to call whenever you want to set or amend any part of a friend's profile. There is no explicit when-not guidance, no mention of prerequisites (e.g. the friend must already exist / be in the friend list), and no pointer to an alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qzone_commentA
评论某条说说,或回复某条评论(楼中楼)。需要 target_uin + tid + content。要回复评论时,额外传 comment_id + comment_uin(从 qzone_comments 拿)。≤120 字,禁止 CQ 码。同一条 24h 内只能评一次,每小时最多 3 条、每天最多 10 条。
| Name | Required | Description | Default |
|---|---|---|---|
| tid | Yes | 说说 tid | |
| content | Yes | 评论正文,纯文本 | |
| reply_uin | No | 楼中楼里要回复的那个人的 QQ 号(可选) | |
| comment_id | No | 要回复的一级评论 id(qzone_comments 返回的 commentId) | |
| reply_name | No | 楼中楼里要回复的那个人的昵称(可选) | |
| target_uin | No | 说说归属的 QQ 号;评论自己的说说可以不传 | |
| comment_uin | No | 被回复评论的作者 QQ 号 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses hard rate limits (once per post per 24h, 3/hour, 10/day) and content constraints (≤120 characters, CQ codes forbidden). These are non-obvious operational rules that would otherwise cause silent failures; only auth requirements and return behavior are unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then mode requirements, then hard constraints — a sensible ordering with no filler sentences. It is telegraphic and slightly terse (e.g. '需要 target_uin + tid + content' compresses a conditional into an apparent requirement), but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutation tool with no annotations and no output schema, the description covers the two things an agent most needs: which parameters pair with which mode and the quotas that will reject calls. It does not describe the success response or how quota violations surface as errors, which leaves a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real meaning: it groups parameters by mode (target_uin + tid + content vs. the extra comment_id + comment_uin) and tells the agent where to source the comment ids. Minor issue: it lists target_uin as required while the schema marks it optional for one's own posts.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource (评论某条说说) and immediately distinguishes the two modes: commenting on a post vs. replying to a comment (楼中楼). An agent can tell it apart from qzone_like/qzone_publish without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the conditional path: pass only tid + content normally, and add comment_id + comment_uin when replying to a comment. It even names the sibling tool that produces those ids (从 qzone_comments 拿), which is exactly the routing guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qzone_commentsA
读取某条说说下面的评论(只读)。tid 从 qzone_see_posts 拿;能翻页(pos/num)。返回每条评论的作者/时间/内容,以及楼中楼回复。
| Name | Required | Description | Default |
|---|---|---|---|
| num | No | 取多少条,默认 20 | |
| pos | No | 评论起始偏移,默认 0 | |
| tid | Yes | 说说 tid(qzone_see_posts 返回的) | |
| target_uin | No | 说说主人的 QQ 号(看别人的说说必填,否则桥接返回 -8「原文已被删除」) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It helpfully declares read-only behavior and describes the return structure (author/time/content plus nested 楼中楼 replies), but says nothing about failure modes, pagination termination, or whether target_uin is needed for other users' posts — that caveat lives only in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact block of clauses with zero wasted wording. The read-only marker, the tid dependency, and the pagination capability are all front-loaded before the return-value note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly fills in the return shape (per-comment author/time/content and nested replies) and explains pagination. It stops short of the error behavior documented only in the schema, but is otherwise adequate for this four-parameter read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including tid, pos, num, and target_uin is already documented. The description only restates the tid source and pagination idea, adding essentially no new parameter meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource (读取某条说说下面的评论), marks it read-only (只读), and points to qzone_see_posts as the source of tid. This lets it be distinguished from the write-side sibling qzone_comment, though it never names that alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear operating context: tid comes from qzone_see_posts, and pos/num enable pagination. It does not state when to use this instead of qzone_comment when the user wants to post, so the guidance covers only the read path and lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qzone_likeA
给某条说说点赞。需要 target_uin + tid(先 qzone_see_posts 拿)。同一条 24h 内只能赞一次,有频率上限。
| Name | Required | Description | Default |
|---|---|---|---|
| tid | Yes | 说说 tid | |
| target_uin | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose two real behavioral traits that are not in any structured field: a 24h per-post idempotency limit and a frequency cap. It omits auth/login requirements, what error surfaces when the 24h window is hit, and what a successful call returns, which matters for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short clauses, front-loaded with the action, then the required inputs, then the limits. No filler and no repetition of what the schema already states.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation with no annotations and no output schema, the essentials (what it does, where to get the IDs, rate and dedupe limits) are present. Auth requirements and failure/return semantics are absent, which leaves it adequate rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%: tid is documented but target_uin has no schema description at all. The description partially compensates by naming both parameters and pointing to qzone_see_posts as their source, but it never explains what target_uin identifies (the post owner's UIN vs. the viewer), leaving the undocumented parameter only half-clarified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource (给某条说说点赞 - like a specific Qzone post), which is unambiguous and distinct from the sibling write tools (qzone_comment, qzone_publish). It also names qzone_see_posts as the source of the required identifiers, so an agent can place it in the workflow without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit prerequisite call (先 qzone_see_posts 拿) and a hard constraint that effectively defines a when-not case: the same post cannot be liked again within 24 hours. No guidance on what to do if the like fails or on permission requirements, but the practical usage path is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qzone_publishC
【当前禁用】发表说说需要管理员在配置文件里设置 publishEnabled: true 并重启本服务。
| Name | Required | Description | Default |
|---|---|---|---|
| images | No | ||
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations, the description carries the full burden. It does disclose a meaningful operational prerequisite — it is disabled by default and requires a config flag plus a service restart — which is genuinely useful context not found in the schema. It says nothing about side effects, permissions, rate limits, or what a successful publish returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the most decision-relevant fact ([当前禁用]) front-loaded, followed by the exact remediation step. Nothing is padded, though the space saved comes at the cost of omitting any actual purpose or parameter detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations, no output schema, and 0% schema description coverage, the definition is thin: it explains why the tool cannot be used but not what it does when enabled. The disabled state is the most important fact and is covered, which keeps this above a 1.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description was expected to explain the two parameters, yet neither 'content' nor 'images' (up to 9 items) is mentioned. The only implicit hint is that '说说' involves text. An agent learns nothing about content length limits, image URL format, or whether images are required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description labels the resource ('发表说说', i.e. publish a Qzone status) but never states the operation in a self-contained way; its dominant content is a disabled notice. An agent can guess this tool publishes a post, but it cannot distinguish its exact scope from siblings such as qzone_comment or qzone_see_posts from this text alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives strong negative guidance: the tool is 当前禁用, and enabling it requires an admin to set publishEnabled: true and restart the service, which effectively tells the agent not to call it. However, it offers no alternative for the same goal (no routing to a sibling tool) and no description of when the enabled tool should be chosen.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qzone_see_postsA
查看某个 QQ 号的最新说说(只读)。返回 tid(评论/点赞要用)、正文摘要、图片数、评论数、总条数。target_uin 必须在白名单内。
| Name | Required | Description | Default |
|---|---|---|---|
| num | No | 取几条,默认 3 | |
| target_uin | Yes | 要查看的 QQ 号 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does well: it discloses read-only behavior, the whitelist authorization requirement on target_uin, and the returned fields (tid, 正文摘要, 图片数, 评论数, 总条数). It omits failure behavior when the account is outside the whitelist and any rate/ordering caveats, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: purpose first, then return values, then the hard constraint. No filler and nothing repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only tool with no output schema, the description usefully enumerates what comes back and flags the whitelist gate, so an agent can call it without guessing. Only the behavior on a non-whitelisted target_uin and any ordering/paging nuance are unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds a genuine operational constraint not present in the schema: target_uin must be in the whitelist. The num parameter's semantics (default 3, max 5) are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("查看某个 QQ 号的最新说说") plus the read-only nature, which is clearly distinct from siblings like qzone_publish or qzone_like. It does not explicitly name a sibling alternative, so sibling differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical "(只读)" and the note that the returned tid is what 评论/点赞 need imply this is the discovery step before qzone_comment/qzone_like. However, no explicit when-to-use or when-not-to-use rule is given, and the whitelist prerequisite is stated as a constraint rather than as guidance on what to do if it fails.
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.
7 tool updates
v0.2.0- First observed
friend_list - First observed
friend_note - First observed
qzone_comment - First observed
qzone_comments - First observed
qzone_like - First observed
qzone_publish - First observed
qzone_see_posts
TDQS
Scored across 7 tools
Most tools target clearly distinct resources/actions (read posts, read comments, like, comment, list friends, write friend note). However, qzone_comment (write a comment) and qzone_comments (read comments) differ by a single 's' and both read as plausible for either meaning, a genuine misselection risk. The descriptions disambiguate once read, but the names alone do not.
A two-prefix scheme (qzone_* for post interactions, friend_* for roster operations) is readable and roughly domain-driven. But within qzone_*, forms are mixed: verb phrases (qzone_see_posts, qzone_like, qzone_publish) alongside bare nouns (qzone_comments) and a near-duplicate singular/plural pair. friend_list/friend_note are noun phrases, adding to the inconsistency.
Seven tools is well within the sweet spot for a scoped Qzone interaction server. Each tool maps to a distinct operation (view posts, view comments, like, comment, list friends, annotate friend, publish) with no filler.
The read-and-interact lifecycle is covered: fetch posts, fetch comments, like, comment/reply, plus a friend roster and note-writing flow with whitelist constraints. Gaps are minor but real: no unlike, no delete/edit of comments or posts, and qzone_publish is hard-disabled, so post creation is a deliberate dead end agents cannot work around.
Maintenance
Related MCP Connectors
MCP server for QPost — lets AI agents publish video and image posts to YouTube, TikTok, Instagram.
Post and schedule to LinkedIn, X, Bluesky, Discord, Telegram and Mastodon from AI agents.
Schedule and analyze posts on 12 networks, incl. Bluesky, Mastodon and Telegram, from any AI agent
Publish and schedule social posts across your PostingCat accounts from AI agents.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI to post, view, comment, reply, like, and delete QQ Space (QZone) entries through natural language.1-
- FlicenseAqualityBmaintenanceEnables MCP hosts to bridge with QQ via NapCat/OneBot 11, allowing whitelisted private messages to reach an agent with full tool access while group mentions are answered by a sandboxed pure LLM without system access.8-
- AlicenseAqualityCmaintenanceEnables interaction with QQ through official bot APIs or personal accounts bridged via NapCat/OneBot v11, including status checks, target listing, bounded context retrieval, and plain-text sending to allowlisted conversations.5MIT
- AlicenseNot gradedqualityCmaintenanceEnables an AI agent to fetch queued OneBot v11 QQ private and group messages, retrieve inbound images for vision-capable models, and send text, images, or files with request-id deduplication. Also exposes acknowledgment, message history, conversation and contact listing, delivery status, and bridge health so agents can drive a persistent SQLite-backed QQ message loop.MIT