Skip to main content
Glama
mcp-qzone-safe

mcp-qzone-safe

by hoholi-668

mcp-qzone-safe

把 QQ 空间接给大模型的 MCP 服务:看说说、点赞、评论(含楼中楼回复)、发说说——每一件都过闸门。

为什么需要它:QQ 空间没有给 AI 用的接口。直接暴露太危险(乱评论、刷屏、@错人)。 这个 MCP 的设计前提是:先保证不闯祸,再谈能做什么。

工具

工具

作用

写操作

qzone_see_posts

看某个 QQ 号的最新说说

❌

qzone_comments

读某条说说的评论(含楼中楼)

❌

qzone_like

点赞

✅ 限频 + 去重

qzone_comment

评论 / 回复某条评论

✅ 限频 + 去重 + 字数

qzone_publish

发说说

✅ 默认关闭

friend_list / friend_note

好友名册(她给每个人写的定义)

✅ 本地文件

Related MCP server: qq-onebot-mcp

五道闸门

闸门

默认值

说明

白名单

空

只能对 allowUins 里的号操作;可自动并入指定群的成员

去重

24 小时

同一条说说只能赞一次 / 评一次

限频

赞 20/时、50/天;评论 3/时、10/天;发说说 1/天

评论比点赞严得多

长度

评论 120 字、说说 300 字

且拒绝 CQ 码

审计

全量

每次调用写 <stateDir>/audit.jsonl

发说说默认关闭,必须显式 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
}

也可以用环境变量覆盖:

变量

说明

QZONE_ONEBOT_URL

OneBot 地址,默认 http://127.0.0.1:3000

QZONE_ONEBOT_TOKEN

访问令牌

QZONE_CONFIG

配置文件路径

QZONE_STATE_DIR

状态目录(审计/限频),默认 ~/.local/share/qzone-safe

QZONE_PUBLISH_ENABLED

true 时打开发说说

QZONE_BRIDGE_STATE_DIR

可选:与宿主(如 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 后,会同步这几个文件:

文件

作用

qzone-watch.json

记录“我回过谁”,避免重复回

qzone-pending-comment.json

待回复队列,回完自动移除

qzone-my-comments.json

我发过哪些评论,用来追踪别人的回复

friends.json

好友名册

不设置就完全独立运行,只是没有这些联动。

开发

src/config.js   配置解析(环境变量 > 文件 > 默认)
src/guard.js    限流/去重(纯函数,有单测)
src/format.js   说说/评论整理 + 文本校验(纯函数,有单测)
src/index.js    MCP 服务与工具
test/           node:test
npm test

许可

MIT © 2026 HOHOLI

验证过的场景(真跑)

层

命令

覆盖

结果

单元

npm test

限频/去重/文本校验/说说解析

8/8

MCP 协议(真实 OneBot)

QZONE_ONEBOT_URL=... QZONE_ONEBOT_TOKEN=... QZONE_TEST_UIN=<号> npm run selftest:mcp

列工具、读说说、读评论、白名单拦截、publish 关闭、好友名册

7/7

协议层测试只调用读接口(qzone_see_posts / qzone_comments / friend_list), 不会点赞、不会评论、不会发说说——避免在真实账号上留下痕迹。

写操作的闸门由单元测试覆盖:24 小时去重、每小时/每天上限、长度限制、CQ 码拒绝、 白名单校验。真实写操作请先用 publishEnabled: false + 小号自测。

实测发现的问题(写在这,避免重踩)

  1. 楼中楼的 comment_id 不是 "0" —— 必须传一级评论的真实 id(通常是 "1" 等), 传 "0" 会得到 -10049 该条内容已被删除。

  2. 回复的可见性 —— 回复挂在 replies 里,comment_num 只统计一级评论; 只数 comment_num 会误以为「没回复」。

  3. target_uin 是说说主人,不是评论者 —— 传成评论者会直接失败。

  4. 群里的人不等于好友 —— 白名单可以配置成「自动并入某个群的成员」(groupUinsFrom)。

写操作实测(真实 QQ 空间)

在真实账号上跑过一轮,确认「点赞 / 评论」确实落到空间上:

动作

结果

怎么验证的

评论别人的说说

✅ 成功

拉说说详情,评论区里能看到她写的那句

点赞别人的说说

✅ 成功

like_qzone 返回 status=ok;再次点赞被 24h 去重挡住

发说说

✅ 成功

发布后 qzone-last-publish.json 更新,空间可见

实测抓到的 bug(已修)

  1. qzone_comments 没传 target_uin —— 看别人的说说时桥接返回 -8 原文已经被删除, 而那条说说其实好好的。现在 target_uin 作为可选参数透传。

  2. qzone_like 成功后没写限频记录 —— 同一条可以说无限重复点赞,每小时/每天上限形同虚设。

  3. 评论去重 key 多了个空冒号(tid:)—— 已改成直接用 tid。

这三条都是「单元测试全绿但真实环境会坏」的典型:mock 不会模拟桥接对参数的要求, 也发现不了「忘记写记录」这种逻辑遗漏。所以协议层测试必须连真实 OneBot。

Available Tools

7 tools
friend_listA

查看好友名册(谁写过定义、谁还没写)。返回每个好友的 uin / 名字 / 关系 / 语气 / 备注。

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 会追加。

NameRequiredDescriptionDefault
uinYes好友 QQ 号
nameNo你对他/她的称呼
noteNo一条备注(追加)
toneNo该怎么跟他说话(语气/分寸)
relationNo他/她跟你是什么关系

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 条。

NameRequiredDescriptionDefault
tidYes说说 tid
contentYes评论正文,纯文本
reply_uinNo楼中楼里要回复的那个人的 QQ 号(可选)
comment_idNo要回复的一级评论 id(qzone_comments 返回的 commentId)
reply_nameNo楼中楼里要回复的那个人的昵称(可选)
target_uinNo说说归属的 QQ 号;评论自己的说说可以不传
comment_uinNo被回复评论的作者 QQ 号

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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)。返回每条评论的作者/时间/内容,以及楼中楼回复。

NameRequiredDescriptionDefault
numNo取多少条,默认 20
posNo评论起始偏移,默认 0
tidYes说说 tid(qzone_see_posts 返回的)
target_uinNo说说主人的 QQ 号(看别人的说说必填,否则桥接返回 -8「原文已被删除」)

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 内只能赞一次,有频率上限。

NameRequiredDescriptionDefault
tidYes说说 tid
target_uinYes

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 并重启本服务。

NameRequiredDescriptionDefault
imagesNo
contentYes

TDQS

C2.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

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 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.

Purpose3/5

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.

Usage Guidelines3/5

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 必须在白名单内。

NameRequiredDescriptionDefault
numNo取几条,默认 3
target_uinYes要查看的 QQ 号

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 7 tool updatesv0.2.0
    • First observedfriend_list
    • First observedfriend_note
    • First observedqzone_comment
    • First observedqzone_comments
    • First observedqzone_like
    • First observedqzone_publish
    • First observedqzone_see_posts

TDQS

A3.5/5.0

Scored across 7 tools

Disambiguation3/5

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.

Naming Consistency3/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    B
    maintenance
    Enables 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
    -
  • A
    license
    A
    quality
    C
    maintenance
    Enables 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.
    5
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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