Doco
Doco
๐ ไธญๆ็
The document space where humans and AI agents write together. An open-source rich-text collaborative editor that puts your data back in your hands โ and treats your AI agents with the same care: block-level stable addressing, optimistic concurrency control, and a 29-tool MCP server, so agents read and write your knowledge base as safely as a careful human editor.
Hosted: doco.page โ free during beta
Connect your agent:
claude mcp add doco -- npx -y --package doco-agent-cli doco mcpCLI:
npm i -g doco-agent-cli && doco loginnpm: doco-agent-cli ยท API docs: doco.page/api-docs
Claude Code Plugin Marketplace
/plugin marketplace add songofhawk/doco
/plugin install doco@docoThe marketplace bundles the Doco MCP server and the safe read โ version โ protected-write operating protocol. Tokens remain in Claude Code's local configuration and are never included in the plugin repository.

Why agents are safe here
Capability | What it means |
Block-level stable addressing | Every paragraph has a |
Optimistic concurrency | Reads return a |
Markdown round-trip | Export with |
Humanโagent co-editing | Agent writes flow through the same Yjs document โ changes appear live in the browser |
Transactions & idempotency | Batch operations commit atomically; |
Related MCP server: session-coord-mcp
Features
Editing Experience
Rich text editing: headings, lists, blockquotes, task lists, code blocks (syntax highlighting), tables, images, links, text styling, and more
/slash command: type/to open the command palette with fuzzy search โ supports pinyin abbreviations for Chinese usersFloating toolbar: auto-appears on text selection, all formatting actions within two centimeters of your cursor
Block drag-and-drop: hover the left edge of any paragraph to reveal a drag handle โ reorder content like building blocks
Collapsible sections: fold away sections you're not working on; collapse state persists across sessions
Auto heading numbering: one-click toggle โ H1โH4 headings automatically maintain hierarchical numbering (
1.1.11.1.1)Keyboard shortcuts:
โฅโ/โmove blocks,โDduplicate blocks,โโฅ1/2/3/0switch heading levels
Text-to-Diagram
Write Mermaid or PlantUML source code directly in your document. Diagrams render in place. Double-click to edit, fullscreen view, pinch-to-zoom โ no more export-import-replace cycles with draw.io.
Mermaid: flowcharts, sequence diagrams, class diagrams, Gantt charts, state diagrams, and more
PlantUML: sequence diagrams, class diagrams, use case diagrams, component diagrams, and more
Spreadsheet
A full spreadsheet engine embedded in your documents:
Formula evaluation, cell formatting
Freeze panes, sort & filter
Cell merge / split
CSV import / export
Use it inline as a content block, or pop it out as a standalone full-screen spreadsheet.
Knowledge Base
Knowledge Base โ Folders (nestable) โ Documents โ a three-level structure
Drag-and-drop reordering, renaming, and moving in the sidebar
Whole-KB ZIP export preserving folder hierarchy, with bundled images
Lossless native
.doco.ziptransfer for a document, folder, or whole knowledge base
Real-time Collaboration
Built on the Yjs CRDT algorithm:
No save button โ changes sync automatically
Offline-first: browser IndexedDB is the primary store; the server holds a snapshot. Edit without a network, merge automatically when reconnected
Seamless device switching: close your laptop, pick up your phone, keep writing
Import / Export
Format | Import | Export |
Doco native package | โ Document / folder / KB | โ Lossless document / folder / KB |
Markdown | โ Paste / file upload | โ Single doc & KB bundle |
Word (DOCX) | โ | โ |
โ | โ | |
HTML | โ | โ |
WeChat Official Account | โ | โ (with theme preview) |
Images (in-document) | โ (paste / drag-drop) | โ (bundled in ZIP) |
API ยท MCP ยท CLI
Three channels, one contract:
REST API: OpenAPI 3.1 spec, Bearer Token auth, ETag versioning, cursor pagination, idempotency keys
MCP server:
doco mcp(ships insidedoco-agent-cli) โ 29 tools plusdoco://resourcesdoco CLI:
login / whoami / docs / blocks / edit / mcp, global--json, writes internalize ETag/If-Match
Turn your docs into programmable assets โ script your own backups, let an agent organize your knowledge base, pipe docs from your publishing workflow to your blog. Built-in API documentation page, ready to use out of the box.
Tech Stack
Layer | Technology |
Frontend Framework | React 18 + Vite + TypeScript |
CSS | Tailwind CSS v4 |
Editor | Tiptap v3 (ProseMirror) |
Collaboration | Yjs (CRDT) + Hocuspocus |
Diagrams | Mermaid + PlantUML |
Backend | Node.js + Express + Hocuspocus Server |
Database | better-sqlite3 (SQLite, WAL mode) |
UI Components | Radix UI, Lucide React, Tippy.js |
Quick Start
Prerequisites
Node.js >= 22
pnpm
Install & Run
# Install frontend dependencies
pnpm install
# Install backend dependencies
cd backend && npm install && cd ..
# Start the frontend dev server (Vite, default :5173)
pnpm run dev
# In another terminal, start the backend (Express + WebSocket, default :8000)
cd backend
npm run devOpen http://localhost:5173 โ it will auto-connect to the backend WebSocket service.
Docker Deployment (recommended)
The complete self-hosted package includes a Caddy frontend, Node.js collaboration backend, persistent SQLite storage, health checks, and a same-origin WebSocket proxy. The public images support both linux/amd64 and linux/arm64.
git clone https://github.com/songofhawk/doco.git
cd doco
cp .env.docker.example .env.docker
# Review .env.docker first, then start with prebuilt Docker Hub images
docker compose --env-file .env.docker up -d
# Verify the deployment
docker compose --env-file .env.docker ps
curl --fail http://localhost:8080/healthzOpen http://localhost:8080 by default. Set ALLOWED_ORIGINS, COOKIE_SECURE, Google OAuth, and SMTP values in .env.docker for your environment. These values are injected when the containers start and are not baked into the images. Application data is stored in the doco-data named volume.
Docker Hub: songofhawkg/doco-frontend ยท songofhawkg/doco-backend
To build the same images from source instead:
docker compose --env-file .env.docker up -d --buildSee the Docker deployment guide for all configuration options, HTTPS, logs, backup, restore, and upgrades. Do not run docker compose down -v unless you intend to delete the database and attachments.
Manual Build & Deployment
# Frontend build
pnpm run build # output โ dist/
pnpm run deploy # deploy to Cloudflare Pages
# Backend (production)
cd backend
npm startProject Structure
doco/
โโโ src/
โ โโโ main.tsx # App entry point
โ โโโ App.tsx # Root component, routing, import/export
โ โโโ components/
โ โ โโโ Sidebar.tsx # KB sidebar (document tree)
โ โโโ editor/ # Editor module
โ โโโ index.ts # Entry, exports DocoEditor component
โ โโโ DocoEditor.tsx # Editor core (Yjs/Hocuspocus init, extension registration)
โ โโโ types.ts # DocoEditor Props/Ref type definitions
โ โโโ components/
โ โโโ BubbleMenu.tsx # Selection floating toolbar
โ โโโ BlockHandle.tsx # Block drag handle
โ โโโ SlashCommand.ts # / command palette
โ โโโ CommandList.tsx # Command palette UI
โ โโโ suggestions.ts # Command menu data
โ โโโ CollapseExtension.ts # Block collapse extension
โ โโโ DocSettings.tsx # Document settings (heading numbering, background)
โ โโโ MermaidBlock.ts # Mermaid node definition
โ โโโ MermaidComponent.tsx # Mermaid renderer
โ โโโ PlantUMLBlock.ts # PlantUML node definition
โ โโโ PlantUMLComponent.tsx # PlantUML renderer
โ โโโ CalloutBlock.ts # Callout block definition
โ โโโ CalloutComponent.tsx # Callout renderer
โ โโโ SpreadsheetBlock.ts # Spreadsheet node definition
โ โโโ SpreadsheetComponent.tsx # Spreadsheet renderer
โ โโโ spreadsheetEngine.ts # Spreadsheet calculation engine
โ โโโ WeChatExportDialog.tsx # WeChat Official Account export
โ โโโ KeyboardShortcuts.ts # Keyboard shortcuts
โ โโโ TableOfContents.tsx # Table of contents
โ โโโ CodeBlockComponent.tsx # Code block (highlight + copy)
โ โโโ ImageComponent.tsx # Image renderer
โโโ backend/
โ โโโ server.js # Entry: Express + Hocuspocus + export routes
โ โโโ database.js # better-sqlite3 init & schema
โ โโโ api.js # KB / folder / document REST API
โ โโโ auth.js # Auth (OAuth + Email + API Token)
โ โโโ markdown.js # YDoc โ Markdown server-side export
โ โโโ permissions.js # Permission management
โ โโโ quota.js # Quota management
โ โโโ openapi.js # OpenAPI spec definition
โ โโโ tests/ # Backend tests
โโโ docs/ # Design docs & proposalsStandalone Frontend Component
The editor core is also published as doco-text-editor. It contains the full Doco editing experience and built-in styles, but has no dependency on Doco authentication, REST APIs, collaboration services, or IndexedDB. The host application decides whether content lives in memory, browser storage, its own backend, or an external system such as ClickUp.
npm install doco-text-editorimport { useRef } from 'react'
import {
DocoTextEditor,
type DocoTextEditorRef,
} from 'doco-text-editor'
import 'doco-text-editor/style.css'
const editorRef = useRef<DocoTextEditorRef>(null)
<DocoTextEditor
ref={editorRef}
defaultValue="# Browser-only draft"
format="markdown"
onChange={({ steps }) => {
// Only the ProseMirror steps changed by this transaction.
queueIncrementalChanges(steps)
}}
/>
// Read the complete document only when needed.
const json = editorRef.current?.getContent('tiptap-json')
const markdown = editorRef.current?.getContent('markdown')
const html = editorRef.current?.getContent('html')
const text = editorRef.current?.getContent('text')The package includes headings, inline formatting, blockquotes, ordered/unordered/task lists, code blocks, images, tables, callouts, Mermaid, optional PlantUML rendering, and embedded spreadsheets. See src/editor/README.md for the complete API and integration notes.
Full Doco Editor Component Usage
import { DocoEditor } from './editor'
import type { DocoEditorRef } from './editor/types'
const editorRef = useRef<DocoEditorRef>(null)
<DocoEditor
ref={editorRef}
docId="doc-001"
userId="user-001"
collaboration={{
websocketUrl: 'ws://localhost:8000',
}}
onTitleChange={(docId, title) => console.log('Title changed:', title)}
placeholder="Start writingโฆ"
/>
{/* Call export methods via ref */}
<button onClick={() => editorRef.current?.exportMarkdown()}>Export MD</button>Collaboration Architecture
Browser IndexedDB (y-indexeddb) โ local primary store
โ
Browser Y.Doc โ @hocuspocus/provider (WebSocket)
โ Yjs binary delta messages
Server @hocuspocus/server โ SQLite ydoc_state (one merged snapshot per doc)The browser IndexedDB is the primary store; the server snapshot is auxiliary. If the server snapshot is lost, simply open the document in the browser to repopulate it.
Offline editing works seamlessly; changes sync automatically when the network returns.
Collaborative cursors: supported by the framework, not enabled by default.
Markdown Export
Both single documents and KB bundles support Markdown export, generated on-the-fly from YDoc on the server:
# Single document export
curl http://localhost:8000/api/docs/{id}/export.md
# KB ZIP bundle
curl http://localhost:8000/api/kb/{id}/export.zipCustom nodes (Mermaid, PlantUML, Callout, etc.) have corresponding serialization rules in backend/markdown.js. When adding new custom nodes, update the server-side serializer accordingly.
Lossless Doco Transfer
Use Export Doco File in a document, folder, or knowledge-base menu. The resulting .doco.zip contains the original Yjs state, hierarchy, document settings, standalone spreadsheets, and attachments. Importing always creates a copy with fresh resource and attachment IDs, so it can safely move between independent Doco deployments without colliding with existing data.
Use the upload button beside the knowledge-base heading to import a whole knowledge base. To import a document or folder package, choose Import Doco File from the destination knowledge base or folder menu.
License
MIT
Available Tools
29 toolsdoco_batch_editDoco Batch EditADestructive
ๅไบๅกๆน้็ผ่พ๏ผ1โ100 ไธชๆไฝ๏ผๅ จๆๆๅ จๆ ๏ผ๏ผoperations ไธบ {op: insert|replace|delete, ...} ๆฐ็ปใbase_version ๅฟ ๅกซ่ฏญไน็ฑๆๅก็ซฏๅผบๅถ๏ผไธๅกซ่ชๅจ่ฏปๅ๏ผใ
| Name | Required | Description | Default |
|---|---|---|---|
| operations | Yes | Atomic insert, replace, or delete operations. | |
| document_id | Yes | Target document ID. | |
| base_version | No | Document version read before the protected write. | |
| idempotency_key | No | ๅน็ญ้ฎ๏ผ้ฒ้่ฏๅฏไฝ็จ |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the write and destructive nature (readOnlyHint=false, destructiveHint=true, idempotentHint=false), so the bar is lower. The description adds genuinely useful behavioral context beyond those flags: atomicity ('ๅ จๆๆๅ จๆ ' all-or-nothing) and the server-enforced base_version semantics with auto-read when omitted. This tells the agent how the operation behaves at execution time. It stops short of describing rollback/error behavior or the consequences of the destructive ops, but it meaningfully supplements the annotations.
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 dense sentences with the most important facts front-loaded: transaction scope and atomicity come first, followed by the op array shape, then the base_version behavior. There is no filler or repetition of schema fields. It is slightly compressed in a way that assumes familiarity (e.g., the '...' in the op shape), but 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?
An output schema exists and annotations cover the safety profile, so return values and destructive/write hints are handled. The notable gap is the operation payload structure: the description's '{op: insert|replace|delete, ...}' plus the schema's additionalProperties-{} items leaves the actual mutation fields (e.g., where to insert, what replacement content is, which path is targeted) undocumented. For a destructive batch tool this is a significant omission. Sibling routing guidance is also absent. Adequate but with clear gaps.
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%, setting the baseline at 3. The description adds real value beyond the schema: it specifies the operation item shape ({op: insert|replace|delete, ...}) which the schema's generic items object with additionalProperties:{} leaves entirely open, and it clarifies base_version as server-required-but-auto-read, going beyond the schema's 'Document version read before the protected write'. The idempotency_key already has a schema description, and the description adds nothing further there, which is acceptable.
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: ๆน้็ผ่พ (batch edit) targeting a doco document, scoped to 1โ100 operations with explicit op types (insert|replace|delete) and all-or-nothing transaction semantics. This is clear and actionable, but it does not explicitly differentiate from sibling tools such as doco_update_document or the block-level edit tools, relying on the 'batch' framing and the tool name itself to signal 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?
Usage context is implied rather than stated: the 'single transaction / all-or-nothing' and '1โ100 operations' framing signals this is for atomic multi-operation edits, which is a meaningful cue. However, there is no explicit when-to-use vs when-not-to-use guidance, no named alternatives (e.g., doco_update_document for a single edit, doco_patch_block/doco_insert_blocks/doco_delete_block for finer-grained operations), and no mention of prerequisites such as document existence or permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doco_changesDoco ChangesARead-onlyIdempotent
ๅปบ็ซๆๅข้่ฏปๅๆๆกฃ็ๅ็บงๅๆดๆฐดไฝใ้ฆๆฌกไธไผ after ่ฟๅ manifest ไธ cursor๏ผๅ็ปญไผ cursor ่ทๅ added/removed/modified/movedใsync_required=true ๆถๅฟ ้กป้ๆฐ่ฏปๅๆญฃๆๅนถๅปบ็ซๆฐๅบ็บฟใ
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | ไธๆฌกๅๅบ่ฟๅ็ไธ้ๆ cursor๏ผ้ฆๆฌก่ฐ็จ็็ฅ | |
| limit | No | ๅ้กตๅๆดๆนๆฌกๆฐ๏ผ้ป่ฎค 100 | |
| locale | No | BCP-47 locale; use all where supported. | |
| document_id | Yes | ๆๆกฃ ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, and non-destructive. The description adds meaningful context by explaining the two-phase behavior (manifest+cursor first, then added/removed/modified/moved) and the sync_required flag's implication, which is valuable beyond the annotations. It doesn't describe error or rate-limit behavior, but the core incremental pattern is well 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?
Two sentences, both information-dense and front-loaded. The first sentence explains the core concept (watermark establishment and incremental reads) with a clear mode split. The second sentence encodes the critical behavioral rule. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists and annotations cover safety, the description sufficiently explains the tool's stateful behavior and how to use it correctly. The only minor gap is that it doesn't explicitly define what happens if 'after' is missing on a second call, but the phrase '้ฆๆฌกไธไผ ' implies the convention clearly.
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 the schema documents all parameters. The description adds usage-level meaning (first call omits after, subsequent calls use cursor) that complements the schema's generic 'opaque cursor' description. However, it doesn't add detail beyond what a careful agent could infer from the schema plus the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool establishes or incrementally reads block-level change watermarks for documents. It distinguishes the two modes (initial manifest/cursor vs. subsequent cursor-based diff) and references sibling tools by indicating a re-read of content is required when sync_required=true, which differentiates it from doco_read or doco_get_blocks.
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 explicitly tells when to omit 'after' (first call) and when to pass 'cursor' (subsequent calls). It also provides a critical conditional: if sync_required=true, the agent must re-read the document body and establish a new baseline, which is a clear instruction on what to do next rather than just what the tool does.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doco_conceptsDoco ConceptsARead-onlyIdempotent
็ปไธ่ฏปๅๆฆๅฟตๅฑ๏ผๅๅบ/่ทๅๆพๅผๆฆๅฟตใๆฒฟๆฆๅฟตๅ ณ็ณป้ๅ๏ผๆๅๅบๅพ ๅฎกๆ ธๅ้ใๅ้ไธๆพๅผๆฆๅฟตไธฅๆ ผๅ็ฆปใ
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Title or body search query. | |
| limit | No | Maximum number of results (1โ100). | |
| action | Yes | Operation to perform. | |
| cursor | No | Opaque pagination cursor returned by the previous response. | |
| status | No | Filter by the requested status. | |
| direction | No | Relationship direction: outgoing, incoming, or both. | |
| predicate | No | Relationship type to filter or create. | |
| concept_id | No | Explicit concept ID. | |
| min_confidence | No | Minimum candidate confidence from 0 to 1. | |
| knowledge_base_id | No | Knowledge base ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description aligns with those. It adds extra value by warning that candidates are strictly separated from explicit concepts, which prevents an agent from expecting candidates in list/get results. No contradiction with annotations exists.
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-loads the tool's purpose and uses a colon-structured list to enumerate supported operations. Every clause earns its place; there is no repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 10 parameters, 4 actions, and a large sibling set, the description covers the broad scope and the output schema handles return values, but it omits pagination behavior and relationship-direction parameters, and it does not help an agent decide between this and sibling tools like doco_traverse. It is sufficient for a basic invocation but not a complete selection guide.
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?
With schema coverage at 100%, the baseline is 3. The description goes beyond the schema by semantically grouping the actions: list/get are for explicit concepts, candidates is a separate operation, and traverse follows concept relationships. This clarification directly affects how action, status, and min_confidence should be used, adding meaning that the schema's generic descriptions do not provide.
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 clear purpose: a unified read layer for concepts, listing operations (list, get, traverse, candidates) on a specific resource. It distinguishes concepts from generic search/traversal tools by adding the notion of strict separation, but it does not explicitly contrast itself with sibling doco_traverse, so it stops short of full sibling 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 wording implies this is the unified read access point for the concept layer and that candidates must be listed via the candidates action rather than list/get. However, it gives no explicit 'use this instead of X' guidance, and with siblings like doco_traverse, doco_search, and doco_edit_concepts available, an agent is left to infer when this tool is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doco_create_documentDoco Create DocumentA
ๆฐๅปบๆๆกฃ๏ผๅฏๅๆถ็ๅ ฅๅๅงๆญฃๆ๏ผcontent: {format: markdown|tiptap-json|html, content|document}๏ผ
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | New document title. | |
| content | No | Content payload or child block content. | |
| folder_id | No | Folder ID. | |
| idempotency_key | No | Optional key that makes a retried write safe. | |
| knowledge_base_id | No | Knowledge base ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as not read-only, not idempotent, and not destructive; the description adds useful behavioral context by specifying the accepted content formats (markdown, tiptap-json, html) and the two supported payload shapes (content or document). It does not contradict annotations.
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 entire guidance is one compact, front-loaded sentence: primary purpose first, then the optional content detail. No filler or repetition of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema, 100% parameter coverage, and annotations, the description is largely complete. It could be slightly stronger by hinting that folder_id/knowledge_base_id scope the creation and that idempotency_key prevents duplicate retries, but those are already visible in the schema.
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 description goes beyond the schema by explaining the nested content object's format enum and alternative inner fields, which the schema leaves as a generic additionalProperties object.
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 ('ๆฐๅปบๆๆกฃ' / create a new document) and adds the valuable capability of injecting initial content with supported formats. It is not a tautology, and the create action clearly separates it from update/get siblings, though it does not explicitly name an alternative.
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 intended use is implied: use this tool when a new document must be created, optionally with initial body content. However, it provides no explicit when/when-not guidance or alternatives such as doco_update_document for existing documents, so an agent must infer routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doco_create_relationDoco Create RelationA
ไป็จณๅฎๆฅๆบๅๅๅปบไธๆกๆพๅผใๅฏๅฎก่ฎก็็ฑปๅๅ ณ็ณปใtarget_uri ไฝฟ็จ doco://doc/{id}#block={block_id}๏ผๅๅปบๅๆๅก็ซฏๆ ก้ชไธค็ซฏๆ้ไธๅๅญๅจๆงใ
| Name | Required | Description | Default |
|---|---|---|---|
| predicate | No | Relationship type to filter or create. | |
| target_uri | Yes | Doco URI of the target document or block. | |
| anchor_text | No | Optional human-readable text anchoring the relation. | |
| idempotency_key | No | Optional key that makes a retried write safe. | |
| source_block_id | Yes | Stable ID of the source block. | |
| source_document_id | Yes | Document containing the source block. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (which only mark readOnly/idempotent/destructive as false), the description reveals that relations are auditable, that the server validates both ends' permissions and existence prior to creation, and implicitly signals non-idempotency by referencing an idempotency_key. This adds meaningful behavioral context without contradicting annotations.
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 entire description is a single, front-loaded sentence that states purpose, target URI format, and server-side checks. No filler; every clause contributes.
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 creation tool with six parameters and an output schema, the description covers the purpose, the critical URI format, and validation behavior. Combined with full schema coverage and an output schema, the agent has enough to call it correctly; remaining details like return values are presumably handled by the output schema.
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?
All six parameters have schema descriptions, so the baseline is 3. The description adds crucial semantics for target_uri by specifying the exact doco://doc/{id}#block={block_id} format, which is absent from the schema property description, and it frames source_document_id/source_block_id as a stable source block.
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 clear verb-resource pair: creates an explicit, auditable typed relation from a stable source block. The resource is specific enough to distinguish it from the many read/update/document sibling tools, and no sibling appears to create relations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides some context by specifying the target_uri format and explaining that the server validates permissions and block existence before creation. However, it does not explicitly state when to use this tool over alternatives or exclude any sibling, so usage guidance is mostly implied by the tool's purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doco_delete_blockDoco Delete BlockCDestructiveIdempotent
ๅ ้คๅไธชๅ
| Name | Required | Description | Default |
|---|---|---|---|
| block_id | Yes | Stable block ID within the target document. | |
| document_id | Yes | Target document ID. | |
| base_version | No | Document version read before the protected write. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the basic safety profile is known. The description adds no behavioral context such as permanence, cascading deletion of child blocks, versioning implications, or whether base_version is required for safe deletion. It is not contradictory, but it provides zero value beyond the annotations.
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 extremely short and front-loaded, with no wasted words. It is structurally efficient, though it is so terse that it leaves important behavioral and usage context for other dimensions to cover.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that this is a destructive mutation tool, the description should provide some context about consequences or intended use cases. Annotations and schema cover safety and parameters, but the description itself is incomplete for an agent deciding whether deletion is appropriate or what side effects may occur.
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 all three parameters are already documented in the schema, including the optional base_version. The description adds no parameter-level meaning, so the baseline score of 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?
The description 'ๅ ้คๅไธชๅ' clearly states a specific action (delete) on a specific resource (a single block), so the core purpose is understandable. However, it does not explicitly differentiate this tool from sibling block operations like doco_patch_block or doco_insert_blocks beyond the verb itself.
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 about when to use this tool versus alternatives. The sibling list contains related block-level operations, but the description provides no context, conditions, or exclusions to help the agent decide which tool fits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doco_edit_conceptsDoco Edit ConceptsADestructive
็ปไธๅๅ ฅๆพๅผๆฆๅฟต๏ผๅๅปบใๆดๆฐใ่กฅๆฅๆบ/ๅ ณ็ณปใๅๅนถ๏ผไปฅๅๆฅๅ/ๆ็ปๅ้ใๅฎขๆท็ซฏ่ชๅจ่ฏปๅ ETagใๅ้ If-Match๏ผๅนถไธบๆฏๆฌกๅๅ ฅ็ๆๅน็ญ้ฎใ
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Concept or resource name. | |
| action | Yes | Operation to perform. | |
| reason | No | Human-readable reason for the operation. | |
| status | No | Filter by the requested status. | |
| aliases | No | Alternative names for the concept. | |
| sources | No | Evidence sources attached to the concept. | |
| relations | No | Concept relations to add. | |
| concept_id | No | Explicit concept ID. | |
| description | No | description parameter. | |
| candidate_id | No | Pending concept candidate ID. | |
| knowledge_base_id | No | Knowledge base ID. | |
| target_concept_id | No | Concept ID to merge into. | |
| canonical_document_id | No | Canonical document ID for the concept. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as destructive and not read-only. The description adds valuable behavior beyond annotations: automatic ETag reading, If-Match header sending, and idempotency-key generation for each write. These details alert the agent to optimistic concurrency and retry expectations. There is no contradiction with idempotentHint=false because generating a key does not assert tool-level idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one dense, front-loaded sentence listing all operation types, followed by one sentence of critical client behavior. Every clause carries information and there is no padding or repetition.
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 13-parameter, 7-action destructive write tool, the description provides the high-level operation map and concurrency/idempotency behavior, while the output schema, annotations, and per-parameter schema descriptions cover the rest. The main remaining gap is explicit action-to-parameter guidance, but the schema field names and descriptions are sufficiently suggestive for an agent to fill it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes beyond the enum names by explaining the semantic groups: create, update, source/relation addition, merge, and candidate accept/reject. It still does not map each action to the specific required parameters (e.g., merge needs target_concept_id), but the schema parameter names partially cover that.
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 ('unified write') and a specific resource ('explicit concepts'), then enumerates the exact operation categories: create, update, add sources/relations, merge, and accept/reject candidates. This clearly identifies the tool as the concept-mutation entry point and differentiates it from read/search/translation siblings such as doco_get_tree or doco_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'unified' implies this is the intended single entry point for explicit concept writes, and the action list implies the supported cases. However, the description never says when to prefer this over overlapping siblings like doco_create_relation or doco_batch_edit, nor does it mention any exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doco_get_blocksDoco Get BlocksARead-onlyIdempotent
ๆๅ่ฏปๅๆๆกฃ๏ผ่ฟๅ้กถๅฑ๏ผๆ recursive=true ๆถๅ จ้จ๏ผๅๅๅ ถ็จณๅฎ block_id ไธ version
| Name | Required | Description | Default |
|---|---|---|---|
| recursive | No | ๆฏๅฆๅฑๅผๅตๅฅๅ๏ผ้ป่ฎค false | |
| document_id | Yes | Target document ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is clear. The description adds useful context about stable block_id and version, which is helpful. It doesn't disclose pagination, ordering, or whether full content is included, but for a read-only tool with annotations, this is acceptable but not rich.
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, dense line that front-loads the core behavior and the key parameter (recursive). No wasted words; the Chinese phrasing is compact and clear.
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 block-reading tool with an output schema and strong annotations, the description covers the core behavior and the toggle. It could mention whether it's suitable for large documents or whether blocks include content text, but the output schema likely covers return values. It's structurally complete and adequate for the agent to select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (recursive and document_id) are already documented in the schema. The description adds the concept of top-level versus all blocks, which maps to the recursive parameter, but doesn't add syntax or format details beyond the schema. Baseline 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 uses a specific verb ('ๆๅ่ฏปๅ' / read by blocks), names the resource (ๆๆกฃๅ / document blocks), and clarifies behavior (่ฟๅ้กถๅฑๆๅ จ้จๅ with stable block_id and version). It clearly distinguishes itself from doco_get_document, doco_read, doco_traverse, and doco_get_tree because it emphasizes block-level access and stable IDs.
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 specifies when to use it: to read blocks, with a clear toggle for top-level vs recursive. It doesn't explicitly say when-not-to-use or name alternatives, but the sibling list and the 'ๆๅ' framing imply it's for block retrieval, not for document metadata or search. The missing exclusions are a minor gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doco_get_documentDoco Get DocumentARead-onlyIdempotent
่ฏปๅๆด็ฏๆๆกฃๆญฃๆใformat: markdown๏ผ่ฏปๆ่ฏญไน๏ผ้ๅธฆ warnings ้็บงๆ็คบ๏ผ/ tiptap-json๏ผๆ ๆ๏ผ็ฒพ็กฎ็ผ่พ็จ๏ผ/ htmlใ่ฟๅๅซ version๏ผๅ็ปญๅๅ ฅ้ๆบๅธฆ๏ผใannotate=anchors ๆถ markdown ๆฏไธช้กถๅฑๅๅธฆ ้็น๏ผๆนๅฎๆด็ฏๅๅ๏ผPUT content format=markdown๏ผๅฏๆ้็นไฟ็ๆชๆนๅจๅ็ IDใ
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | ้ป่ฎค tiptap-json | |
| locale | No | ่ฏปๅๆๅฎ่ฏญ่จ็ๆฌ๏ผไนๅฏไผ docset_ ID | |
| annotate | No | ไป markdown๏ผๆณจๅ ฅๅ้็น | |
| document_id | Yes | ๆๆกฃ ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile with no contradiction. The description adds real behavioral context beyond annotations: the returned payload carries a version that must be attached to later writes, and annotate=anchors injects <!--@block=<id>--> anchors per top-level block to preserve block IDs across full-document rewrites. The 'warnings ้็บงๆ็คบ' behavior is mentioned but not concretely defined, keeping this from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one dense, front-loaded passage that opens with the main purpose before covering formats, version contract, and anchor workflow. Every clause carries information โ format trade-offs, the version-carry requirement, and write-back behavior โ so nothing is redundant. It is long but justifiably so, and the logical flow is clear; splitting it into shorter sentences would improve readability slightly.
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 an output schema present, a 4-parameter signature, and annotations covering the read-only/idempotent safety profile, the description completes the key functional gaps: it names the version field, explains format fidelity differences, and describes the anchor-preservation workflow for round-trip edits. The weakest point is locale โ both schema and description mention docset_ID and language versions without explaining fallback behavior when a locale is absent โ so it is strong but not fully 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 100%, so the baseline is 3. The description adds meaning for two of four parameters: it explains why to choose each format (markdown for semantic reading vs tiptap-json for lossless editing) and what the annotate anchors accomplish (preserving unchanged block IDs on write-back). document_id and locale receive no additional meaning beyond the schema, so the added value is partial โ above baseline but not complete.
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: '่ฏปๅๆด็ฏๆๆกฃๆญฃๆ' (read the entire document body). The scope qualifier 'ๆด็ฏ' (entire) and the format list distinguish it from block-level siblings like doco_get_blocks, doco_outline, and doco_get_tree. However, it never explicitly references overlapping siblings such as doco_read, so the differentiation is implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit format-selection guidance: markdown for semantic reading (with warnings downgrade hints), tiptap-json for lossless precise editing, and html as a third option. It also explains the annotate=anchors write-back workflow โ injecting block IDs and preserving unchanged block IDs on PUT โ and the version field requirement for subsequent writes. It lacks explicit tool-selection exclusions against siblings like doco_read or doco_get_blocks, leaving that to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doco_get_treeDoco Get TreeARead-onlyIdempotent
่ทๅไธไธช็ฅ่ฏๅบ็ๅฎๆด็ฎๅฝๆ ๏ผๆไปถๅคน + ๆๆกฃ๏ผ
| Name | Required | Description | Default |
|---|---|---|---|
| kb_id | Yes | ็ฅ่ฏๅบ ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is consistent with the read-only, idempotent, non-destructive annotations and adds that the result is the complete directory tree including folders and documents. It does not hide side effects, and no contradictory behavior is mentioned.
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 focused sentence with no redundant words, examples, or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only tree tool, the description provides sufficient context about the return scope (folders and documents) and the target resource; it could mention output structure or sibling distinctions, but the existing output schema and clear purpose cover most needs.
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?
With a single parameter that has a complete schema description ('็ฅ่ฏๅบ ID'), the schema already provides the necessary meaning; the description adds no further detail beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('่ทๅ' / retrieve), the resource (a knowledge base's complete directory tree), and the scope (folders + documents), making it easy to distinguish from document-level or search 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 wording implies use when the full folder/document hierarchy of a knowledge base is needed, but it does not explicitly compare against sibling tools such as doco_outline or doco_traverse or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doco_insert_blocksDoco Insert BlocksA
ๅจๆๅฎไฝ็ฝฎๆๅ ฅไธไธชๆๅคไธชๅใposition ๅ ญ้ไธ๏ผafter_block_id / before_block_id / parent_block_id(+child_index) / document_start / document_end / after_heading๏ผๆๆ ้ขๆๆฌๅฎไฝ๏ผๆๅก็ซฏๅน้ ๏ผ
| Name | Required | Description | Default |
|---|---|---|---|
| nodes | Yes | ่ฆๆๅ ฅ็ tiptap ๅ่็น | |
| position | Yes | ๅฎไฝๅฏน่ฑก๏ผๅ ญ็งๆนๅผ้ไธ็ง๏ผๅฆ { after_heading: "้จ็ฝฒๆต็จ" } | |
| document_id | Yes | Target document ID. | |
| base_version | No | Document version read before the protected write. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, so the description is consistent. It adds context about server-side matching for after_heading and six positioning modes, which helps the agent understand behavioral nuances beyond the raw schema. It doesn't mention side effects like version conflicts or whether base_version is required for optimistic locking, but annotations already cover the write risk profile.
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 one sentence that front-loads the core operation and then packs all critical positioning modes into a compact list. Every part earns its place; no fluff or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the key behavioral choice (position modes) well, but omits caveats such as whether inserting requires an existing document, how base_version is used for protected writes, or error conditions like duplicate headings. With an output schema present and annotations present, it's mostly complete, but a note about version conflict behavior would strengthen it.
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 parameters like nodes, position, document_id, base_version are documented in the schema. The description adds important meaning to 'position' by enumerating the six allowed strategies and giving an example ({ after_heading: "้จ็ฝฒๆต็จ" }), which the schema's additionalProperties does not convey. This is valuable semantic enrichment.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb ('insert') and resource ('blocks') at a specified position, clearly distinguishing it from read/list/patch/delete siblings. The position enum is listed in Chinese, which is explicit but the title is tautological; still the description provides concrete positioning options.
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 by enumerating position strategies, but does not explicitly state when to use this tool vs alternatives like doco_patch_block or doco_batch_edit. No explicit exclusions or conditions are given, leaving the agent to infer based on the verb 'insert'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doco_list_documentsDoco List DocumentsARead-onlyIdempotent
ๆ็ฅ่ฏๅบ / ๆไปถๅคน / ๅ ณ้ฎ่ฏๆ็ดขๆๆกฃๅ่กจ๏ผๅ้กต๏ผ
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | ๆ ้ขๅ ณ้ฎ่ฏ | |
| limit | No | Maximum number of results (1โ100). | |
| cursor | No | Opaque pagination cursor returned by the previous response. | |
| locale | No | BCP 47 ่ฏญ่จๆ ็ญพ๏ผไธไผ ๆถๅชๅๆฎ้ๆๆกฃๅๆบ่ฏญ่จ็ๆฌ | |
| folder_id | No | ๆไปถๅคน ID | |
| include_variants | No | Whether to include translated document variants. | |
| knowledge_base_id | No | ็ฅ่ฏๅบ ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds the pagination behavior ('ๅ้กต') and the filter scope, but does not disclose any additional side effects, authorization needs, or limitations beyond what annotations and schema provide. This is acceptable but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the essential purpose and pagination without superfluous words. Every element carries meaning, so it earns a high score for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the full schema coverage, output schema, and safety annotations, the description is largely sufficient for an agent to understand the tool's function. It does not mention how filters combine or that all filters are optional, but those details are available in the structured fields and do not critically impede correct invocation. Sibling differentiation is missing but handled under usage guidelines.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with descriptions for all seven parameters, including q, limit, cursor, locale, folder_id, include_variants, and knowledge_base_id. The description groups these into higher-level concepts (search by knowledge base/folder/keyword) but adds no new meaning beyond the schema. Baseline 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 identifies the key filtering dimensions (knowledge base, folder, keyword) plus pagination. It is clear about what the tool does, but it does not explicitly distinguish this tool from sibling tools like doco_search and doco_search_v2, so it misses the top tier.
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 by describing the function, but it does not state when to use this tool versus alternatives such as doco_search or doco_get_tree. There is no explicit when-to-use or when-not-to-use guidance, so the agent must infer suitability from the tool's name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doco_list_knowledge_basesDoco List Knowledge BasesARead-onlyIdempotent
ๅๅบๅฝๅ็จๆทๅฏ่ง็ๅ จ้จ็ฅ่ฏๅบ
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the useful scoping detail that only knowledge bases visible to the current user are returned, but it does not disclose pagination, ordering, or other behavioral details. This is acceptable but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the action and resource. There is no redundant wording or unnecessary detail, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, parameterless, read-only listing tool with an output schema present, the description is complete. It specifies the scope (current user visibility) and the resource (knowledge bases), and the annotations cover the behavioral safety expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter semantics burden on the description. The schema is empty and fully covered, and the description does not need to explain any inputs. This aligns with the baseline for a zero-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('ๅๅบ' / list) and the resource ('ๅฝๅ็จๆทๅฏ่ง็ๅ จ้จ็ฅ่ฏๅบ' / all knowledge bases visible to the current user). It is specific enough to distinguish this tool from siblings like doco_list_documents, which targets documents rather than knowledge bases.
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 the tool is used when the agent needs to enumerate knowledge bases visible to the current user. However, it provides no explicit guidance on when to prefer this tool over alternatives, nor does it mention any exclusions or related sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doco_outlineDoco OutlineARead-onlyIdempotent
่ฏปๅๆๆกฃ็ปๆๅคง็บฒ๏ผๆฏไธชๆ ้ขไปฅ็จณๅฎ block_idใheading_path ๅ้กถๅฑๅๅบ้ด่กจ่พพ๏ผ้ๅๅ ่งๅๅๅฑ้จ่ฏปๅใ
| Name | Required | Description | Default |
|---|---|---|---|
| document_id | Yes | ๆๆกฃ ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
ๆณจ่งฃๅทฒๅฃฐๆ readOnlyHint=trueใidempotentHint=trueใdestructiveHint=false๏ผ่ฆ็ไบๅช่ฏปใๅน็ญๅ้็ ดๅๆง็ญๅฎๅ จ็นๆงใๆ่ฟฐๅจๆญคๅบ็กไธ่กฅๅ ไบ่ฏฅๅทฅๅ ทๅช่ฟๅๆ ้ข็ปๆ๏ผ่้ๅฎๆดๆๆกฃๅ ๅฎน๏ผ๏ผๅนถๅผบ่ฐ block_id ๆฏ็จณๅฎ็๏ผ่ฟๅฏน่ฐ็จ่ ็่งฃ่พๅบๆง่ดจๅ่งๅๅ็ปญ่ฏปๅ้ๅธธๆไปทๅผใๆฒกๆไธๆณจ่งฃ็็พไนๅคใ
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?
ๆ่ฟฐ็จไธๅฅ่ฏ็ฎๆดๅฐๆถต็ไบๅ่ฝ๏ผ่ฏปๅๅคง็บฒ๏ผใ่พๅบ็นๅพ๏ผblock_idใheading_pathใ้กถๅฑๅๅบ้ด๏ผๅ้็จๅบๆฏ๏ผๅ ่งๅๅๅฑ้จ่ฏปๅ๏ผ๏ผๆ ๅไฝไฟกๆฏ๏ผๅ ณ้ฎไฟกๆฏๅ็ฝฎ๏ผ็ปๆ้ซๆใ
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?
่ฏฅๅทฅๅ ทๅชๆ 1 ไธชๅฟ ้ๅๆฐ๏ผไธ schema ่ฆ็ๅฎๆดใๆ่พๅบ schema ๅๅ จ้ข็ๆณจ่งฃใๆ่ฟฐๅทฒ็ปๆไพไบ่ถณๅค็ไฟกๆฏ่ฎฉไปฃ็ๆญฃ็กฎ่ฐ็จ๏ผๅฎๅไปไนใ่ฟๅไปไนๆง่ดจ็ๆฐๆฎใไปไนๆถๅ็จใๅ ทไฝ่ฟๅๅญๆฎต็ฑ่พๅบ schema ๆฟๆ ๏ผๆ ้ๅจๆ่ฟฐไธญ้ๅคใ
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 ๅฏน document_id ็่ฏดๆ่ฆ็็ไธบ 100%๏ผๆ่ฟฐไธญๆช้ขๅค่งฃ้ๅๆฐๅซไนๆๆ ผๅผใๆ นๆฎ่งๅ๏ผๅฝ schema ๆ่ฟฐ่ฆ็็้ซๆถ๏ผๅๆฐ่ฏญไนๅพๅ็ๅบ็บฟไธบ 3๏ผๆ่ฟฐๆฒกๆ่ถ ่ถ 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?
ๆ่ฟฐไฝฟ็จๆ็กฎ็ๅจ่ฏ'่ฏปๅ'ๅ่ตๆบ'ๆๆกฃ็ปๆๅคง็บฒ'๏ผๅนถๅ ทไฝ่ฏดๆ่พๅบๅ ๅฎนไธบๆฏไธชๆ ้ข็ block_idใheading_path ๅ้กถๅฑๅๅบ้ดใ่ฟไธ sibling ๅทฅๅ ทๅฆ doco_read๏ผ่ฏปๅๆญฃๆๅ ๅฎน๏ผๅ doco_get_tree๏ผ่ทๅๆ ็ปๆ๏ผ่ฝๆธ ๆฐๅบๅ๏ผไปฃ็ๆ ้ๆๅผ 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?
ๆ่ฟฐไธญๆ็กฎๆๅฐ'้ๅๅ ่งๅๅๅฑ้จ่ฏปๅ'๏ผ็ปๅบไบๅ ทไฝไฝฟ็จๅบๆฏ๏ผๅ ่ทๅๅคง็บฒ่งๅ๏ผๅๆ้่ฏปๅๅฑ้จๅ ๅฎนใ่ฝ็ถๆฒกๆๆๅๆฟไปฃๅทฅๅ ทๆ็ปๅบๆ้คๆกไปถ๏ผไฝไฝฟ็จไธไธๆๅทฒ่ถณๅคๆธ ๆฐ๏ผๆช่พพๅฐๆ้ซๅๆฏๅ ไธบ็ผบๅฐๆพๅผ็ when-not-to-use ๆๅผใ
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doco_patch_blockDoco Patch BlockAIdempotent
ๆดๆฐๅไธชๅ๏ผๆไพๅฎๆด node ๆฟๆข๏ผๆ็จ attrs/content ๅฑ้จไฟฎๆนใๅธฆ base_version ๅไน่งๅนถๅๆ ก้ช๏ผไธๅธฆๅ่ชๅจ่ฏปๅๆๆฐ็ๆฌใ409 ๆถ่ฏท้่ฏปๅๅนถ้่ฏใ
| Name | Required | Description | Default |
|---|---|---|---|
| node | No | ๅฎๆดๆฟๆข็ tiptap ่็น | |
| attrs | No | ๅๅนถ่ฟ็ฐๆ attrs ็ๅญๆฎต | |
| content | No | ๆฟๆขๅ็ๅญๅ ๅฎน | |
| block_id | Yes | Stable block ID within the target document. | |
| document_id | Yes | Target document ID. | |
| base_version | No | ่ฏปๅๆถๆฟๅฐ็ version๏ผๅผบ็ๅปบ่ฎฎๆไพ๏ผ |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond annotations: it discloses optimistic concurrency via base_version, automatic latest-version reading when base_version is omitted, and 409 conflict handling with re-read/merge/retry guidance. This is consistent with annotations (readOnlyHint=false, idempotentHint=true) and adds value that is not present in the annotation block.
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 brief and front-loaded: the first sentence states the purpose and the two usage modes, the second sentence covers concurrency and error retry. Every sentence delivers essential information without 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?
The description covers purpose, usage modes, concurrency handling, and error recovery, with output schema and 100% parameter description coverage filling in the rest. It does not state what happens if no node/attrs/content is provided, but that is arguably a schema or validation concern rather than a description gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already documented. The description goes further by clarifying base_version's role in optimistic concurrency and the auto-read behavior when absent, plus the distinction between node (full replacement) and attrs/content (partial modification). This is additional semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'ๆดๆฐๅไธชๅ' (update a single block) with a specific verb and resource, and clearly distinguishes two modes: full node replacement vs partial modification via attrs/content. This makes it easy to differentiate from siblings like doco_insert_blocks and doco_delete_block without ambiguity.
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 explicitly explains when to use full node replacement versus partial attrs/content modification, and describes how base_version should be used with a clear fallback to auto-read latest version. It does not explicitly name alternatives or exclusion conditions, but the usage context is clear enough given the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doco_readDoco ReadARead-onlyIdempotent
ๆ token ้ข็ฎๅฑ้จ่ฏปๅๆๆกฃใๅฏ็จ around ้ๅฎไปปๆๅตๅฅ block_id๏ผๆ็จ next_cursor ็ปญ่ฏป๏ผๆธธๆ ็ปๅฎๆญฃๆ็ๆฌ๏ผread_cursor_stale ๆถๅฟ ้กป้ๆฐ่งๅใ
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Output view: markdown, tiptap-json, plain-text, or outline. | |
| around | No | Stable block ID to center the local reading window around. | |
| cursor | No | Opaque pagination cursor returned by the previous response. | |
| locale | No | BCP-47 locale; use all where supported. | |
| max_tokens | No | Approximate maximum token budget for the response. | |
| document_id | Yes | Target document ID. | |
| context_after | No | Number of surrounding blocks to include after the anchor. | |
| context_before | No | Number of surrounding blocks to include before the anchor. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds meaningful behavioral context beyond those annotations: the cursor is bound to the document body version, and `read_cursor_stale` signals that re-planning is needed. This is useful failure-mode disclosure and does not contradict the annotations.
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 compact, with the core purpose front-loaded and the navigation and staleness behavior condensed into two sentences. Every clause contributes useful information, with no filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 8 parameters, full schema coverage, and an output schema, the description covers the essential purpose, local-reading scope, navigation mechanisms, and cursor-version staleness. It does not explicitly explain how to choose this over sibling tools, but that gap is more about usage guidance than completeness of the read operation itself.
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 all 8 parameters already have descriptions. The description adds some value by explaining that `around` can anchor any nested block_id and that cursor continuation is supported, but it also references `next_cursor` while the schema property is named `cursor`, creating slight ambiguity. Overall, it provides modest value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'ๆ token ้ข็ฎๅฑ้จ่ฏปๅๆๆกฃ' (read a document locally under a token budget), giving a specific verb, resource, and scope. It clearly conveys what the tool does, though it does not explicitly differentiate it from siblings like doco_get_document, doco_get_blocks, or doco_outline.
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 explains usage mechanics: use `around` to anchor a nested block_id, or use a cursor to continue reading, and that a stale cursor requires re-planning. However, it does not explicitly state when to prefer this tool over alternatives or when not to use it, so the usage context is implied rather than fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doco_rebuild_summaryDoco Rebuild SummaryAIdempotent
้ๅปบๆ่ฆใdeterministic ๅๆญฅ่ฟๅๅฏ่ฟฝๆบฏ fallback๏ผmodel ๅชๅๅปบๅผๆญฅไปปๅก๏ผๅฟ ้กป้ๅ็จ doco_summary(job_id) ๆฅ่ฏข๏ผๆฅๆบๅๅๆๆ่ฆ่ขซ้ไฝๆถ็ปๆไผ obsolete ่ไธไผ่ฆ็ใ
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Summary scope: document, folder, or knowledge_base. | |
| block_id | No | Stable block ID within the target document. | |
| generator | No | Summary generator: deterministic or model. | |
| target_id | Yes | Document, folder, or knowledge base ID. | |
| idempotency_key | No | Optional key that makes a retried write safe. | |
| base_source_version | No | Source version used when preparing the summary write. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only thin hints in annotations (readOnlyHint=false, idempotentHint=true), the description carries the behavioral burden and does so richly: it discloses the sync-versus-async contract per generator, the mandatory follow-up polling via doco_summary, the obsolescence condition when the source changes or the summary is pinned, and the guarantee that stale results will not overwrite. This is consistent with all annotations โ idempotentHint=true aligns with the non-overwrite and idempotency_key behavior โ and no contradiction exists.
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 compact โ two sentences, front-loaded with the core action '้ๅปบๆ่ฆ' followed by generator-specific contracts. Every clause carries distinct information (execution mode, return behavior, staleness policy, overwrite guarantee) with no filler or restatement of the tool name. The semicolon-chained structure is dense but readable, losing a point only for the slightly run-on feel.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema (100% coverage, enums, idempotency key), the idempotentHint annotation, and an existing output schema, the description only needs to fill the behavioral contract โ which it does thoroughly via sync/async mode, staleness conditions, and non-overwrite guarantees. The residual gaps are selection criteria between deterministic and model generators and the exact meaning of 'ๅฏ่ฟฝๆบฏ fallback', but neither blocks a correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters and the baseline is 3. The description adds only indirect value: the obsolescence condition implies meaning for base_source_version, and the pinned-summary behavior relates to target scope, but no parameter-level syntax or format is elaborated. This is acceptable because the schema handles the burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the verb+resource pair '้ๅปบๆ่ฆ' (rebuild summary), clearly identifying a write-rebuild operation on a summary. It further distinguishes itself from the sibling query tool doco_summary by stating that a model generator requires a follow-up query via doco_summary(job_id). However, it never names doco_save_summary, its closest writing sibling, so an agent must infer the distinction between rebuilding and saving without explicit guidance.
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 gives concrete, actionable workflow guidance: for the model generator it explicitly states that only an async task is created and the agent must subsequently call doco_summary(job_id) to retrieve the result, which routes an agent correctly between two sibling tools. It provides clear context for the deterministic vs model split but lacks an explicit statement of when to prefer this over doco_save_summary or criteria for choosing between the two generators.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doco_refresh_concept_candidatesDoco Refresh Concept CandidatesAIdempotent
่งฆๅๆฆๅฟตๅ้ๆฝๅ/ๅทๆฐใๅช็ๆๅพ ๅฎกๆ ธๅ้๏ผไธไผ็ดๆฅๆฑกๆๆพๅผๆฆๅฟตๅฑ๏ผๅๅ ฅ่ชๅจๅธฆๅน็ญ้ฎใ
| Name | Required | Description | Default |
|---|---|---|---|
| document_id | Yes | ่ฆ้ๆฐๆฝๅๅ้็ๆๆกฃ ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide idempotentHint=true and destructiveHint=false; the description adds useful behavioral detail by specifying that writes automatically carry an idempotency key and that only pending-review candidates are generated, not direct changes to the explicit concept layer. This refines and contextualizes the annotation hints without contradicting them.
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 only two short sentences, with the primary action and the key safety guarantee front-loaded. Every phrase carries meaning, and there is no filler or unnecessary elaboration.
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 single-parameter tool with full schema coverage, idempotency annotation, and an existing output schema, the description provides sufficient information for correct selection and invocation. The absence of an explicit sibling alternative pointer is a usage-guideline nuance, not a completeness gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter document_id is fully documented in the input schema ('่ฆ้ๆฐๆฝๅๅ้็ๆๆกฃ ID'), and the description adds no additional parameter-level semantics. With schema description coverage at 100%, the baseline score of 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?
The description names a specific action ('่งฆๅๆฆๅฟตๅ้ๆฝๅ/ๅทๆฐ') and resource ('ๆฆๅฟตๅ้'), and distinguishes this from the explicit concept layer by stating it only generates pending-review candidates. This makes it easy for an agent to tell it apart from siblings such as doco_concepts and doco_edit_concepts even without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly communicates when to use the tool: to trigger candidate extraction/refresh while avoiding direct pollution of the explicit concept layer. It does not explicitly name an alternative or give a when-not-to-use statement, but the safety boundary and 'pending-review' wording provide enough context for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doco_review_translation_unitDoco Review Translation UnitAIdempotent
ๅจๅ ทไฝ็ฎๆ ่ฏญ่จๆๆกฃไธ็กฎ่ฎคๅฝๅ่ฏๆๆๅฟฝ็ฅๅๅ ๏ผไธๆฅๅๆบๅจ็ปๆ็ดๆฅ่ฆ็๏ผ้ๅฐ 409 ๅฟ ้กป้่ฏป็ฎๆ ็ๆฌใ
| Name | Required | Description | Default |
|---|---|---|---|
| unit_id | Yes | Translation unit ID. | |
| if_match | No | Expected version or ETag for optimistic concurrency. | |
| document_id | Yes | Target document ID. | |
| review_status | Yes | Review decision: current or ignored. | |
| target_block_ids | No | Stable target block IDs containing the reviewed translation. | |
| target_document_id | Yes | Target language document ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as non-read-only, non-destructive, and idempotent. The description adds value by disclosing that the tool refuses direct machine-result overwrites and by prescribing re-reading the target version after a 409. This concurrency and review-policy behavior is not visible in the annotations or schema and meaningfully improves the agent's expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the core action, then appends the two most important constraints: no machine-result overwrite and 409 re-read behavior. There is no repetition of schema or annotation content and no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a review-state tool with an output schema and fully described parameters, the description covers the essential action, the no-machine-overwrite policy, and the key conflict-handling instruction. The only notable gap is that it does not help an agent tell document_id and target_document_id apart, but the rest of the structured context is sufficient for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters are at least nominally documented. The description indirectly clarifies review_status by mapping 'current' to confirming the translation and 'ignored' to ignoring the unit, but it does not disambiguate document_id from target_document_id, which remain confusingly similar in the schema. A baseline 3 is appropriate because the schema carries most of the parameter documentation burden.
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 precise verb and resource: 'confirm current translation or ignore unit' on a specific target-language document. It also explicitly excludes direct machine-result overwrites, which distinguishes this review action from editing tools. This goes well beyond the title and makes the tool's role clear.
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 gives clear context: the tool is used on a target-language document to record a review decision. It also provides an explicit exclusion ('does not accept direct overwrite by machine results') and a conflict protocol ('on 409, must re-read the target version'). It does not name sibling tools such as doco_patch_block or doco_translation_units, so it falls just short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doco_save_summaryDoco Save SummaryAIdempotent
ไบบๅทฅ็ผ่พๅนถๅฏ้ไฝๆ่ฆใๅฎขๆท็ซฏไผๅ ่ฏปๅๅฝๅ summary/source ๅ็ๆฌๅๅธฆไฟๆคๅๅ ฅ๏ผpinned ๅช้ฒ่ชๅจ่ฆ็๏ผๆฅๆบๅๅๅไปไผๆพ็คบ staleใ
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Summary scope: document, folder, or knowledge_base. | |
| pinned | No | Whether to pin the manually saved summary. | |
| summary | Yes | summary parameter. | |
| block_id | No | Stable block ID within the target document. | |
| target_id | Yes | Document, folder, or knowledge base ID. | |
| base_source_version | No | Source version used when preparing the summary write. | |
| base_summary_version | No | Summary version used when preparing the summary write. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses important behavior: pinned only prevents automatic overwrites, source changes cause the summary to show stale, and base versions are used for concurrency protection. This goes beyond annotations (idempotent, non-destructive) and is consistent with them.
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 convey purpose, protocol, and pinned behavior without redundancy; all content is relevant and no filler is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema and full parameter coverage, the description adds necessary context about versioning, stale display, and the read-before-write requirement that cannot be inferred from the schema alone.
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?
All seven parameters have descriptions, including the protocol-critical base_source_version and base_summary_version, and the scope enum. The overall description clarifies how these parameters function in the protected write.
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 the tool's function clearly: 'Manually edit and pin summary' and explains the read-before-write protocol with dual versions, distinguishing it from automatic summary generation and rebuild 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?
Provides guidance to read current summary/source versions before writing and explains the protective write and pinned semantics. However, it does not explicitly name alternative tools such as doco_rebuild_summary, so the condition for choosing manual over automatic summary updates is not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doco_searchDoco SearchARead-onlyIdempotent
ๆๆ ้ขๅๆญฃๆๅ จๆๆ็ดขๆๆกฃใๆญฃๆๅฝไธญ่ฟๅ็จณๅฎ block_id ไธๆ่ฆ๏ผ้ๅๅ ๅฎไฝๅ็จๅ API ็ฒพ็กฎ่ฏปๅๆไฟฎๆนใ
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | ๆ ้ขๆๆญฃๆๅ ณ้ฎ่ฏ | |
| limit | No | ็ปๆๆฐ๏ผ้ป่ฎค 20 | |
| locale | No | BCP-47 locale; use all where supported. | |
| knowledge_base_id | No | ๅฏ้๏ผ้ๅฎ็ฅ่ฏๅบ ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only, idempotent, and non-destructive. The description goes beyond by disclosing that body hits return a stable block_id and summary, and explicitly frames the tool as a locating step rather than a mutating action. This is valuable behavioral context without contradicting the annotations.
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 well-structured sentence that front-loads the core action and then provides the most useful operational detail: stable block_id for follow-up block API calls. Every clause earns its place with no fluff or repetition of annotation information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description does not need to explain return values in depth. It covers the essential search behavior, the useful block_id outcome, and the intended follow-up workflow. It is complete enough for an agent to call the tool correctly, though it could mention when to prefer doco_search_v2.
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 the schema already explains q, limit, locale, and knowledge_base_id. The description adds no parameter-level detail beyond restating that search covers title and body, which is also embedded in the schema. Baseline 3 is appropriate because the description does not need to compensate for schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: full-text search across documents by title and body. It also adds what result shape matters (stable block_id and summary), which helps distinguish it from generic list/read tools. However, it does not explicitly differentiate itself from the closely named sibling doco_search_v2.
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 gives a clear usage context: use this to locate documents first, then call block APIs for precise read or modification. This implies the intended search-to-locate workflow. It does not mention when to prefer doco_search_v2 or any exclusion criteria, so it is not a full routing guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doco_search_v2Doco Search V2ARead-onlyIdempotent
ๅธฆๆฅ่ฏข็บงๅฎๆดๆง่ฏๆ็ๅ จๆๆ็ดขใ่ฟๅ็ฎๅฝ่ทฏๅพใๆ ้ข่ทฏๅพใๅๅๆใๅๆฐ่งฃ้ใsource/indexed ๆฐดไฝ๏ผexhaustive ๆจกๅผๅฏ็จ cursor ๅฎๆด้ๅใprojection.complete=false ๆถ็ปๆไธๅฎๆด๏ผไธ่ฝๆฎๆญคๆญ่จโ็ฅ่ฏไธๅญๅจโใ
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Title or body search query. | |
| mode | No | mode parameter. | |
| limit | No | Maximum number of results (1โ100). | |
| cursor | No | Opaque pagination cursor returned by the previous response. | |
| locale | No | BCP 47 ่ฏญ่จๆ ็ญพๆ all | |
| knowledge_base_id | No | Knowledge base ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description's job is to go beyond safety traits โ and it does substantially. It discloses the response composition, the cursor-based exhaustive traversal semantics, and critically the negative-evidence rule: when projection.complete=false, results are incomplete and 'ไธ่ฝๆฎๆญคๆญ่จ็ฅ่ฏไธๅญๅจ' (cannot assert knowledge absence). This directly prevents a classic agent failure mode of treating a search miss as proof of non-existence. No contradiction with the annotations; it refines the open-world nuance without conflicting.
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 dense sentences with no filler: the first front-loads the purpose and enumerates the return fields, the second conveys the exhaustive-mode traversal capability and the completeness caveat. Every clause earns its place, and the most decision-relevant warning (incomplete results cannot prove absence) is placed at the end where it reads as a caution.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description is not obligated to fully document return values, yet it still summarizes the key return categories and adds the completeness semantics that no schema could express. For a 6-parameter tool with pagination, an enum mode, and locale/KB scoping, this covers the essentials. The one genuine gap is sibling routing: with doco_search present in the same tool list, the absence of any statement about which search variant to prefer leaves a meaningful completeness hole.
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 the schema carries the per-parameter documentation burden and the baseline is 3. The description adds genuine value on the mode/cursor interplay โ that exhaustive mode combined with cursor allows complete traversal โ which the schema's terse 'mode parameter' and 'opaque pagination cursor' text does not convey. It does not, however, add meaning for q, limit, locale, or knowledge_base_id beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource โ 'ๅ จๆๆ็ดข' (full-text search) โ qualified by a distinctive feature, 'ๅธฆๆฅ่ฏข็บงๅฎๆดๆง่ฏๆ' (with query-level completeness proof), and enumerates the return content (catalog path, title path, context, score explanation, watermarks). However, it never differentiates itself from the near-identically named sibling doco_search; the reader must infer why two search tools exist rather than being told.
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 context is implied rather than explicit: 'exhaustive ๆจกๅผๅฏ็จ cursor ๅฎๆด้ๅ' tells the agent that exhaustive mode plus cursor enables full traversal, and the projection.complete=false caveat indicates when a negative result is not trustworthy. But no alternative tools are named, and the obvious sibling doco_search is not addressed with any 'use this when / use that when' guidance, leaving the selection between the two search tools to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doco_summaryDoco SummaryARead-onlyIdempotent
่ฏปๅ็ซ ่ใๆๆกฃใๆไปถๅคนๆ็ฅ่ฏๅบๆ่ฆ๏ผๆๆฅ่ฏขๅผๆญฅ็ๆไปปๅกใ็ปๆๅธฆๆฅๆบๅใๆฅๆบ็ๆฌใ่ฆ็็ใfreshness ไธ fallback ่ฏญไน๏ผๆจกๅๅ ณ้ญๆถไปๅง็ปๅฏ็จใ
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Optional question or summary query. | |
| scope | No | Summary scope: document, folder, or knowledge_base. | |
| job_id | No | ไผ ๅ ฅๆถๆนไธบๆฅ่ฏขๆ่ฆ็ๆไปปๅก | |
| block_id | No | Stable block ID within the target document. | |
| target_id | No | Document, folder, or knowledge base ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds that results include source blocks, source versions, coverage, freshness, and fallback semantics, and that it is always available even when the model is off. This goes beyond the annotations, which only state read-only, idempotent, and non-destructive. It does not detail behavior when querying an incomplete async job, but overall adds useful context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, starting with the main purpose, and includes essential details without superfluous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and annotations cover safety, the description adequately conveys the tool's main functions and result characteristics. It could elaborate on parameter relationships or expected error scenarios, but it is sufficient for an agent to select and invoke the 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?
Each parameter has a description, covering 100% of the schema. The descriptions explain the role of query, scope, job_id, block_id, and target_id. However, they do not clarify how parameters combine (e.g., whether job_id supersedes target_id) or which are mutually exclusive, so the description adds limited semantic depth beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads summaries of various scopes (document, folder, knowledge base) and also queries asynchronous generation tasks. It distinguishes itself from siblings like doco_save_summary or doco_rebuild_summary by focusing on reading.
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 does not explicitly specify when to use this tool versus alternative tools like doco_get_document or doco_outline. It implies usage for retrieving summaries, but lacks direct guidance or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doco_translationsDoco TranslationsBRead-onlyIdempotent
่ฏปๅไธไธชๅ ทไฝๆๆกฃ็ Document Setใๆบ่ฏญ่จใๅฏ็จ่ฏญ่จ็ๆฌๅๆฏ็ง่ฏญ่จ็ๆฐ้ฒๅบฆใ
| Name | Required | Description | Default |
|---|---|---|---|
| document_id | Yes | Target document ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, and idempotentHint. The description's mention of '่ฏปๅ' aligns with these, but it adds no additional behavioral context beyond the annotations. With annotations present, the bar is lower, so a score of 3 is appropriate.
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, clear sentence with no unnecessary words or repetition. It is concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides sufficient context for a simple read operation, identifying the specific data points returned. However, it does not mention output format or any potential errors, but that is not critical for a read-only tool with no output schema.
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 only parameter, document_id, is described in the schema as 'Target document ID.' The tool description does not add further explanation or context for the parameter. Since schema coverage is 100%, a baseline score of 3 is warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads a specific document's Document Set, source language, available language versions, and freshness. It uses the verb '่ฏปๅ' (read) and specifies the resource, distinguishing it from other document-related 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 provides no guidance on when to use this tool versus alternatives. It does not mention any conditions, prerequisites, or situations where this tool is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doco_translation_unitsDoco Translation UnitsARead-onlyIdempotent
่ฏปๅ็ฎๆ ่ฏญ่จ็ๅ็บง็ฟป่ฏๅๅ ใ็จณๅฎๅๆ ๅฐใsource_version ๅ missing/current/conflict ็ญ็ถๆใ
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | BCP-47 locale; use all where supported. | |
| status | No | Filter by the requested status. | |
| document_id | Yes | Target document ID. | |
| target_document_id | No | Target language document ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, and the description's ่ฏปๅ is fully consistent. The description adds meaningful context beyond annotations by enumerating the exact data exposed: block-level translation units, stable block mapping, source_version, and missing/current/conflict statuses. It does not discuss edge-case behavior, but the output schema and read-only annotations lower the burden.
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 dense sentence that front-loads the action and resource, with no filler, repetition of the title, or irrelevant detail. Every clause contributes useful information about what the tool reads.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema, rich read-only annotations, and complete parameter-level schema descriptions, the description covers the core semantics well. The only notable gap is usage guidance versus sibling tools, but the resource scope is clear enough for an agent to select and invoke the tool 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 description coverage is 100%, so the baseline is 3. The description adds value by naming the status vocabulary (missing/current/conflict) and clarifying that locale relates to target-language content, which is not fully specified in the parameter descriptions. It does not elaborate on document_id versus target_document_id, but the schema already provides those descriptions.
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 the verb ่ฏปๅ (read) and names a specific resource: block-level translation units plus stable block mapping, source_version, and translation statuses. This makes it clear that the tool is a read operation, distinct from review/write siblings, though it does not explicitly name or contrast any sibling.
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 about when to use this tool versus doco_translations or doco_review_translation_unit, and no mention of alternative conditions or exclusions. The verb ่ฏปๅ implies a read context, but that is implicit rather than explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doco_traverseDoco TraverseARead-onlyIdempotent
ๆฒฟๆพๅผๅ ณ็ณป้ๅๆๆกฃใ่ฟๅๆญฃๅ/ๅๅๅ ณ็ณปใๆณจๅ่ฐ่ฏใๆฅๆบๅไธๆฅๆบ็ๆฌ๏ผstatus=dangling_* ๆถ็ฎๆ ๅทฒๅคฑๆ๏ผevidence_freshness=stale ๆถๅบ้ๆฐ็กฎ่ฎค่ฏๆฎ๏ผprojection_freshness=stale ๆถไธๅพๅฝไฝๅฎๆดๅ ณ็ณปๅพใ
| Name | Required | Description | Default |
|---|---|---|---|
| direction | No | Relationship direction: outgoing, incoming, or both. | |
| predicate | No | Relationship type to filter or create. | |
| document_id | Yes | Target document ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful interpretation semantics: status=dangling_* invalidates the target, evidence_freshness=stale requires re-confirming evidence, and projection_freshness=stale means the result is not a complete relationship graph. This kind of staleness/validity context goes well beyond the annotations.
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 one dense sentence that front-loads the primary action before the return summary and three status caveats. Every clause earns its place, though splitting the trailing semicolon-separated caveats into separate sentences or bullets would improve scannability; the Chinese-language description also sits alongside an English schema without issue.
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 read-only traversal tool with a rich output schema and safety annotations, the description covers what is returned and how to interpret dangling/stale flags. Minor gaps remain: pagination or traversal depth/limits are not mentioned, and no guidance connects this to doco_create_relation as the mutation counterpart, but the output schema likely covers return shape.
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 all three parameters (document_id, direction, predicate) are already documented in the schema. The description ties output concepts (forward/reverse relations, registered predicates) to the direction and predicate parameters but adds no new syntax or format detail, matching the baseline-3 expectation for high schema coverage.
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 โ traverse documents along explicit relationships โ and enumerates what it returns (forward/reverse relations, registered predicates, source blocks, source versions). This clearly differentiates it from siblings like doco_get_tree, doco_read, doco_search, and especially doco_create_relation, which is the write counterpart.
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 'explicit relationships' implies it is for relationship traversal rather than content reading or tree structure, giving some usage context. However, it never names alternatives or states when not to use it; with many nearby read tools (doco_get_tree, doco_outline, doco_search), explicit routing would help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doco_update_documentDoco Update DocumentADestructiveIdempotent
ๆด็ฏๅๅๆๆกฃๆญฃๆใmarkdown ๅๅๅญ ้็นไฟ็ๆชๆนๅจๅ ID๏ผ้ ๅ doco_get_document ็ annotate=anchors๏ผ๏ผtiptap-json ไธบๆด็ฏๆ ๆๆฟๆขใๅผบ็ๅปบ่ฎฎๅธฆ base_version๏ผ409 ๆถ้่ฏปๅๅนถ้่ฏใ
| Name | Required | Description | Default |
|---|---|---|---|
| format | Yes | ๆญฃๆๆ ผๅผ | |
| content | No | markdown / html ๆญฃๆๆๆฌ | |
| document | No | tiptap-json ๆๆกฃๅฏน่ฑก | |
| document_id | Yes | Target document ID. | |
| base_version | No | ่ฏปๅๆถๆฟๅฐ็ version๏ผๅผบ็ๅปบ่ฎฎๆไพ๏ผ |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
ๅจdestructiveHint=trueๅidempotentHint=true็ๅบ็กไธ๏ผๆ่ฟฐ่ฟไธๆญฅ่กฅๅ ไบๅ ทไฝๆบๅถ๏ผmarkdownๅๅ ฅๅฆไฝไฟ็ๆชๆนๅจๅIDใtiptap-jsonๆด็ฏๆฟๆขใ็ๆฌๅฒ็ชๆถ็ๅๅนถ้่ฏๅปบ่ฎฎ๏ผ่ฟไบๆฏๆณจ่งฃๆช่ฆ็็่กไธบ็ป่๏ผๅฏน่ฐ็จ่ ๅคๆญๅฏไฝ็จๅๆขๅค็ญ็ฅ้ๅธธๆไปทๅผใ
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?
ไธๅฅ่ฏ่ฆ็ๆ ธๅฟๆไฝใๆ ผๅผ่กไธบๅ็ๆฌๅปบ่ฎฎ๏ผไฟกๆฏ้ซๅบฆๆต็ผฉ๏ผๆ ๅไฝ่ฏๆฑ๏ผๅ ณ้ฎ็บฆๆ๏ผๆด็ฏใbase_version๏ผๅ็ฝฎ๏ผ็ปๆๆธ ๆฐๅฉ่ฝใ
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?
้ขๅฏน5ไธชๅๆฐใ3็งๆ ผๅผใ้็นๆบๅถๅ409ๅฒ็ชๅบๆฏ๏ผๆ่ฟฐ่ฆ็ไบ่ฐ็จๆ้็ๆ ธๅฟ่ฆ็น๏ผๆ ผๅผๅทฎๅผใๅฒ็ชๅบๅฏนๅ็ๆฌๅปบ่ฎฎใไฝ็ผบๅฐๅฏนๆ ้็นๆ ๅต็่ฏดๆไปฅๅไธๆน้/ๅฑ้จ็ผ่พๅทฅๅ ท็่พน็ๆ้๏ผ็ฅๆ้ๆผใ
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ๅฏน5ไธชๅๆฐ100%่ฆ็๏ผๆไพไบๅบๆฌๆ่ฟฐ๏ผๅ ๆญคๅบ็บฟไธบ3ใๆ่ฟฐ้ขๅคๅผบ่ฐไบbase_version็ๅ ณ้ฎๆงๅformat็่กไธบๅทฎๅผ๏ผๅธฎๅฉ่ฐ็จ่ ็่งฃๅๆฐ้ๆฉไธ็ปๅไฝฟ็จ๏ผไฝๆชๆ็กฎcontent/documentไธformat็ๅฏนๅบๅ ณ็ณป๏ผ็ฅ้ไบๅฎ็พใ
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?
ๆ่ฟฐไปฅ'ๆด็ฏๅๅๆๆกฃๆญฃๆ'ๆ็กฎ่กจ่พพไบๅจ่ฏๅ่ตๆบ๏ผ็ดๆฅ่ฏดๆ่ฟๆฏๅ จๆๆดๆฐๆไฝ๏ผไธpatch_blockใinsert_blocksใdelete_block็ญๅฑ้จ็ผ่พๅทฅๅ ทๅฝขๆๆๆพๅบๅใ'ๆด็ฏ'ไธ่ฏๅผบ่ฐไบไฝ็จ่ๅด๏ผไธๅญๅจๆญงไนใ
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?
ๆ่ฟฐไบไธๅformatไธ็ไฝฟ็จๆนๅผ๏ผmarkdown้็นไฟ็ใtiptap-jsonๆ ๆๆฟๆข๏ผ๏ผๅนถๅผบ็ๅปบ่ฎฎๅธฆbase_versionๅ409ๅฒ็ชๅ็้่ฏ็ญ็ฅ๏ผๆไพไบๆธ ๆฐ็ไฝฟ็จไธไธๆใไฝๆชๆพๅผ่ฏดๆไฝๆถไธๅบ็จๆญคๅทฅๅ ท่ๆน็จๅ ถไป็ผ่พๅ ๅผๅทฅๅ ท๏ผ็ผบๅฐๆ็กฎ็ๆ้คๆกไปถใ
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doco_upload_attachmentDoco Upload AttachmentA
ไธไผ ้ไปถ๏ผๅพ็/PDF/ๆๆฌ/Word๏ผ๏ผ่ฟๅ attachment_id ไธ URL๏ผๅจๆๆกฃๅไธญ็จ image ่็น attrs.attachmentId ๅผ็จ
| Name | Required | Description | Default |
|---|---|---|---|
| filename | No | Optional filename to use for the uploaded attachment. | |
| file_path | Yes | ๆๅกๅจ/ๆฌๆบๅฏ่ฎฟ้ฎ็ๆไปถ็ปๅฏน่ทฏๅพ | |
| document_id | Yes | ้ไปถๅฝๅฑๆๆกฃ ID | |
| idempotency_key | No | Optional key that makes a retried write safe. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a write operation (readOnlyHint=false) and not idempotent. The description adds supported file types and return values, but does not disclose potential side effects, retry behavior, or file size limits. With annotations covering the safety profile, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the action, supported types, return values, and usage tip. Every clause earns its place; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists and annotations are present, the description covers the essential workflow: upload, get IDs, reference in blocks. It omits edge-case details like file size limits, but those are not critical for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3 applies. The description adds value by enumerating acceptable file types (image/PDF/text/Word) that are not present in the file_path schema description, clarifying the parameter's allowed content.
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 (ไธไผ /upload), names the resource (attachment), lists supported file types, and states the return values (attachment_id, URL) plus the referencing workflow. It is clearly distinct from sibling tools, none of which perform uploads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: use when you need to attach a file to a document, and it explains how the resulting attachment_id is used in image blocks. It doesn't name exclusions or alternatives, but no direct alternative exists among siblings, so the guidance is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doco_whoamiDoco WhoamiARead-onlyIdempotent
่ชๆฃ่บซไปฝ๏ผๅฝๅ Token ๅฏนๅบ็็จๆทไธๆ้ scope
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only, idempotent, and non-destructive, lowering the bar for behavioral disclosure. The description adds useful context by specifying that it inspects the current token and reports user/permission scope, but it does not elaborate on behavior around missing or invalid tokens.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It communicates the action and the object in minimal space, and every word 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?
Given the tool's low complexity, zero parameters, rich annotations, and existing output schema, the description is complete enough. It clearly tells an agent what the tool does and what information it will surface, with no meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is 100%, so there is no parameter documentation burden for the description. The no-parameter baseline is 4, and the description appropriately says nothing about inputs.
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 an explicit self-check action ('่ชๆฃ่บซไปฝ') and clearly identifies the resource: the user and permission scope associated with the current token. This is distinct from all sibling tools, which focus on documents, search, translations, and concepts rather than identity introspection.
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 the intended use case: call this tool when you need to know the current token's user identity or permission scope. It does not explicitly name alternatives or exclusions, but no sibling tool appears to serve this identity-check purpose, so the contextual guidance is sufficient.
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.
29 tool updates
v0.1.0- First observed
doco_batch_edit - First observed
doco_changes - First observed
doco_concepts - First observed
doco_create_document - First observed
doco_create_relation - First observed
doco_delete_block - First observed
doco_edit_concepts - First observed
doco_get_blocks - First observed
doco_get_document - First observed
doco_get_tree - First observed
doco_insert_blocks - First observed
doco_list_documents - First observed
doco_list_knowledge_bases - First observed
doco_outline - First observed
doco_patch_block - First observed
doco_read - First observed
doco_rebuild_summary - First observed
doco_refresh_concept_candidates - First observed
doco_review_translation_unit - First observed
doco_save_summary - First observed
doco_search - First observed
doco_search_v2 - First observed
doco_summary - First observed
doco_translation_units - First observed
doco_translations - First observed
doco_traverse - First observed
doco_update_document - First observed
doco_upload_attachment - First observed
doco_whoami
TDQS
Scored across 29 tools
Most tools map to a distinct resource and action (documents, blocks, translations, relations, concepts, summaries), so an agent can generally pick the right one. The main ambiguities are doco_search vs. doco_search_v2 and the easily confused doco_translations vs. doco_translation_units, though the descriptions give enough detail to resolve them.
The doco_ prefix, snake_case, and familiar verb_noun forms (list_, get_, create_, update_, delete_, insert_, patch_) give the set a strong, predictable pattern. A few noun-only readers (doco_changes, doco_outline, doco_concepts, doco_summary) and the doco_search_v2 suffix are minor deviations.
29 tools is a large surface, but the server covers many distinct subdomains: knowledge-base navigation, document/block editing, search, translations, relations, concepts, summaries, and attachments. Still, the count is heavy and some functions (search_v2, separate block readers) could plausibly be merged, so the set is borderline rather than tightly scoped.
The tool set covers document create/read/update, block-level editing, search, summaries, concepts, and translations, so most core workflows are supported. Notable gaps are the lack of document deletion, relation deletion, and attachment lifecycle operations (list/download/delete), which agents cannot work around easily.
Maintenance
Related MCP Connectors
Real-time chat for AI agents. Claude Code, Cursor, Cline and Codex join channels over MCP.
An agent-first office suite Claude & ChatGPT read and write over one MCP URL.
MCP-native collaborative markdown editor with real-time AI document editing
MarkupBase turns AI-generated Markdown and HTML into durable, versioned artifacts that people can review and discuss. Its MCP server lets agents publish new versions, preserve contextual comments, include hosted images, and respond to feedback through secure account-linked identities, creating a clear human review boundary without requiring real-time editing.
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP server that gives AI coding agents on-demand access to private project docs via BM25 ranked search. One setup for Claude Code, Cursor, Codex, Gemini CLI, and more. Docs stay private, never in public repos.1515Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA local-first MCP server for coordinating parallel AI coding sessions with tools like Claude Code and Codex in a single repository.2MIT

Writespaceofficial
AlicenseNot gradedqualityCmaintenancePersistent docs and memory for AI agents. Writespace is a collaborative markdown editor with a built-in MCP server โ your model reads, writes, organizes, and searches a shared workspace while humans edit the same docs live. Drop the ranked full-text search straight in as RAG retrieval.MIT- AlicenseNot gradedqualityFmaintenanceMCP server for collaborative markdown editing, allowing agents to write documents and humans to comment, with comments fed back as agent input.224,710 npmMIT