agentdocs-mcp
AgentDocs용 MCP 서버 — AI 에이전트가 일급 시민으로 취급되는 협업 문서 플랫폼입니다.
로컬 서버를 실행하는 MCP 클라이언트(Claude Code, Claude Desktop, Cursor, Windsurf, Zed, …)에 AgentDocs 페이지를 읽고, 검색하고, 생성하고, 업데이트하고, 공유하는 기본 도구를 제공합니다.
Claude.ai(웹), Claude Desktop 및 Claude 모바일은 토큰 없이 연결됩니다:
https://agentdocs.eu/mcp를 사용자 지정 커넥터로 추가하고(Settings → Connectors → Add custom connector) Advanced 설정은 비워 두세요. AgentDocs는 OAuth 2.1을 구현합니다 — Claude가 흐름을 자동으로 발견하고, 브라우저에서 AgentDocs 동의 페이지가 열리며, 승인 후 연결됩니다. 이 권한은 사용자의 문서에만 적용되며 agentdocs.eu → Settings → Connected apps에서 언제든지 취소할 수 있습니다. 호스팅된 Skill은 커넥터가 필요 없는 대체 수단으로 유지되며, Claude Desktop은 아래의 로컬 stdio 설정도 실행할 수 있습니다.
공식 MCP 레지스트리에
io.github.hoornet/agentdocs-mcp로
등재되어 있습니다.
설정
MCP 커넥터 클라이언트(Claude.ai / Desktop / 모바일)는 토큰이 필요 없습니다 — 위의 OAuth 참고를 확인하세요. 로컬 stdio 서버 및 기타 클라이언트의 경우 AgentDocs API 토큰이 필요합니다:
계정 토큰 — agentdocs.eu → Profile → Regenerate API Token(소유한 모든 항목에 대한 전체 액세스), 또는
스페이스 토큰 — Space settings → Tokens(정확히 하나의 스페이스에 대한 편집자 액세스; 서버가 이를 자동으로 감지하고 해당 스페이스로 범위를 제한합니다 — 에이전트를 샌드박스 처리하는 권장 방법).
원격(호스팅) — 설치할 항목 없음
원격 MCP를 지원하는 모든 클라이언트는 호스팅 엔드포인트를 직접 사용할 수 있습니다. 설치할 패키지도, 업데이트할 항목도 없습니다. stdio 서버와 동일한 19개 도구를 제공합니다.
https://agentdocs.eu/mcp (Streamable HTTP)
Authorization: Token <your-token> # or no header at all — OAuth clients authenticate via the built-in flow# Claude Code
claude mcp add --transport http agentdocs https://agentdocs.eu/mcp \
--header "Authorization: Token <your-token>"Claude.ai(웹) 및 Claude Desktop은 서로 동일한 흐름을 사용합니다: Settings → Connectors
→ Add custom connector, Authorization 요청 헤더 포함.
이 요청 헤더 필드는 Anthropic 베타 기능으로, 계정별로 활성화됩니다. Advanced settings에 OAuth Client ID와 OAuth Client Secret만 표시된다면 계정에 해당 기능이 없는 것입니다 — 그리고 이 OAuth 필드는 여기서 작동하지 않습니다. AgentDocs는 아직 OAuth를 구현하지 않았기 때문입니다(예정). 커넥터는 단순히 연결 실패를 보고합니다.
이 경우 Skill을 사용하세요(Skills → Upload Skill): 베타 액세스가 필요 없고, 동일한 REST API를 사용하며, 현재 Claude.ai에서 가장 안정적인 경로입니다.
여기서는 Bearer <api_token>과 Token <api_token>이 모두 허용됩니다. 여러 클라이언트가
"Bearer" 필드만 제공하기 때문입니다. 계정 토큰과 스페이스 범위 토큰 모두 작동합니다 — 스페이스
토큰은 REST에서와 마찬가지로 세션을 해당 스페이스로 제한합니다.
Claude Code(로컬 stdio)
claude mcp add agentdocs --env AGENTDOCS_TOKEN=<your-token> -- npx -y agentdocs-mcpCodex CLI
codex mcp add agentdocs --env AGENTDOCS_TOKEN=<your-token> -- npx -y agentdocs-mcp또는 ~/.codex/config.toml에서:
[mcp_servers.agentdocs]
command = "npx"
args = ["-y", "agentdocs-mcp"]
[mcp_servers.agentdocs.env]
AGENTDOCS_TOKEN = "<your-token>"Claude Desktop / Cursor / Windsurf / Gemini CLI / 일반 MCP 설정
각각 claude_desktop_config.json / .cursor/mcp.json /
~/.codeium/windsurf/mcp_config.json / ~/.gemini/settings.json에서:
{
"mcpServers": {
"agentdocs": {
"command": "npx",
"args": ["-y", "agentdocs-mcp"],
"env": { "AGENTDOCS_TOKEN": "<your-token>" }
}
}
}VS Code(Copilot)
동일한 서버 블록이지만 .vscode/mcp.json은 최상위 "servers" 키를 사용합니다:
{
"servers": {
"agentdocs": {
"command": "npx",
"args": ["-y", "agentdocs-mcp"],
"env": { "AGENTDOCS_TOKEN": "<your-token>" }
}
}
}Zed
settings.json에서:
{
"context_servers": {
"agentdocs": {
"command": "npx",
"args": ["-y", "agentdocs-mcp"],
"env": { "AGENTDOCS_TOKEN": "<your-token>" }
}
}
}Opencode
opencode.json(프로젝트 루트) 또는 ~/.config/opencode/opencode.json에서:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"agentdocs": {
"type": "local",
"command": ["npx", "-y", "agentdocs-mcp"],
"environment": { "AGENTDOCS_TOKEN": "<your-token>" }
}
}
}pi / oh-my-pi
기본 pi는 MCP 지원 없이 제공됩니다 — 여기서는
Skill 또는 일반
REST API를 사용하세요.
oh-my-pi(omp) 포크는 MCP를 지원하며
이미 디스크에 있는 설정(.claude, .cursor, .codex,
.vscode, …)에서 서버를 상속합니다 — 위의 표준 mcpServers 블록을 그중 하나(예:
.cursor/mcp.json)에 추가하고 omp를 다시 시작하세요.
Windows
많은 MCP 클라이언트가 Windows에서 npx를 직접 실행할 수 없습니다(spawn npx ENOENT).
명령을 cmd /c로 감싸세요:
"command": "cmd",
"args": ["/c", "npx", "-y", "agentdocs-mcp"]카탈로그 기반 MCP 게이트웨이(예: Docker MCP 게이트웨이)는 큐레이션된 카탈로그의 서버만 실행하며 임의의 npx 서버를 실행할 수 없습니다 — agentdocs-mcp는 아직 여기에 등재되지 않았습니다. 대신 호스팅 원격 엔드포인트를 사용하세요:
https://agentdocs.eu/mcp(Streamable HTTP, 동일한 19개 도구, 설치 불필요) — 위의 원격을 참조하세요. 그것도 안 된다면 REST API가 완전한 동등 기능을 제공합니다.
구성
환경 변수 | 기본값 | 용도 |
|
| API 토큰(계정 또는 스페이스 범위) |
|
| API 기본 URL 재정의. 고급 — 다른 엔드포인트를 받은 경우에만 설정하세요 |
업데이트
위의 설정 명령은 고정되지 않았습니다(npx -y agentdocs-mcp). 따라서 항상
최신 게시 버전을 해석합니다. 새 릴리스를 적용하려면 MCP 클라이언트를 다시 시작하기만
하면 됩니다 — 클라이언트는 다시 시작할 때만 서버 프로세스를 다시 실행합니다.
서버는 시작 시 버전을 출력합니다(stderr): agentdocs-mcp vX.Y.Z: connected ….
npx가 오래된 캐시 사본을 제공하는 경우 강제로 새로 고침하세요:
npx -y agentdocs-mcp@latest # or: npm cache clean --forceRelated MCP server: mcp-rag-bridge
도구
도구 | 설명 |
| 사용자 및 자격 증명 범위 식별 |
| 액세스 가능한 워크스페이스 나열 ¹ |
| 워크스페이스의 스페이스 나열 ¹ |
| 스페이스의 페이지 트리(내용 제외) |
| 워크스페이스 전체의 전문(키워드) 검색 ¹ |
| 의미 기반 순위의 자연어 검색 — Pro 워크스페이스 ¹ |
| 페이지 읽기(전체 Markdown + 버전); 선택적 |
| Markdown 페이지 생성(중첩 가능) |
| 제목/내용 업데이트, 선택적 낙관적 버전 확인 포함 |
| Markdown 추가 — 로그 및 세션 보고서에 이상적 |
| Markdown 파일 폴더 가져오기; 경로가 페이지 계층 구조가 됩니다. 멱등 — 다시 가져오면 소스 경로로 재사용(중복 없음); |
| 페이지 삭제(하위 페이지로 연쇄 적용) |
| 명시적 구조로 최대 500개 페이지를 원자적으로 생성 |
| 공개 매직 링크 생성(웹 + 원시 Markdown URL) |
| 페이지의 스레드형 댓글 나열(id, 작성자, 부모) |
| 댓글 / 스레드 답글 게시( |
| 댓글 편집 또는 스레드 해결 표시(작성자/관리자) |
| 댓글 삭제(작성자/관리자) |
| PNG/JPEG/GIF/WebP를 스페이스에 첨부하고 임베드할 Markdown 가져오기 — |
¹ 스페이스 범위 토큰으로 실행할 때 숨겨집니다.
² path는 이 서버가 실행되는 머신의 파일을 읽으므로 stdio 서버에서만
작동합니다. 호스팅된 agentdocs.eu/mcp 엔드포인트는 이를 거부합니다 — 거기서 "머신"은
AgentDocs의 프로덕션 서버이며, 호출자가 제공한 경로를 존중하는 것은
임의 파일 읽기가 됩니다. 거기서는 source_url 또는 data를 사용하세요.
페이지, 스페이스 및 워크스페이스는 UUID 또는 사람이 읽을 수 있는 슬러그
경로로 주소를 지정할 수 있습니다 — get_page는 "my-workspace/my-space/my-page"를,
create_page는 "my-workspace/my-space" 등을 허용합니다(슬러그 경로는 계정 토큰 필요).
참고
모든 페이지 업데이트는 서버에 버전을 생성합니다. 이전 버전은 AgentDocs UI에서 계속 복원할 수 있습니다.
호스팅 인스턴스는 유휴 상태 후 첫 요청에 응답하는 데 ~15초가 걸릴 수 있습니다 (데이터베이스 콜드 스타트) — 서버는 35초 타임아웃과 재시도 1회로 이를 흡수합니다.
무료 티어 API 한도는 업그레이드 링크와 함께 명확한 메시지로 표시됩니다.
개발
npm install
npm run build
# End-to-end smoke tests (hit a real AgentDocs instance with YOUR data):
SMOKE_TESTBED_SPACE="workspace-slug/scratch-space-slug" \
SMOKE_KNOWN_PAGE="workspace-slug/space-slug/page-slug" \
node test/smoke.mjs # account token: all tools
AGENTDOCS_TOKEN=<space-token> node test/smoke-space-token.mjs # space-token mode테스트베드 스페이스에 쓰기가 발생합니다(페이지 생성 및 삭제) — 임시 스페이스를 사용하세요.
보안
SECURITY.md를 참조하세요. 취약점은 contact@agentdocs.eu로 비공개로 신고하세요.
라이선스
MIT
Available Tools
19 toolsadd_commentAdd commentAInspect
Post a comment on a page. Set parent_comment_id to reply within an existing thread. The returned 'mentions' array echoes @name tokens parsed from the body — it is informational only; posting a comment does NOT currently notify the mentioned user.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page UUID or "workspaceSlug/spaceSlug/pageSlug" path | |
| content | Yes | Comment body (Markdown) | |
| parent_comment_id | No | UUID of the comment being replied to, to thread under it (omit for a top-level comment) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses an important behavioral nuance: the mentions array is informational only and does not notify users. This adds value beyond the annotations (readOnlyHint=false), which already indicate a write operation. It does not mention auth or rate limits, but the mention side effect is a valuable transparency addition.
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 deliver the core purpose and a behavioral caveat without filler. The key action and threading instruction are front-loaded, and the mention caveat 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?
The description covers the main behavior, the threading variant, and the mention behavior, which is sufficient for a simple write tool with a well-annotated schema. It does not explicitly state the full return value (e.g., comment ID), but the mention array is addressed and the output schema is absent, so the description carries an acceptable level of completeness.
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 input schema provides full descriptions for all three parameters (100% coverage), so the baseline is 3. The description adds little new parameter information—it reiterates the parent_comment_id purpose but does not elaborate on the 'page' format or 'content' semantics 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 action ('Post a comment on a page') and distinguishes from sibling comment tools by focusing on creation and reply threading. The parent_comment_id instruction clarifies the difference between top-level and threaded comments.
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 guidance on using parent_comment_id to reply within a thread, which is the key usage distinction. It does not explicitly name alternatives (e.g., update_comment, delete_comment), but the creation context is evident from the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
append_to_pageAppend to pageAInspect
Append Markdown to the end of an existing page (read-modify-write; creates a new version). Ideal for logs, reports, and running notes.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page UUID or "workspaceSlug/spaceSlug/pageSlug" path | |
| content | Yes | Markdown to append | |
| separator | No | Separator inserted before the appended text (default: blank line "\n\n") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the underlying 'read-modify-write' mechanism and that it 'creates a new version', which is not covered by the annotations (which only indicate non-read-only, non-idempotent, non-destructive). This adds valuable context about side effects and versioning, going beyond the structured metadata.
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, front-loaded with the action, and contains zero filler. It efficiently conveys what, how, and typical use cases in minimal 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 simple append tool with annotations and full schema coverage, the description adequately covers purpose, behavior, and use cases. It does not mention edge cases (e.g., missing page) or return values, but given the availability of annotations and the simplicity of the operation, it is reasonably complete. A 5 would require explicit handling of failure scenarios or output details.
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 three parameters. The description adds no additional meaning beyond what is in the schema: 'page' and 'content' are self-explanatory, and 'separator' is described in the schema. The description's mention of 'Markdown' aligns with the content parameter but does not extend it.
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 ('Append') and resource ('existing page'), clearly distinguishing it from create_page and update_page. It also specifies the input format ('Markdown') and the position ('end'), leaving no ambiguity about the tool's function.
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 clear use cases ('Ideal for logs, reports, and running notes') and implies when to choose this over update_page by emphasizing append semantics. However, it does not explicitly name alternatives or state when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_create_pagesBulk create pagesAInspect
Create up to 500 pages in one atomic call (all succeed or all fail) with an explicitly specified structure (titles, slugs, parent_page_id). To import a folder of Markdown files and derive the hierarchy from file paths, use import_markdown instead. With a space-scoped token, omit "space" to use the token's space.
| Name | Required | Description | Default |
|---|---|---|---|
| pages | Yes | Pages to create | |
| space | No | Space UUID or "workspaceSlug/spaceSlug" path. Optional for space-scoped tokens. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all false and provide no behavioral detail. The description adds crucial behavior: atomicity (all succeed or all fail), the 500-page limit, explicit structure requirement, and token-scoped space behavior. This goes well beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: capability, alternative tool, and space token guidance. No fluff 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 bulk creation tool with nested objects and no output schema, the description covers the key aspects: limit, atomicity, structure, alternative workflow, and token auth behavior. This is sufficient for an agent to correctly 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 coverage is 100%, so baseline is 3. The description adds meaning beyond the schema by clarifying the structure ('titles, slugs, parent_page_id') and the space token behavior ('With a space-scoped token, omit space'). That extra context justifies a 4.
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 opens with 'Create up to 500 pages in one atomic call' – a specific verb, resource, and capability. It also distinguishes itself from import_markdown, so it's clear what this tool does vs siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool vs alternative: 'To import a folder of Markdown files and derive the hierarchy from file paths, use import_markdown instead.' Also provides context about space-scoped tokens and omitting 'space'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_pageCreate pageAInspect
Create a Markdown page in a space. The slug is derived from the title unless given. With a space-scoped token, omit "space" to use the token's space.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Explicit URL slug (auto-generated and deduped when omitted) | |
| space | No | Space UUID or "workspaceSlug/spaceSlug" path. Optional for space-scoped tokens. | |
| title | Yes | Page title | |
| content | Yes | Markdown content | |
| parent_page_id | No | Parent page UUID, to nest this page under another |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral context beyond the annotations: slug is derived from title unless provided, and space-scoped tokens can omit the space parameter. This helps the agent understand default behavior and token-based scoping, though it does not discuss edge cases like duplicate slugs or permission errors.
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 long, front-loaded with the main action, and contains no redundant filler. Every clause adds useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward create operation with no output schema, the description plus schema covers the required params, slug behavior, and token-specific space handling. It could have mentioned what happens on success (e.g., returns page ID), but the current level is adequate given the tool's simplicity.
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%, but the tool description adds meaningful semantic detail beyond the schema: it clarifies how slug is generated from title, and when to omit 'space' based on token scope. This goes beyond the bare schema property 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 clearly states the tool's function: creating a Markdown page in a space. The verb 'create' and resource 'page' are specific, and it naturally stands apart from sibling tools like update_page, delete_page, or bulk_create_pages.
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 concrete guidance on the optional 'space' parameter for space-scoped tokens, which is a useful conditional use case. It does not explicitly mention alternatives or exclusions, but the guidance is clear enough for an agent to choose this tool over update or append tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_commentDelete commentADestructiveInspect
Permanently delete a comment. Only the comment's author (or an admin) may delete it. There is no undo via the API.
| Name | Required | Description | Default |
|---|---|---|---|
| comment | Yes | Comment UUID (from get_page include_comments or list_comments) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set destructiveHint=true and readOnlyHint=false, but the description goes further by adding 'Permanently delete' to emphasize irreversibility, 'Only the comment's author (or an admin) may delete it' to cover authorization, and 'There is no undo via the API' to highlight a non-obvious consequence. This provides substantial behavioral context beyond the structured fields.
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 three concise sentences, each earning its place: the core action, the permission constraint, and the irreversibility warning. It is front-loaded with 'Permanently delete a comment' and contains 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 simple one-parameter delete operation with no output schema and full parameter documentation, the description is complete. It covers what the tool does, who may use it, and a critical side effect (no undo). There are no missing pieces that would prevent an agent from selecting or invoking 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?
The input schema covers the only parameter, 'comment', with a clear description: 'Comment UUID (from get_page include_comments or list_comments).' Since schema coverage is 100%, the description need not add parameter details, and it does not—it only references 'a comment' in passing. Baseline 3 applies because the schema does the heavy lifting and the description adds no meaningful parameter semantics 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: 'Permanently delete a comment.' The verb 'delete' and resource 'comment' are specific, and the emphasis on permanence distinguishes it from any plausible update or list operation. It is unambiguous and distinct from sibling tools like update_comment or add_comment.
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 for when to use this tool: it is for permanently deleting a comment, with the caveat that only the author or an admin may do so. This effectively tells the agent who can use it and implies that unauthorized users should not attempt it. It does not explicitly exclude alternatives, but the sibling tools are clearly different operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_pageDelete pageADestructiveInspect
Permanently delete a page. WARNING: deletion cascades to all child pages. There is no undo via the API.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page UUID or "workspaceSlug/spaceSlug/pageSlug" path |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations. While annotations already indicate destructive intent (destructiveHint=true), the description adds critical behavioral details: the cascade to all child pages and the irreversibility ('There is no undo via the API'). This provides essential risk context for an agent.
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 concise sentences that front-load the primary action ('Permanently delete a page') and include a critical warning. Every sentence provides necessary information, and there is no wasted 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?
For a simple delete tool with one parameter and no output schema, the description is nearly complete. It covers the key caveats (cascade and irreversibility) but omits any mention of what the API returns on success or permission requirements. This minor gap is acceptable given the simplicity of the operation.
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 input schema already covers 100% of the parameter documentation, including the description for 'page' as a UUID or path. The tool description itself does not add additional meaning about the parameter, so the high schema coverage gives a baseline of 3.
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's purpose: 'Permanently delete a page.' It uses a specific verb and resource, and it distinguishes this from sibling tools like update_page or create_page. The warning about cascading deletion further clarifies the scope of the operation.
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 saying what it does ('Permanently delete a page'), but it does not explicitly state when to use it versus alternatives or when not to use it. There are no exclusions or alternative tool references, making the guidance minimal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pageGet pageARead-onlyInspect
Read a page including its full Markdown content and current version number. The page carries comment_count / unresolved_comment_count / last_comment_at — if comment_count > 0 there is a discussion; set include_comments to read it. include_children returns the page's child pages (titles + slugs, no content) — useful for 'folder' pages whose own content is empty but which organise sub-pages. include_images returns any images embedded in the page as viewable image blocks, so you can actually SEE a screenshot the page references instead of only its URL.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page UUID or "workspaceSlug/spaceSlug/pageSlug" path | |
| include_images | No | When true, also return images embedded in the page as image blocks you can view (max 5). Off by default — images are large, so ordinary reads stay cheap. | |
| include_children | No | When true, also return the page's immediate child pages (id, title, slug — no content). | |
| include_comments | No | When true, also return the page's comments (threaded) alongside the page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set readOnlyHint=true, and the description adds valuable behavioral detail: the page carries comment metrics, images are returned as viewable blocks (with a tradeoff of being large and costly), and children are returned without content. This goes beyond the safety signal and explains what the response will look like.
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 front-loaded with the main purpose, then efficiently explains each flag in relation to concrete scenarios. Every sentence provides operational value; there is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with no output schema, it covers the core return values (Markdown, version, comment counts), explains the optional includes, and warns about size implications. Nothing essential is missing for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description enhances each optional flag with use-case context (e.g., 'folder' pages for include_children, 'SEE a screenshot' for include_images), elevating it above the schema alone without duplicating the page parameter's 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?
The description opens with 'Read a page including its full Markdown content and current version number,' which states a specific verb and resource. This clearly distinguishes it from siblings like list_pages (which lists metadata) and search_docs (which searches).
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 offers clear contextual guidance: include_comments when comment_count > 0, include_children for folder pages, include_images for visual content. It does not explicitly name alternative tools or exclusion conditions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_markdownImport a markdown folderAIdempotentInspect
Import a folder of Markdown files and let the folder structure become the page hierarchy. Each file is { path, content } where path is a relative file path like "guides/setup.md". Folders become parent pages; an index.md or README.md inside a folder supplies that folder page's content; titles come from the first # H1, falling back to the file name. Ideal for an Obsidian vault, a Notion markdown export, or a repo's docs/ folder. Up to 500 files per call. IDEMPOTENT: pages are matched by source path, so re-running an import — or chunking a large vault across several calls — reuses existing pages instead of creating duplicates (response reports created/reused/updated counts). By default existing pages keep their content; set overwrite_existing to re-sync content from the files. Use parent_page to nest the whole import under an existing page. Use bulk_create_pages instead when you want to specify the page tree explicitly. With a space-scoped token, omit "space" to use the token's space.
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | The markdown files to import | |
| space | No | Space UUID or "workspaceSlug/spaceSlug" path. Optional for space-scoped tokens. | |
| parent_page | No | Optional existing page to nest the import under (UUID or "workspaceSlug/spaceSlug/pageSlug" path). Defaults to the space root. | |
| overwrite_existing | No | When true, re-importing updates the content of pages that already exist (re-sync). Default false: existing pages are left untouched. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description richly elaborates on idempotency beyond the idempotentHint annotation: pages matched by source path, created/reused/updated counts in response, default keep-content behavior, overwrite_existing re-sync, and fallback title rules (first # H1, then file name). No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: core purpose first, then format details, idempotency, alternative tool, and token nuance. It is longer than average but every sentence adds necessary information for a complex import tool with 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?
Despite having no output schema, the description discloses response counts (created/reused/updated) and covers all key behaviors: file matching, hierarchy construction, title fallback, overwrite policy, parent nesting, and token scope. It is fully complete for the tool's complexity.
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%, but the description adds substantial meaning: the {path, content} object format, path as relative file path, folder-to-hierarchy behavior, special index.md/README.md role, parent_page nesting, overwrite_existing semantics, and space omission for scoped tokens. This goes far beyond the schema's field comments.
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 ('Import') and resource ('a folder of Markdown files') plus the core mechanism ('folder structure becomes the page hierarchy'). It clearly distinguishes from sibling tools, especially by contrasting with bulk_create_pages later in the description.
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 provides explicit when-to-use scenarios (Obsidian vault, Notion export, docs/ folder), explicitly names an alternative ('Use bulk_create_pages instead when you want to specify the page tree explicitly'), and explains re-running/chunking semantics for large imports.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_commentsList commentsARead-onlyInspect
List the threaded comments on a page, returning each comment's id, content, author and parent. Use this to find a comment's id before update_comment / delete_comment. (get_page with include_comments returns the same thread alongside the page content.)
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page UUID or "workspaceSlug/spaceSlug/pageSlug" path |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already present, the description adds value by disclosing that comments are threaded and listing exact returned fields (id, content, author, parent). It does not mention pagination or sorting, but for a simple read-only list this is sufficient.
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 first sentence stating action and outputs, the second giving the primary use case, and a parenthetical noting the alternative. Every sentence is purposeful with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 1-parameter, read-only list tool with no output schema, the description provides enough context: return fields, threading, and how it fits with update/delete operations. It is complete for efficient selection and 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?
The input schema already fully describes the 'page' parameter, including two acceptable formats (UUID or path). The description does not add meaning beyond restating that comments are on a page, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists threaded comments on a page and specifies the return fields (id, content, author, parent). It distinguishes this tool from get_page with include_comments, which returns the same thread alongside page content.
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 says to use this tool to find a comment's id before update_comment or delete_comment, and it notes the get_page alternative. This gives clear when-to-use guidance and differentiates from sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pagesList pagesARead-onlyInspect
List the pages in a space as a tree (content omitted — use get_page to read a page). Pages with a discussion carry comment_count / unresolved_comment_count / last_comment_at — comments do NOT bump a page's updated_at, so check last_comment_at to spot new replies. With a space-scoped token, omit "space" to use the token's space.
| Name | Required | Description | Default |
|---|---|---|---|
| space | No | Space UUID or "workspaceSlug/spaceSlug" path. Optional for space-scoped tokens. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While the readOnlyHint annotation covers safety, the description adds valuable behavioral details: content is omitted in the tree, comment counts are included for pages with discussions, and comments do not affect updated_at, requiring last_comment_at for spotting new replies. It also discloses token-scoping behavior. These go beyond the annotation's basic read-only declaration.
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 three concise sentences, front-loading the main purpose, and every sentence adds meaningful information (purpose, content omission, comment metadata behavior, token guidance). No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter, good annotations, and no output schema, the description covers the essential aspects: what it returns (tree), what is excluded (content), relevant metadata (comment counts), and token-specific usage. It is complete and self-sufficient for an agent to use 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?
The schema already documents the optional 'space' parameter with 100% coverage, so the baseline is 3. The description adds extra semantic value by clarifying that omitting 'space' with a space-scoped token uses the token's space, which is not fully explicit in the schema 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 states a specific action: 'List the pages in a space as a tree' with a clear resource and output format. It also distinguishes itself from get_page ('use get_page to read a page'), making its purpose unambiguous among sibling 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 explains when to use this tool (to list pages in a space) and explicitly points to an alternative (get_page for reading page content). It also gives context-specific guidance on omitting the 'space' parameter when using a space-scoped token. However, it does not mention exclusions or other alternatives like search_docs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_spacesList spacesARead-onlyInspect
List the spaces in a workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | Yes | Workspace UUID or workspace slug (e.g. "my-team-docs") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, indicating a safe read operation. The description adds the workspace scoping but does not disclose additional behavioral traits like pagination, filtering, or access limitations. It 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 a single concise sentence that gets straight to the point with no filler. It is front-loaded with the verb and resource.
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 read-only tool with one well-documented parameter and no output schema, the description is nearly sufficient. It states exactly what the tool returns, though it could optionally mention whether all spaces are listed or only those accessible to the user.
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% for the single workspace parameter, so the description does not need to compensate. The description's phrase 'in a workspace' aligns with the schema but adds no extra meaning beyond what the parameter description 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 clearly states the action ('List') and the resource ('spaces') within a specific scope ('in a workspace'). This distinguishes it from sibling tools like list_workspaces and list_pages, which target different resources.
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: to list spaces, you need a workspace. However, it does not explicitly mention when to use this tool over alternatives or any exclusions. The context is minimal but sufficient for a straightforward listing tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workspacesList workspacesARead-onlyInspect
List all AgentDocs workspaces the user can access. Workspaces contain spaces; spaces contain pages.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and openWorldHint=false, so the safe read nature is known. The description adds the permission scoping ('the user can access') and the hierarchy context, which is useful but not extensive. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loaded with the primary purpose, and the second sentence provides valuable hierarchical context without any 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 simple read-only list tool with no parameters and no output schema, the description sufficiently explains what it does and the context of the returned items. The annotations cover the safety profile, and the hierarchy explanation completes the picture.
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 the schema coverage is trivially 100%. The description doesn't need to add parameter details. Baseline for 0 params is 4, and no further info is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'AgentDocs workspaces', and further specifies the scope as those the user can access. This distinguishes it from sibling tools like list_spaces and list_pages, which operate on lower-level resources.
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 clear context by explaining the workspace-spaces-pages hierarchy, implying this tool is for top-level navigation. It does not explicitly state when not to use it or name alternatives, but the hierarchical context effectively guides the agent toward the correct usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_docsSearch docsARead-onlyInspect
Full-text (keyword) search across all pages in a workspace. Matches in the returned content_preview are delimited with << >> markers. For natural-language questions, prefer semantic_search.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search terms | |
| workspace | Yes | Workspace UUID or workspace slug |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint=true annotation, the description adds a useful behavioral detail: 'Matches in the returned content_preview are delimited with << >> markers.' This informs the agent about output formatting, which is not present in annotations or schema. It does not mention potential rate limits or error cases, but the added marker convention provides meaningful transparency for a read-only search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences. The first sentence front-loads the core purpose with action and scope; the second adds a concrete output detail and an explicit alternative. Every word earns its place with no redundancy or fluff.
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 simplicity (2 required parameters, no output schema), the description covers everything essential: the search scope (all pages in a workspace), the result marker convention, and the guidance to use semantic_search for natural-language questions. This is sufficient for an agent to 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?
The input schema already documents both parameters with descriptions: 'Search terms' for query and 'Workspace UUID or workspace slug' for workspace. The tool description does not add any additional parameter semantics beyond what the schema provides. With 100% schema coverage, a 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 states exactly what the tool does: 'Full-text (keyword) search across all pages in a workspace.' It uses a specific verb ('search') and resource ('all pages in a workspace'), and explicitly distinguishes itself from the sibling semantic_search by noting when to prefer that alternative. This makes the purpose unmistakable.
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 explicit usage guidance: it identifies the tool as a keyword/full-text search and directly states 'For natural-language questions, prefer semantic_search,' naming the alternative and the condition for its use. This clearly tells the agent when to choose this tool versus a sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_searchSemantic searchARead-onlyInspect
Search a workspace by meaning, not keywords — ask a natural-language question (e.g. "how do we handle billing retries?") and get the most relevant pages ranked by similarity. Pages are embedded automatically after each save. Requires a Pro workspace; the response 'mode' is "semantic" when active, or "fulltext_fallback" if semantic search is not configured on the instance (results are still returned).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | A natural-language question or description (max 1000 chars) | |
| workspace | Yes | Workspace UUID or workspace slug |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true and openWorldHint=false. The description adds important behavioral traits: pages are embedded automatically after each save, a Pro workspace is required, and the response mode can be 'semantic' or 'fulltext_fallback' depending on configuration. These go well beyond the structured annotations and help the agent anticipate variable responses.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each carrying distinct information: core purpose, embedding behavior, and configuration-dependent response. No redundancy, no filler; the description is front-loaded with the primary use case.
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?
Since there is no output schema, the description reasonably summarizes what is returned ('most relevant pages ranked by similarity') and explains the response mode. It omits details like result count or pagination, but for a two-parameter, read-only search tool this is sufficient. It also covers the Pro requirement and fallback, making the tool's behavior fairly predictable.
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 input schema already covers both parameters at 100%, so the description's job is to add nuance. It provides an example query and emphasizes 'by meaning' to clarify the query intent, which is a meaningful addition to the schema's terse 'natural-language question' description. The workspace parameter isn't elaborated further, but the schema already handles it.
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 'Search a workspace by meaning, not keywords', which is a specific verb+resource+method that clearly distinguishes it from keyword-based siblings like search_docs. The example query and 'ranked by similarity' further pin down the semantic nature.
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 contrasts with keyword search ('not keywords') to signal when semantic search is appropriate, and states a prerequisite ('Requires a Pro workspace'). The fallback explanation ('fulltext_fallback') also gives context for when results may be returned even without semantic configuration. However, it never explicitly names an alternative tool, so it doesn't fully reach a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_commentUpdate commentADestructiveInspect
Edit a comment's body and/or mark its thread resolved. Only the comment's author (or an admin) may update it. Provide at least one of content / resolved.
| Name | Required | Description | Default |
|---|---|---|---|
| comment | Yes | Comment UUID (from get_page include_comments or list_comments) | |
| content | No | New comment body (replaces the existing text) | |
| resolved | No | Mark the comment thread resolved (true) or reopen it (false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true, so the write nature is known. The description adds valuable context about authorization (author/admin only) and the 'at least one of' rule, which are not inferable from annotations alone. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the core purpose, followed by the key constraint. Every word contributes value with 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 tool has no output schema, but the description covers its purpose, permissions, and parameter requirements. It omits return value details, but for a simple update operation this is not a significant gap. Annotations and schema fill the remaining context.
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 parameters are already well-documented. The description adds the important constraint that content and resolved are optional individually but at least one must be provided—this is not enforced by the JSON schema and is essential for correct invocation.
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 ('Edit') and resource ('a comment') and clearly defines the two actions: updating the body and/or marking the thread resolved. This clearly distinguishes it from sibling tools like add_comment and delete_comment.
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 provides a clear usage constraint with the author/admin restriction and states the requirement to provide at least one of content/resolved. While it doesn't explicitly discuss alternatives, the sibling tools make the update role obvious, and the permission note gives practical usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_pageUpdate pageADestructiveInspect
Update a page's title and/or content. Every update creates a new version (old versions stay restorable). Pass expected_version to fail instead of overwriting concurrent edits.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page UUID or "workspaceSlug/spaceSlug/pageSlug" path | |
| title | No | New title | |
| content | No | New full Markdown content (replaces existing content) | |
| expected_version | No | If set and the page has moved past this version, the update is rejected |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint and readOnlyHint, but the description adds valuable context: every update creates a restorable version, and expected_version can reject stale updates. This goes beyond what annotations alone convey.
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 concise sentences. The first front-loads the core purpose; the second adds key behavioral details. 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 moderately complex update tool with 4 parameters and no output schema, the description covers purpose, versioning behavior, and concurrency. It omits prerequisites like the page existing, but that is implied and covered by the 'page' parameter 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 schema has 100% parameter coverage, so the baseline is 3. The description enhances this by explaining expected_version's role in preventing concurrent overwrites, adding meaning beyond the schema's field-level 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 clearly states 'Update a page's title and/or content' with a specific verb and resource, distinguishing it from sibling tools like create_page, append_to_page, and delete_page.
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 for editing existing pages but does not explicitly mention when to use this tool versus alternatives like create_page or append_to_page. It does provide contextual detail about versioning and concurrency control, which informs usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_imageUpload imageAInspect
Attach an image to a space and get back the Markdown to embed it in a page. Use this to put screenshots and diagrams into the pages you write, so whoever reads the page later — human or agent — can see what you saw. ACCEPTS: PNG, JPEG, GIF, WebP. Max 5 MB. SVG is rejected (script-injection vector). The format is detected from the file's own bytes, not its name. HOW TO SUPPLY THE IMAGE — give exactly one of: • path — absolute path to an image file on this machine. Prefer this: the bytes never pass through the conversation. • data — base64 of the file's bytes (a "data:image/png;base64,..." URI is also accepted). • source_url — a public http(s) URL; the server fetches it. If you can only SEE an image (e.g. a screenshot another tool returned), you cannot re-encode it from what you see — you need the file. Save it to disk, then pass its "path". Counts against the workspace's image storage quota (Free 50 MB, Pro 5 GB).
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | Base64 of the image FILE'S BYTES (a "data:image/png;base64,..." URI is accepted too). Not a description of the image, and not something you can produce from an image you only viewed. | |
| path | No | Absolute path to an image file on this machine. Best option — the bytes never enter the conversation. | |
| space | No | Space UUID or "workspaceSlug/spaceSlug" path. Optional for space-scoped tokens. | |
| alt_text | No | Alt text for the returned Markdown snippet. | |
| filename | No | Original filename to record (cosmetic; defaults to image.<ext>). | |
| source_url | No | Public http(s) URL the server fetches the image from. Must be publicly reachable — private/loopback addresses are refused. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, etc.), the description reveals key behaviors: format detection from bytes, SVG rejection due to script-injection risk, quota impact, and the limitation that a viewed image cannot be re-encoded. These are not evident from annotations and enrich the agent's understanding.
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 excessively verbose, repeating parameter details already present in the schema and embedding extensive explanatory text. It could be condensed to the essential purpose and critical usage notes without losing clarity. The structure is also messy, mixing acceptance criteria and guidance in a single long paragraph.
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 all necessary aspects: purpose, usage context, parameter semantics, behavioral side effects, and limitations. It even hints at the return format ('get back the Markdown'). Given the lack of output schema, it provides sufficient context for an agent to 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?
Although the schema already describes each parameter (100% coverage), the description adds semantic nuance: it explains why 'path' is preferred ('the bytes never enter the conversation'), that 'data' cannot be derived from a viewed image, and that 'source_url' must be publicly reachable. This goes beyond the schema's literal description and helps correct usage.
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 ('Attach') and resource ('an image to a space'), and clarifies the output ('get back the Markdown'). It clearly distinguishes the tool's purpose from siblings, as no other sibling handles image upload.
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 explicit guidance on when to use it ('Use this to put screenshots and diagrams') and how to supply the image, including preferred methods (path over data) and constraints (e.g., 'If you can only SEE an image... you cannot re-encode it'). It implicitly explains when not to use (e.g., when you only have a view, not a file).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoamiWho am IARead-onlyInspect
Identify the authenticated AgentDocs user and credential scope. Call this first: a space-scoped credential is locked to a single space, which becomes the default for page tools.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds meaningful context about credential scope and how it affects page tools. This goes beyond the simple read-only flag, but it doesn't disclose potential edge cases or response details; still, for a simple whoami operation this is sufficient.
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 long, with the core purpose front-loaded and no wasted words. Every sentence earns its place, and the structure is logical: first states what it does, then gives actionable usage advice.
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 no parameters and a read-only annotation, the description covers the essential context: what it identifies and how it relates to credential scope. It does not describe the return format, but given the low complexity and clear purpose, the description is nearly complete. A slight gap is the lack of explicit mention of response fields.
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 the schema requires no explanation. The description correctly focuses on the tool's behavior rather than parameters. The baseline for 0 params is 4, and no additional parameter semantics are needed.
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's purpose with a specific verb and resource: 'Identify the authenticated AgentDocs user and credential scope.' It also distinguishes itself from sibling tools by positioning it as a preflight step ('Call this first'), which is unique among the listed page 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 explicitly provides usage timing ('Call this first') and explains why it matters relative to space-scoped credentials. However, it does not explicitly mention when not to use it or name alternatives, though the context makes those clear. This is strong guidance but not a full 5.
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.
2 tool updates
- Changed
get_page1 field changed- added
Input schema / properties / include_imagesAdded value: +{ + "description": "When true, also return images embedded in the page as image blocks you can view (max 5). Off by default — images are large, so ordinary reads stay cheap.", + "type": "boolean" +}
- Added
upload_image
18 tool updates
v0.9.2- First observed
add_comment - First observed
append_to_page - First observed
bulk_create_pages - First observed
create_page - First observed
delete_comment - First observed
delete_page - First observed
get_page - First observed
import_markdown - First observed
list_comments - First observed
list_pages - First observed
list_spaces - First observed
list_workspaces - First observed
search_docs - First observed
semantic_search - First observed
share_page - First observed
update_comment - First observed
update_page - First observed
whoami
TDQS
Scored across 19 tools
Most tools target a distinct resource and action, and page CRUD versus comment CRUD versus search are clearly separated. Some ambiguity exists between create_page, bulk_create_pages, and import_markdown, and between search_docs and semantic_search, but the descriptions are detailed enough to guide correct selection.
The dominant pattern is verb_noun (create_page, list_pages, delete_comment, upload_image), which is consistent and predictable. Minor deviations like whoami, semantic_search, and append_to_page break the pattern slightly but do not cause real confusion.
At 19 tools, the server is in the heavy 16-25 band and feels more sprawling than a focused docs API needs to be. The count is defensible given the wide feature set, but page creation is split across three tools and search across two, making the surface feel larger than necessary.
The server covers the core documentation lifecycle well: page CRUD plus append, bulk creation and import, comment threads, search, sharing, and image upload. Minor gaps exist—notably no version restore tool despite versioning being mentioned, and no workspace/space management beyond listing—but these are workaroundable gaps rather than blocking dead ends.
Maintenance
Related MCP Connectors
Team docs served to AI agents over MCP - search, Markdown reads, version pinning, read audit.
Host an agent's pages at clean, permanent URLs. Publish, organize, edit, search and re-find docs.
- hiveWikiOAuthai.hivewiki
Shared project wiki for AI agents: read and write pages, next actions, and activity logs over MCP.
Read, edit and improve shared documents and knowledge with people and agents.
1
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables MCP clients to search, browse, read, and manage IMA knowledge base content, including notes, web imports, and file uploads, using the official IMA OpenAPI.9MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to query and manage a document knowledge base via MCP, with RAG-powered search and grounded answers with citations.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to read, search, and write to a public wiki knowledge base via MCP.MIT
- AlicenseNot gradedqualityBmaintenanceEnables MCP clients to maintain a persistent Markdown knowledge base by ingesting sources, searching and reading notes, and creating or updating wiki pages with optimistic locking.11AGPL 3.0