Conversational Experience Router
Conversational Experience Router
简体中文 | English
An open experience layer for conversational AI. It routes user intents — "I'm bored", "help me organize this idea", "I want to chat about something" — into experiences that can start right away.
Claude is the first AI host; other MCP-compatible or similar-protocol hosts can be added later.
Features
Intent to experience: discover and recommend experience modules from the current intent and user-approved interest signals.
Explicit consent: before launching, issue a one-time, short-lived consent token for the chosen module; the experience starts only after the user confirms.
Stateful sessions: each experience runs as a short session, with continue, submit-event, and finish.
Extensible: add a module by dropping it into
experiences/; no core changes.Verifiable registry: Ed25519 module signing, trusted publishers, permission/risk display, and a version-history index.
Public topics foundation: public topics, optional discussion rooms, reporting, moderation, and blocking — no automatic private messaging or real-person matching.
Local-first: the experience web server listens on localhost only and is account-free.
Related MCP server: CouchLoop EQ
Built-in modules
social-pulse: public topics and potential conversation directions (demo data for now; real matching and private messaging are a later phase).three-minute-mystery: a three-minute text deduction game.thought-garden: turn scattered ideas into a core thought, assumptions, and next steps.
Install and run
Requires Node.js 20 or newer.
npm install
npm run buildThen:
node dist/index.jsThe MCP service talks over stdio and also starts a localhost-only web server and public-topics HTTP API at http://127.0.0.1:4317 by default. If the port is taken, an available port is chosen automatically and returned in the launch_experience entrypoint field; set EXPERIENCE_PORT to pin the port.
Connect to Claude
Claude Desktop
Add this to Claude Desktop's MCP config, replacing the path with your local absolute path:
{
"mcpServers": {
"experience-router": {
"command": "node",
"args": [
"C:\\path\\to\\conversational-experience-router\\dist\\index.js"
]
}
}
}Claude Code
claude mcp add experience-router -- node C:\\path\\to\\conversational-experience-router\\dist\\index.jsThen, for example:
I'm bored and I have three minutes — find me something I can start right now.
Workflow
discover_experiences: recommend modules from intent and interest signals.prepare_experience_launch: issue a one-time, short-lived consent token for the chosen module.launch_experience: start the experience with the confirmed token.Continue or end via
continue_experience/submit_experience_event/finish_experience.
Tool list
Tool | Purpose |
| Recommend modules from the current intent and user-approved interest signals |
| Show module versions, permissions, risk, publisher, and signature status |
| Wrap user-selected shared context into a portable object |
| Issue a one-time, short-lived consent request for the chosen module |
| Start a stateful experience with the confirmed token |
| Query consent state and scope; never returns the token |
| Revoke an unused experience consent |
| Read current experience session state |
| Submit an answer, hint, restart, or end event |
| End an experience session |
| Create a private module draft from a safe template |
| Discover public topics without reading full conversation history |
| Create a public topic |
| Join or read a public discussion room on demand |
| Post in a public discussion room |
| Report a public topic or message |
| View and process the local moderation queue |
| Block or restore a public participant |
Developers: write a module
A module does not modify the core router. Drop a module directory into experiences/ and restart the service to auto-load it:
experiences/
my-module/
manifest.json
module.mjsmanifest.json describes module identity, version, capabilities, risk, and memory boundaries; module.mjs exports two lifecycle functions:
export default {
async start(context) {
return { round: 1, score: 0 };
},
async handleEvent(context, state, event) {
return { state: { ...state }, status: "active" };
}
};Validate locally:
npm run validate-module -- ./experiences/my-moduleScaffold a new module:
npm run create-module -- --id focus-sprint --name "Focus Sprint" --purpose "Turn a vague task into one next step" --category reflection --capabilities reflection --reads selected_excerpts
npm run validate-module -- ./experiences/focus-sprintThe scaffold writes manifest.json, module.mjs, and a module README; it refuses to overwrite an existing directory unless --force is passed.
Import an externally produced module without executing it — copy and validate the manifest first:
npm run import-module -- --source ./path/to/my-module
npm run validate-module -- ./experiences/my-moduleimport-module only copies manifest.json, module.mjs/module.js, an optional signature.json, and a README; it never runs external code. validate-module imports the module to check its lifecycle exports, so review it first.
Sign a module and build the public registry:
npm run create-publisher-key -- --key-id example-main --out-dir ./keys --trust-file ./keys/trusted-keys.json
npm run sign-module -- --module ./experiences/my-module --private-key ./keys/example-main.private.pem --key-id example-main
npm run verify-module -- --module ./experiences/my-module --trusted-keys ./keys/trusted-keys.json
npm run build-registry-index -- --root ./experiences --output ./registry/index.json --trusted-keys ./keys/trusted-keys.jsonsignature.json covers the canonical manifest digest and the entry-code digest. The registry distinguishes trusted, signed, unsigned, and invalid; set EXPERIENCE_TRUSTED_KEYS at runtime so public discovery can identify trusted publishers.
Run tests:
npm testThe current runtime supports local controlled-js modules and is meant for code the developer has reviewed. Remote GitHub install, a remote registry service, persistent moderation, and sandboxed execution are not implemented yet; the router never auto-executes code from an untrusted repository.
Public protocols
The project fixes five public protocol surfaces:
Experience Manifest: module identity, version, capabilities, risk, and read/write scope.Context Envelope: user-selected context fields that can migrate between hosts.Consent Policy: the read/write scope a module is currently allowed. The actual bearer token is bound to the current host and session, and can only be reissued, not migrated.Module Signature: an Ed25519 signature object covering the manifest and entry-code digests.Experience Registry/Public Topics: public module index, version history, public topics, rooms, and moderation objects.
Call create_context_envelope to build the context, then pass the returned envelope to prepare_experience_launch. Full fields and JSON examples are in docs/protocol.md.
Security and boundaries
The router never auto-reads conversation history and never fetches phone or account data without call parameters; the host should only pass interest signals the user explicitly agreed to share.
The one-time, short-lived consent token issued by
prepare_experience_launchis the user control point. It is bound to one module and invalidates after use; experience sessions expire after 10 minutes by default.create_experience_draftonly produces a declarative draft and never executes user-uploaded native code.controlled-jsmodules still run in the same Node.js process as the MCP server; signatures detect tampering but are not a sandbox.Public topics and rooms are currently in-memory and account-free; reporting requires an explicit moderation action. Real-person matching, private messaging, and dating recommendations are not provided.
This is a prototype, not a full social platform or an AI phone operating system.
Project structure
src/
catalog.ts built-in module manifests and matching
index.ts MCP stdio server and tool registration
runtime.ts consent tokens, experience sessions, and event state
registry.ts module registration and discovery
signature.ts module signing and digest verification
public-topics.ts public topics, rooms, and moderation state
module-api.ts module lifecycle API
protocol.ts Manifest, Context Envelope, and Consent Policy protocols
types.ts shared types
web.ts local experience web server and session API
experiences/ built-in modules (manifest + module.mjs)
scripts/ module create, import, sign, and registry commands
docs/ protocol and roadmapLicense
Conversational Experience Router
English | 简体中文
一个面向对话式 AI 的开放体验层。它把用户说出的「我很无聊」「帮我整理这个想法」「我想找点话题聊」等意图,路由到可以立即开始的体验模块。
Claude 是首个接入的 AI 宿主,未来可扩展到其他支持 MCP 或类似工具协议的宿主。
特性
意图到体验:根据当前意图和用户明确授权的兴趣线索,发现并推荐体验模块。
显式授权:启动体验前,为选定模块生成一次性、限时的授权令牌,用户确认后才启动。
有状态会话:每个体验以短会话运行,支持继续、提交事件、结束。
可扩展:新增模块只需放进
experiences/目录,无需改动核心代码。可验证注册表:支持 Ed25519 模块签名、可信发布者、权限/风险展示和版本历史索引。
公开话题基础能力:支持公开话题、可选讨论房间、举报、审核和拉黑,不自动私信或真人匹配。
本地优先:体验网页只监听本机,不依赖账号。
内置模块
social-pulse:公共话题与潜在聊天方向推荐(当前为演示数据,真人匹配与私信属后续阶段)。three-minute-mystery:三分钟文字推理小游戏。thought-garden:把散乱想法整理成核心想法、假设和下一步。
安装与运行
需要 Node.js 20 或更高版本。
npm install
npm run build构建后运行:
node dist/index.jsMCP 服务通过 stdio 与宿主通信,同时启动一个只监听本机的体验网页和公开话题 HTTP API,默认地址为 http://127.0.0.1:4317。端口被占用时会自动选择一个可用端口,并通过 launch_experience 的 entrypoint 字段返回实际地址;也可用环境变量 EXPERIENCE_PORT 指定端口。
接入 Claude
Claude Desktop
把下面的条目加入 Claude Desktop 的 MCP 配置文件,并将路径改为本机项目的绝对路径:
{
"mcpServers": {
"experience-router": {
"command": "node",
"args": [
"C:\\path\\to\\conversational-experience-router\\dist\\index.js"
]
}
}
}Claude Code
claude mcp add experience-router -- node C:\\path\\to\\conversational-experience-router\\dist\\index.js重启宿主后即可使用。例如对 Claude 说:
我很无聊,只有三分钟,给我找点可以马上开始的东西。
使用流程
discover_experiences:根据意图和兴趣线索推荐模块。prepare_experience_launch:为选定模块生成一次性、限时的授权令牌。launch_experience:用户确认后,用授权令牌启动体验。通过
continue_experience/submit_experience_event/finish_experience继续或结束会话。
工具列表
工具 | 作用 |
| 根据当前意图和用户同意提供的兴趣线索推荐模块 |
| 展示模块版本、权限、风险、发布者和签名状态 |
| 将用户明确选择共享的上下文封装为可迁移对象 |
| 为已选模块生成一次性、限时授权请求 |
| 使用用户确认后的授权令牌启动有状态体验 |
| 查询授权状态和权限范围,不返回 token |
| 撤销尚未使用的体验授权 |
| 读取当前体验会话状态 |
| 提交答案、提示、重启或结束事件 |
| 结束一个体验会话 |
| 用安全模板创建私人模块草稿 |
| 发现公开话题,不读取完整对话历史 |
| 创建公开话题 |
| 按需加入或读取公开讨论房间 |
| 在公开讨论房间发言 |
| 举报公开话题或消息 |
| 查看和处理本地审核队列 |
| 拉黑或恢复公开参与者 |
开发者:写一个模块
模块不需要修改核心路由器。把一个模块目录放进 experiences/,重启服务后会自动加载:
experiences/
my-module/
manifest.json
module.mjsmanifest.json 描述模块身份、版本、能力、风险和记忆边界;module.mjs 导出两个生命周期函数:
export default {
async start(context) {
return { round: 1, score: 0 };
},
async handleEvent(context, state, event) {
return { state: { ...state }, status: "active" };
}
};本地校验模块:
npm run validate-module -- ./experiences/my-module也可以用脚手架快速创建一个可校验模块:
npm run create-module -- --id focus-sprint --name "Focus Sprint" --purpose "把模糊任务拆成一个可执行的下一步" --category reflection --capabilities reflection --reads selected_excerpts
npm run validate-module -- ./experiences/focus-sprint脚手架会生成 manifest.json、module.mjs 和模块 README;如果目录已经存在,命令会拒绝覆盖,除非显式加入 --force。
导入外部生成的本地模块时,可以先只复制并校验 manifest,不执行模块代码:
npm run import-module -- --source ./path/to/my-module
npm run validate-module -- ./experiences/my-moduleimport-module 只复制 manifest.json、module.mjs/module.js、可选的 signature.json 和 README;它不会导入执行外部代码。validate-module 会为了检查生命周期导出而加载模块,因此应在人工审阅之后运行。
为模块签名并生成公开注册表:
npm run create-publisher-key -- --key-id example-main --out-dir ./keys --trust-file ./keys/trusted-keys.json
npm run sign-module -- --module ./experiences/my-module --private-key ./keys/example-main.private.pem --key-id example-main
npm run verify-module -- --module ./experiences/my-module --trusted-keys ./keys/trusted-keys.json
npm run build-registry-index -- --root ./experiences --output ./registry/index.json --trusted-keys ./keys/trusted-keys.jsonsignature.json 覆盖规范化后的 manifest 和入口代码摘要。注册表会区分 trusted、signed、unsigned 和 invalid;运行服务时可设置 EXPERIENCE_TRUSTED_KEYS,让 MCP 的公开发现结果识别可信发布者。
运行测试:
npm test当前支持本地 controlled-js 模块,适合开发者审阅后导入;远程 GitHub 安装、远程注册表服务、持久化审核和沙盒运行仍属于后续工作,当前不会自动执行陌生仓库中的代码。
公共协议
项目现在固定五层公共协议:
Experience Manifest:模块身份、版本、能力、风险和读写范围。Context Envelope:用户明确选择共享、可在宿主之间迁移的上下文字段。Consent Policy:当前模块允许读取和写入的范围。实际 bearer token 绑定当前宿主和会话,只能重新签发,不能直接迁移。Module Signature:使用 Ed25519 覆盖 manifest 和入口代码摘要的签名对象。Experience Registry/Public Topics:公开模块索引、版本历史、公开话题、房间和审核对象。
可以先调用 create_context_envelope 生成上下文,再把返回的 envelope 传给 prepare_experience_launch。完整字段和 JSON 示例见 docs/protocol.md。
安全与边界
不会自动读取对话历史,也不会在没有调用参数的情况下获取手机或账户数据;宿主只应传入用户明确同意共享的兴趣线索。
prepare_experience_launch生成的一次性、限时授权令牌是当前原型的用户控制点。令牌绑定具体模块、使用后立即失效;体验会话默认 10 分钟后过期。create_experience_draft只生成声明式草稿,不会执行用户上传的原生代码。controlled-js模块仍与 MCP 服务运行在同一 Node.js 进程;签名能发现篡改,但不能替代沙盒。公开话题和房间目前是本地内存、无账号服务;举报需要显式审核操作,暂不提供真人匹配、私信或约会推荐。
本仓库是原型,不是完整社交平台,也不是 AI 手机操作系统。
项目结构
src/
catalog.ts 内置模块 manifest 和匹配逻辑
index.ts MCP stdio server 和工具注册
runtime.ts 授权令牌、体验会话和事件状态
registry.ts 模块注册与发现
signature.ts 模块签名和摘要验证
public-topics.ts 公开话题、房间和审核状态
module-api.ts 模块生命周期 API
protocol.ts Manifest、Context Envelope 和 Consent Policy 协议
types.ts 共享类型
web.ts 本地体验网页和会话 API
experiences/ 内置模块(manifest + module.mjs)
scripts/ 模块创建、导入、签名和注册表命令
docs/ 协议和路线图License
Available Tools
21 toolsblock_public_actorBlock a public actorB
隐藏指定参与者在公开话题和房间中的内容,并阻止双方继续互动。
| Name | Required | Description | Default |
|---|---|---|---|
| actor_id | Yes | ||
| blocked_actor_id | 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 the two main effects: content hidden in public topics/rooms and interaction blocked between both parties. However, it omits reversibility (the sibling unblock_public_actor suggests this can be undone), required permissions, and whether the block is one-way or mutual in enforcement terms.
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 dense sentence that front-loads the action and its consequences with no filler. Slightly compact to the point that the two-ID relationship is glossed over, but structurally efficient.
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 tool with no annotations and no output schema, the description covers the observable effects but leaves gaps on parameter semantics, permissions, and reversibility. Adequate as a minimum viable definition, 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 description coverage is 0% for two required parameters, so the description must compensate. It only vaguely refers to 'the specified participant' and 'both parties', never clarifying who actor_id is versus blocked_actor_id or whether the caller must be one of them. The distinction between the two IDs is left entirely to inference.
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 action (block a public actor) and, importantly, its two concrete effects: hiding the participant's content in public topics and rooms, and preventing mutual interaction. That is more informative than the bare name, though it never distinguishes itself from siblings like report_public_content or unblock_public_actor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance at all. It does not say when blocking is preferable to report_public_content or review_public_report, nor does it mention the existing unblock_public_actor tool for reversing this action. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
continue_experienceContinue an experienceA
读取体验会话的当前状态,用于在对话或网页之间继续一次体验。
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | launch_experience 返回的会话 id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. "读取...当前状态" does convey that this is a non-mutating state read, which is useful given the name continue_experience could imply mutation. But it says nothing about whether reading resumes/activates the session, what happens on an invalid or expired session_id, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, tightly written sentence that front-loads the action and resource before the usage context. There is no filler or redundancy.
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 one-parameter read tool with no annotations and no output schema, the description should ideally say what the returned state contains and how it should be used. "当前状态" is vague, so the agent knows the shape of the call but not the shape of the result.
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%; the single session_id parameter is already documented in the schema as the id returned by launch_experience. The description adds no syntax, format, or constraint detail beyond what the schema provides, so the baseline of 3 applies.
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 (体验会话的当前状态), and clarifies that the purpose is resuming an experience across conversations or web pages. This differentiates it in spirit from launch_experience and finish_experience, though it 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?
It gives a usage context — continuing an experience between conversations or web pages — which implies when to call it. However, it names no alternative tool and states no exclusion or precondition (e.g., what to do if the session is expired or was never launched).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_context_envelopeCreate a portable context envelopeB
把用户明确选择共享的兴趣、时间和内容片段封装为可迁移的 Context Envelope。它不读取宿主的完整历史记录。
| Name | Required | Description | Default |
|---|---|---|---|
| intent | No | ||
| locale | No | ||
| interests | No | ||
| game_preferences | No | ||
| selected_excerpts | No | ||
| social_preference | No | ||
| expires_in_minutes | No | ||
| available_time_minutes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses a privacy-relevant behavior — scope is limited to explicitly selected material, not the host's complete history — but says nothing about what gets persisted, whether the envelope is durable or ephemeral, consent requirements, or side effects. This is meaningful but partial disclosure for an 8-param mutation-adjacent 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 short sentences with no waste; the positive action is front-loaded and the 'does not read history' caveat follows immediately. Slightly terse given the parameter surface, but structurally sound.
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 tool with 8 undocumented parameters, no annotations and no output schema, the description covers only about half the surface. An agent can tell roughly what the tool does but not how to populate intent, locale, game_preferences or social_preference, nor what the resulting envelope contains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 8 parameters. The description names interests, time and content excerpts, which loosely maps to interests, available_time_minutes/expires_in_minutes and selected_excerpts, but intent, locale, game_preferences and social_preference remain undocumented in both schema and description. It compensates for only part of the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: packaging user-explicitly-selected interests, time and content excerpts into a portable Context Envelope. It also states a negative scope ('does not read the host's full history'), which helps distinguish it from full-history tools. It stops short of differentiating itself from siblings like create_experience_draft or create_public_topic.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when the tool applies (only when the user has explicitly opted to share context) and rules out one alternative behavior (reading full history). It never names a sibling tool or states explicit when-not conditions, so usage is implied rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_experience_draftCreate an experience draftB
用安全的声明式模板生成一个私人体验草稿。草稿只描述能力和边界,不执行用户提供的代码。
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | 体验名称 | |
| purpose | Yes | 体验要帮助用户完成什么 | |
| category | Yes | 体验类别 | |
| interaction_style | Yes | 体验希望以哪种界面承载 | |
| requested_capabilities | No | 希望使用的能力名称,而不是可执行代码 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. It does add a genuine behavioral disclosure – the draft is declarative, describes only capabilities and boundaries, and does not execute user code – which is valuable safety context, but it omits authorization requirements, draft persistence/lifecycle, and what the caller receives back.
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 that are front-loaded with the action and follow with the key constraint. No filler, though the second sentence partly restates the safety framing already implied by '声明式模板'.
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 5 parameters, 4 required, no output schema, and no annotations, the description covers the purpose and safety stance but does not indicate what a successful call returns (draft id, status) or how the draft is subsequently used. Adequate but with clear gaps for a creation 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 coverage is 100%, so the baseline is 3. The line '只描述能力和边界,不执行用户提供的代码' reinforces the requested_capabilities semantics ('希望使用的能力名称,而不是可执行代码'), adding a little meaning, but the remaining parameters 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?
The description states a specific verb and resource: generating a private ('私人') experience draft from a declarative template. The 'private' qualifier usefully separates it from public-create siblings like create_public_topic, though it does not name any alternative directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance. It never explains how this draft relates to the launch flow (prepare_experience_launch, launch_experience) that sibling tools imply, so the agent must infer the sequencing entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_public_topicCreate a public topicC
创建一个公开话题。发布前应向用户展示公开可见范围和内容审核规则。
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| tags | No | ||
| title | Yes | ||
| actor_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It does disclose two real behavioral traits — the content becomes publicly visible and a moderation-rules disclosure step is required beforehand — which is more than a plain restatement. However it is silent on permissions/actor authorization, whether the topic is immediately live or moderated first, reversibility, and error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the core action stated first and the precondition second. It is efficient and well front-loaded; the brevity is a symptom of under-specification rather than verbosity.
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 write tool that publishes publicly visible content, with no annotations, no output schema and 0% parameter coverage, the description does too little. It flags the moderation/visibility gate but omits parameter meaning, authorization expectations, what happens after success, and how moderators may act on the topic.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across four parameters (actor_id, title, body, tags) and the description says nothing about any of them — no hint about who actor_id is, how title/body lengths behave, or how tags affect discoverability or moderation. With no structured documentation to fall back on, this leaves the required inputs entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb+resource (\"创建一个公开话题\" / create a public topic), so the agent can tell what will happen. It does not differentiate from the read-side sibling discover_public_topics or explain how a topic relates to rooms/messages, so it stops short of a 5.
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 second sentence supplies a genuine precondition: before publishing, the public visibility scope and content moderation rules must be shown to the user. That is useful implied-usage guidance, but it never says when to choose this over a sibling (e.g. post_public_message or prepare_experience_launch), nor any exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_experiencesDiscover experiencesB
根据用户当前明确表达的意图,推荐可立即开始的体验模块。宿主应先准备授权并获得用户同意,再启动体验。
| Name | Required | Description | Default |
|---|---|---|---|
| intent | Yes | 用户当前表达的需求或心情 | |
| max_results | No | ||
| known_interests | No | 用户已经明确同意传给插件的兴趣线索 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that the host must prepare authorization and obtain user consent before launching, which is real behavioral context. However it never states that this tool itself only recommends (read-only) and does not itself launch or mutate, nor does it disclose rate limits or return characteristics.
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 short sentences, purpose front-loaded ahead of the consent/host caveat. Efficient with no filler, though the second sentence mixes an operational precondition with the tool's own behavior.
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 3-parameter, no-output-schema recommendation tool this is minimally adequate: purpose and the consent prerequisite are covered. It leaves gaps around what is returned and how results relate to the downstream launch tools, which an agent would need for sequencing.
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 67% — intent and known_interests are documented in the schema, while max_results relies only on default/range constraints. The description adds no syntax, format, or meaning beyond the schema, so the baseline 3 is appropriate.
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 (推荐/recommend) and resource (体验模块/experience modules), plus the scoping condition that they be immediately startable and grounded in the user's explicit intent. It is distinguishable from siblings like launch_experience or prepare_experience_launch, though it does not name them directly.
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 phrase '用户当前明确表达的意图' implies the trigger condition (user has expressed an explicit intent) and the consent prerequisite is mentioned, but there is no explicit when-not guidance or named alternative tool. Usage is inferable rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_public_topicsDiscover public topicsB
根据用户明确提供的兴趣发现公开话题;结果不包含私密匹配或自动私信。
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| actor_id | No | local-user | |
| interests | No | ||
| max_results | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose a meaningful scope trait — results exclude private matching and automatic direct messages — which is genuinely useful. But it says nothing about permissions, whether this is a safe read-only operation, result limits/pagination, or what happens for unknown actors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence, front-loaded with the resource and the governing input. No filler, though the negative clause could be tightened.
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 4-parameter tool with zero schema descriptions, no annotations, and no output schema, the description is too thin. It omits parameter meaning, return shape, and the boundary against sibling discovery tools, leaving an agent unable to call it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 4 parameters, so the description must compensate. It only illuminates one concept — "interests" — and says nothing about query, actor_id, or max_results, leaving three parameters with no semantic guidance anywhere.
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 (discover) and resource (公开话题 / public topics), and adds a scoping condition (based on interests the user explicitly provided). It stops short of differentiating itself from close siblings such as discover_experiences or create_public_topic, leaving the agent to infer the distinction.
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?
"根据用户明确提供的兴趣" implies a precondition for use (the user must have stated interests), and the negative clause rules out private-match and auto-DM scenarios. However, there is no explicit when-to-use-vs-alternative guidance naming discover_experiences or create_public_topic, so usage remains implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
finish_experienceFinish an experienceC
结束一个体验会话并返回最终状态。
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It notes that a final state is returned but does not disclose whether ending a session is irreversible, what happens to in-progress state or submitted events, or what permissions are required for this mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the action front-loaded and no filler. It is appropriately sized, though it omits any detail that would make the brevity genuinely informative.
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 session-terminating mutation with no annotations, no output schema, and an undocumented parameter, the description is too thin. An agent lacks the information needed to know when this is safe or correct to invoke.
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 single parameter session_id has 0% schema description coverage and is never mentioned in the description. With low coverage the description is expected to compensate by explaining the parameter's origin or format, which it does not.
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 (结束/finish) and resource (体验会话/experience session), making the action distinguishable from siblings like launch_experience or continue_experience. It does not, however, explicitly contrast itself with those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this tool versus alternatives such as continue_experience or submit_experience_event, and no prerequisites or preconditions are stated. Usage is only implied by the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_consent_statusGet consent statusB
查询一次体验授权的当前状态、模块和权限范围,不返回 bearer token。
| Name | Required | Description | Default |
|---|---|---|---|
| consent_receipt_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It usefully discloses one behavioral trait — that no bearer token is returned — which prevents the agent from expecting credentials. However, auth requirements, error behavior, and whether the query is side-effect free are left 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?
One compact sentence with zero filler; the core purpose leads and the negative constraint (no bearer token) is placed last as a qualifier. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description compensates by naming the returned fields (status, modules, permission scope). The remaining gap is the undocumented receipt id and lack of guidance on how the status values should be interpreted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single parameter consent_receipt_id is undocumented in both schema and description. The phrase '一次体验授权' implies a single consent is addressed by the id, but there is no explanation of the id's format or where to obtain it, so the coverage gap is only marginally compensated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (查询) and resource (一次体验授权) and enumerates the returned facets: current status, modules, and permission scope. It also carves out a boundary versus the sibling revoke_consent by clarifying this is a read that does not return a bearer token, though it never names an 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?
There is no when-to-use, when-not-to-use, or prerequisite guidance. The existence of sibling tools such as revoke_consent and launch_experience means an agent could benefit from knowing when to check status versus revoke, but nothing is offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_public_roomRead a public discussion roomB
读取一个公开讨论房间及当前可见消息。被拉黑的参与者内容不会返回。
| Name | Required | Description | Default |
|---|---|---|---|
| room_id | Yes | ||
| actor_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses that content from blocked participants is not returned and that only currently visible messages are read, but it omits access/permission requirements, pagination, and whether the operation is strictly read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, front-loading the core read operation and then the visibility caveat. Every sentence earns its place with no waste.
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?
No annotations and no output schema, combined with 0% parameter coverage, leave important gaps. The description conveys the read purpose and one filtering rule but does not explain actor_id or access requirements, so an agent lacks enough context to call it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for two required parameters (room_id, actor_id). The description implies a room must be identified but never explains room_id, and it says nothing about actor_id, so it only partially compensates for the missing schema documentation.
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 (公开讨论房间及当前可见消息), making the operation clear. It does not differentiate from sibling tools like discover_public_topics or join_public_room, so 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is given. It does not name alternatives such as join_public_room for joining or discover_public_topics for listing, leaving the agent to infer that this is simply the read-room tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
join_public_roomJoin a public discussion roomC
按需加入某个公开话题的讨论房间;房间只支持公开发言,不开启私信。
| Name | Required | Description | Default |
|---|---|---|---|
| actor_id | Yes | ||
| topic_id | Yes |
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 add one genuine constraint not present in the schema — the room permits only public speech and no private messaging — which is useful for an agent reasoning about disclosure. However, it omits idempotency (what happens if the actor is already in the room), authorization requirements, and any state changes caused by joining, leaving notable gaps for a mutation 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?
A single compact sentence with no filler, and the core action is front-loaded before the behavioral caveat. It is under-specified rather than bloated, so conciseness itself is not the weakness.
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-required-parameter mutation tool with no annotations and no output schema, the description should cover prerequisites, post-join state, and parameter meaning. It supplies only the room's public-speech constraint, leaving the agent without enough to invoke it confidently in edge cases.
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 both actor_id and topic_id are undocumented in the structured schema. The description only alludes to the topic (公开话题) and says nothing about actor_id, its format, or the relationship between the two required parameters, failing to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (加入/join) and resource (公开话题的讨论房间), so the agent knows the operation is joining a topic's discussion room. It does not, however, distinguish itself from the sibling get_public_room, which plausibly reads the same resource, so the boundary is left implicit.
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 phrase 按需 (as needed) gestures at on-demand use but gives no concrete condition, prerequisite, or alternative. With siblings like get_public_room, create_public_topic, and post_public_message in scope, the description never says when joining is the right call versus reading or posting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
launch_experienceLaunch an experienceA
使用 prepare_experience_launch 返回的一次性授权令牌启动体验,并创建一个有状态的本地会话。
| Name | Required | Description | Default |
|---|---|---|---|
| consent_token | Yes | 用户确认后允许使用的授权令牌 | |
| experience_id | Yes | 准备授权时使用的模块 id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that the token is one-time (一次性) and that the call creates a stateful local session, but it omits failure modes, token-reuse behavior, and session lifecycle details an agent would need.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that combines the action with its prerequisite and side effect. No wasted words, though it could be slightly more explicit about the trigger condition.
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 tool with full schema coverage and no output schema, the description supplies the missing workflow context (token provenance and session side effect). It is adequate, with only minor gaps around error and lifecycle behavior.
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 both parameters are already documented in the schema; the description only re-frames consent_token as a one-time authorization token. Baseline 3 is appropriate when the schema does the heavy lifting.
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 (启动体验 / launch an experience) and adds a concrete outcome (创建一个有状态的本地会话). It distinguishes itself from the sibling prepare_experience_launch by naming it as the token source, though it doesn't contrast with continue_experience or finish_experience.
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 clearly establishes the prerequisite: the one-time token must come from prepare_experience_launch, implying the correct call order. No explicit when-not conditions are given, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_public_modulesList public experience modulesC
展示本地注册表中的公开体验模块,包括版本、权限、风险、发布者和签名状态。
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | ||
| max_results | No | ||
| require_trusted_signature | No |
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 of behavioral disclosure. It implies a read operation via '展示' but does not explicitly state read-only safety, side effects, authentication requirements, rate limits, or pagination behavior. The inclusion of field names is return-value context, not behavioral trait disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded with the purpose and efficiently lists the fields returned. It avoids boilerplate or redundancy, though it could be slightly tighter by omitting some field enumerations if they were documented elsewhere.
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 tool with three undocumented parameters, no annotations, and no output schema, the description is incomplete. It does not compensate for the 0% schema coverage or explain how the 'local registry' scope relates to the rest of the public experience workflow. An agent lacks enough context to invoke it confidently with correct parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for three parameters, and the description mentions none of them. It does not explain what 'category', 'max_results', or 'require_trusted_signature' do, their defaults, or their allowed values. The description adds no meaning beyond the raw schema names.
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 ('展示' / display) and resource ('公开体验模块' / public experience modules), and details the returned fields (version, permissions, risk, publisher, signature status). However, it does not differentiate itself from sibling tools like discover_experiences or list_public_reports, so an agent cannot tell when to choose this over alternatives without further inference.
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?
Provides no when-to-use, when-not-to-use, or alternative-tool guidance. The description only says what it lists, not under what conditions an agent should select it versus discover_experiences or other listing tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_public_reportsList public moderation reportsC
读取本地公开内容审核队列,供明确授权的审核者处理。
| Name | Required | Description | Default |
|---|---|---|---|
| status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It mentions authorization context but does not state whether this is read-only, whether data is cached locally, how many reports are returned, pagination behavior, or whether calling it has side effects. The one behavioral hint about authorization is useful but thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence that front-loads the resource and audience. It is concise and has no filler, though it is arguably too brief to carry the needed behavioral 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 listing tool with no annotations, no output schema, and a 0%-covered enum parameter, the description is incomplete. It omits return format, ordering, pagination, and filter semantics, which an agent needs to call it correctly.
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 0% and the single status parameter has an enum but no descriptions. The description does not explain the status filter, its allowed values, or whether omitting it returns all reports. With one parameter and zero coverage, the description should compensate but does not.
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 Chinese description states it reads the local public content moderation queue for explicitly authorized reviewers. This gives a verb (read/list) and resource (moderation queue), but it is vague about scope compared to the English title 'List public moderation reports'. Siblings like report_public_content, review_public_report, and list_public_modules are not distinguished, so an agent cannot easily route between queue-listing and report-reviewing tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by limiting access to 'explicitly authorized reviewers' for the 'public moderation queue', but it does not say when to use this versus review_public_report or report_public_content. No explicit when-to-use or when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_public_messagePost in a public discussion roomB
在公开讨论房间发言。内容会进入公开审核队列,当前不提供私信。
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| room_id | Yes | ||
| actor_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden. It does disclose a genuinely useful behavioral trait — posted content enters a public moderation queue, so delivery may be gated — but omits permission/auth requirements, whether posts can be edited or deleted, and any 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler, and the core action is front-loaded before the moderation caveat. It is terse rather than padded, though it is arguably too sparse for a three-parameter write tool.
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 write tool with no annotations, no output schema, and zero schema documentation, the description should do more. It covers the notable moderation-queue behavior but leaves actor identity, room resolution, and the response contract entirely unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across three required parameters, and the description compensates for none of it: it never explains what actor_id identifies, how room_id is obtained, or that body is capped at 2000 characters. The purpose sentence only loosely implies room and message.
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 first sentence states a specific verb (发言/post) and resource (公开讨论房间/public discussion room), so an agent can tell it apart from siblings like create_public_topic or join_public_room. It stops short of explicitly naming how it differs from those siblings, but the action is unambiguous.
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?
Usage is implied by the verb-plus-room framing, and the closing clause '当前不提供私信' rules out the private-messaging case. However, there is no explicit guidance on when to choose this over create_public_topic or join_public_room, and no prerequisites for posting are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_experience_launchPrepare an experience launchA
为用户选择的体验模块生成一次性、限时授权请求。宿主应先向用户展示权限范围,得到明确同意后再调用 launch_experience。
| Name | Required | Description | Default |
|---|---|---|---|
| experience_id | Yes | discover_experiences 返回的模块 id | |
| context_envelope | No | 用户明确同意共享的 Context Envelope | |
| requested_scopes | No | 从模块声明的权限中选择的最小范围 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and delivers meaningful context: the authorization is one-time and time-limited, and explicit user consent is a precondition. It still omits what the returned request looks like, how long it lives, and whether it can be reused or must be regenerated, so it is strong but not exhaustive.
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, zero filler. The consent precondition is front-loaded and the follow-up call is named last, matching the order in which the agent must reason about them.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter consent-flow tool with a nested context_envelope and no output schema, the description covers purpose, precondition, and next step adequately. The main gap is return-value behavior — no output schema exists, yet the description does not explain what the generated authorization request contains or how it is handed to launch_experience.
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 experience_id, context_envelope, and requested_scopes are already documented in the schema. The description only alludes to scopes and the experience module at a conceptual level and adds no syntax, selection, or constraint detail beyond the schema. Baseline 3 applies when the schema does the heavy lifting.
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 — generating a one-time, time-limited authorization request for the user-selected experience module — and names the sibling it precedes (launch_experience). An agent can distinguish this preparatory step from launch_experience without opening either 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?
Gives an explicit sequencing rule: the host must show scopes to the user, obtain explicit consent, then call launch_experience. This tells the agent both when to use this tool and what must happen before the follow-up call. It does not, however, mention alternatives such as get_consent_status or revoke_consent, so it stops short of full when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_public_contentReport public contentB
举报公开话题或公开消息;举报进入审核队列,不会自动将内容判定为违规。
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | ||
| target_id | Yes | ||
| reporter_id | Yes | ||
| target_type | Yes |
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 usefully discloses that the report goes into a review queue and does not automatically mark the content as violating, which clarifies the side effect and non-immediacy. It still omits permission requirements, duplicate-report behavior, and what the caller gets back.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence pair, front-loaded with the action and immediately followed by the important outcome semantics. No filler or redundancy.
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 annotations, no output schema, and 0% parameter description coverage, the description should do more, especially around the four required parameters and what happens after submission. It covers the action and the moderation-queue outcome adequately but leaves parameter and return expectations to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across four required parameters. The description only indirectly implies target_type by naming topics and messages, and does not explain reporter_id, target_id, or the reason field's constraints (3-500 chars). It compensates only partially for a large documentation gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource: report a public topic or public message (举报公开话题或公开消息). That is clearly distinguishable from moderation siblings such as review_public_report and list_public_reports. It stops short of naming an alternative or boundary explicitly, so it is clear but not maximally differentiating.
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?
Usage is implied by the verb 'report' and the outcome note that the report enters a moderation queue, which tells the agent this is a submission rather than a review action. However, there is no explicit when-to-use guidance, no statement of prerequisites, and no reference to siblings like review_public_report or block_public_actor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
review_public_reportReview a public content reportC
由审核者对公开内容举报作出驳回、隐藏或恢复决定。
| Name | Required | Description | Default |
|---|---|---|---|
| decision | Yes | ||
| report_id | Yes | ||
| reviewer_id | Yes |
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 implies a mutation with three outcomes, but never states whether hide/restore are reversible, what happens to the reported content or reporter, or any permission requirements. Only the bare decision set is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the actor, resource, and outcome set all appear in one clause. It is appropriately terse for the operation, though the brevity leaves gaps rather than being wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter mutation tool with no annotations, no output schema, and 0% schema description coverage, the description is too sparse. Side effects, authorization, reversibility, and expected outcomes are all missing, leaving the agent to guess at consequences.
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%, three required parameters. The description partially compensates by naming the actor (审核者 → reviewer_id), the target (公开内容举报 → report_id), and the three decision values that match the enum. However, it adds no constraint details (length bounds, ID format) beyond what the schema already enforces.
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 (作出...决定 - makes a decision) and resource (公开内容举报 - public content report) carried out by a reviewer, and enumerates the three possible outcomes (驳回/隐藏/恢复). This clearly distinguishes it from siblings like report_public_content (filing) and list_public_reports (reading), though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to invoke this tool versus report_public_content or list_public_reports, nor any stated preconditions such as required reviewer privileges or which decisions are permitted in which state. The agent must infer the workflow entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revoke_consentRevoke consentC
撤销尚未使用的体验授权。已使用的会话不会被此工具伪装成未使用。
| Name | Required | Description | Default |
|---|---|---|---|
| consent_receipt_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It hints at a limitation regarding used sessions ('已使用的会话不会被此工具伪装成未使用'), but this phrasing is opaque and does not clarify permissions required, reversibility, or side effects on the consent record.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with the primary purpose front-loaded and no wasted words. The second sentence is somewhat awkwardly phrased, slightly reducing clarity, but overall it is appropriately sized.
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 an undocumented parameter, the description is incomplete. It states the core action and one ambiguous behavioral note, but omits necessary details about authentication, effects on existing consents, and how to supply the required receipt ID.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description never mentions the single required parameter 'consent_receipt_id' nor explains how to obtain or format it. The only hint is the abstract concept of an authorization, which does not compensate for the complete lack of parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb (撤销/revoke) and resource (尚未使用的体验授权/unused experience authorization), making the core operation clear. It does not explicitly name or contrast with any sibling tool such as get_consent_status, so it stops short of full differentiation.
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 qualifier '尚未使用的' (not yet used) implies the tool should be used only for unused authorizations, which is useful context. However, it does not state when to choose this over alternatives like get_consent_status, nor does it clearly describe prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_experience_eventSubmit an experience eventC
向有状态的体验提交一个受限事件,例如答案、提示请求或重新开始。
| Name | Required | Description | Default |
|---|---|---|---|
| payload | No | ||
| event_type | Yes | ||
| session_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It hints that the operation targets a stateful session and that events are 'restricted' (受限), but does not disclose side effects, permission requirements, error behavior for invalid event/session combinations, or what state change occurs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the action first, no filler, and an immediately useful example list. It is efficient, though its brevity is partly under-specification rather than economy.
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 annotations, no output schema, 0% schema coverage, an opaque nested payload object, and an undocumented enum value, the definition is too thin for an agent to call correctly. It should at least explain payload contents and the full set of valid event types.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and there is a nested free-form 'payload' object plus an enum whose meaning is non-obvious. The description names three of the four enum values (answer, hint, restart) but omits 'finish', and says nothing about session_id or the shape of payload, leaving the schema largely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('向有状态的体验提交一个受限事件' = submit a restricted event to a stateful experience) and enumerates representative event examples (answer, hint request, restart). This distinguishes it reasonably from discovery/launch siblings, though it does not explicitly contrast with continue_experience or finish_experience.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is given. It never states the preconditions (an active session), nor when this should be chosen over continue_experience, finish_experience, or prepare_experience_launch, all of which are near neighbours. The event examples hint at context but do not constitute usage rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unblock_public_actorUnblock a public actorC
恢复查看和参与指定公开参与者内容的能力。
| Name | Required | Description | Default |
|---|---|---|---|
| actor_id | Yes | ||
| blocked_actor_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses the outcome (viewing and participation are restored) but says nothing about required permissions, idempotency when the actor is not blocked, or whether the action is reversible. This is thin for an unannotated mutation 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?
A single sentence with no filler, and the operative effect is front-loaded. It is efficient, though its brevity contributes to the specification gaps captured elsewhere.
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 tool with no annotations, no output schema, and 0% schema coverage, the description is too sparse. It neither disambiguates the two identically-typed ID parameters nor covers permissions, side effects, or error conditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for two required parameters, so the description must compensate and it does not. It refers only to a single 'specified public actor', leaving the crucial distinction between actor_id (the caller) and blocked_actor_id (the target being unblocked) completely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb-effect and resource: restoring the ability to view and participate in the content of a specified public actor. An agent can understand this is the inverse of block_public_actor, though the sibling relationship is only implicit and never named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to invoke this versus other tools, no mention of the counterpart block_public_actor, and no preconditions such as 'the actor must currently be blocked'. Usage must be inferred entirely from the name.
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.
21 tool updates
v0.5.0- First observed
block_public_actor - First observed
continue_experience - First observed
create_context_envelope - First observed
create_experience_draft - First observed
create_public_topic - First observed
discover_experiences - First observed
discover_public_topics - First observed
finish_experience - First observed
get_consent_status - First observed
get_public_room - First observed
join_public_room - First observed
launch_experience - First observed
list_public_modules - First observed
list_public_reports - First observed
post_public_message - First observed
prepare_experience_launch - First observed
report_public_content - First observed
review_public_report - First observed
revoke_consent - First observed
submit_experience_event - First observed
unblock_public_actor
TDQS
Scored across 21 tools
Each tool targets a clearly distinct resource and action: experience discovery/launch/session lifecycle, public topic/room operations, moderation, consent, and context envelopes are well separated. While there are several discovery and creation tools, their descriptions make the boundaries explicit, so an agent can reliably choose the right one.
All 21 tools use consistent snake_case with a verb_noun pattern (e.g., discover_experiences, create_public_topic, get_public_room, launch_experience). The domain-specific prefixes like 'public' and 'experience' group related tools without breaking the predictable convention.
21 tools is on the heavy side for a single MCP server, falling into the 16–25 range that the rubric describes as borderline. While the surface covers multiple sub-domains (experiences, public rooms, moderation, consent), some tools could potentially be consolidated without losing functionality.
The experience lifecycle (discover, prepare, launch, continue, submit event, finish, consent status, revoke) and public interaction/moderation workflows are well covered. Minor gaps exist, such as no tool to update or delete public topics/messages, and context envelopes have only a create operation with no retrieval or management counterpart.
Maintenance
Related MCP Connectors
Memory for deep conversational context across any platform
Give AI agents a phone layer for consent-based calls, transcripts, summaries, and outcomes.
Context and control for any AI. Agent identity, scoped access, and proof across tools.
Governed memory and workspace for any AI: tasks, calendar, mail and pages, with per-action consent.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables AI assistants to discover and control IoT devices on local networks and via Bluetooth LE.71MIT
- AlicenseNot gradedqualityCmaintenanceBehavioral governance layer for AI assistants that monitors for hallucination, inconsistency, and unsafe reasoning patterns while managing stateful AI sessions.10 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables product discovery, session-scoped carts, and confirmation-gated checkout through natural language, with deterministic routing and safety features.6 npmISC
- AlicenseNot gradedqualityBmaintenanceEnables personal AI agents to sense ambient attention cues, compute intent probabilities, and execute reversible guarded dry-run actions without prompting. It routes routine reflexes through a fast System-1 decision layer backed by decaying episodic memory and strict safety and privacy guardrails.7MIT