agentdocs-mcp
This MCP server lets AI agents read, search, create, update, and share documentation on the AgentDocs platform, with support for comments, image uploads, and bulk imports.
Identity & discovery:
whoamito verify credentials and scope; list accessible workspaces, spaces, and page trees.Read & search: Fetch full Markdown pages (with optional comments, children, images), full-text keyword search, and natural-language semantic search (Pro workspaces).
Create & edit: Create nestable pages, update titles/content with optimistic version checks, append Markdown, and delete pages (cascading).
Bulk operations: Import folders of Markdown files into a page hierarchy (idempotent, up to 500 files), or atomically create up to 500 pages with explicit structure.
Sharing: Generate public magic links (web + raw Markdown) for pages.
Comments: List, add, update (including resolve threads), and delete threaded comments with optional @mentions.
Media: Upload images (PNG/JPEG/GIF/WebP) via local path, URL, or base64 data to embed in pages.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@agentdocs-mcpget the onboarding page from main space"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP server for AgentDocs — the collaborative documentation platform where AI agents are first-class citizens.
Gives MCP clients that run a local server (Claude Code, Claude Desktop, Cursor, Windsurf, Zed, …) native tools to read, search, create, update, and share AgentDocs pages.
Claude.ai (web), Claude Desktop and Claude mobile connect with no token at all: add
https://agentdocs.eu/mcpas a custom connector (Settings → Connectors → Add custom connector) and leave Advanced settings empty. AgentDocs implements OAuth 2.1 — Claude discovers the flow automatically, your browser opens an AgentDocs consent page, and you're connected after approving. The grant covers your documents only and is revocable any time at agentdocs.eu → Settings → Connected apps. The hosted Skill remains a connector-free fallback, and Claude Desktop can also run the local stdio config further down.
Listed on the official MCP registry as
io.github.hoornet/agentdocs-mcp.
Setup
MCP connector clients (Claude.ai / Desktop / mobile) need no token — see the OAuth note above. For the local stdio server and other clients, you need an AgentDocs API token:
Account token — agentdocs.eu → Profile → Regenerate API Token (full access to everything you own), or
Space token — Space settings → Tokens (editor access to exactly one space; the server auto-detects this and scopes itself to that space — the recommended way to sandbox an agent).
Remote (hosted) — nothing to install
Any client that speaks remote MCP can use the hosted endpoint directly; there's no package to install and nothing to keep updated. Same 19 tools as the stdio server.
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 (web) and Claude Desktop use the same flow as each other: Settings → Connectors
→ Add custom connector, with an Authorization request header.
That request-header field is an Anthropic beta, enabled per-account. If Advanced settings offers only OAuth Client ID and OAuth Client Secret, your account doesn't have it — and those OAuth fields won't work here, because AgentDocs doesn't implement OAuth yet (planned). The connector will simply report a connection failure.
In that case use the Skill (Skills → Upload Skill): no beta access needed, same REST API, and the reliable path on Claude.ai today.
Bearer <api_token> is accepted here as well as Token <api_token>, because several clients
only offer a "Bearer" field. Account tokens and space-scoped tokens both work — a space token
confines the session to its own space, exactly as it does over REST.
Claude Code (local 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-mcpor in ~/.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 / generic MCP config
In claude_desktop_config.json / .cursor/mcp.json /
~/.codeium/windsurf/mcp_config.json / ~/.gemini/settings.json respectively:
{
"mcpServers": {
"agentdocs": {
"command": "npx",
"args": ["-y", "agentdocs-mcp"],
"env": { "AGENTDOCS_TOKEN": "<your-token>" }
}
}
}VS Code (Copilot)
Same server block, but .vscode/mcp.json uses a top-level "servers" key:
{
"servers": {
"agentdocs": {
"command": "npx",
"args": ["-y", "agentdocs-mcp"],
"env": { "AGENTDOCS_TOKEN": "<your-token>" }
}
}
}Zed
In settings.json:
{
"context_servers": {
"agentdocs": {
"command": "npx",
"args": ["-y", "agentdocs-mcp"],
"env": { "AGENTDOCS_TOKEN": "<your-token>" }
}
}
}Opencode
In opencode.json (project root) or ~/.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
Base pi ships without MCP support — use the
Skill or the plain
REST API there. The
oh-my-pi (omp) fork does support MCP and
inherits servers from configs already on disk (.claude, .cursor, .codex,
.vscode, …) — add the standard mcpServers block above to one of those (e.g.
.cursor/mcp.json) and restart omp.
Windows
Many MCP clients can't spawn npx directly on Windows (spawn npx ENOENT).
Wrap the command in cmd /c:
"command": "cmd",
"args": ["/c", "npx", "-y", "agentdocs-mcp"]Catalog-based MCP gateways (e.g. the Docker MCP gateway) only run servers from their curated catalog and can't launch arbitrary npx servers — agentdocs-mcp isn't listed there yet. Use the hosted remote endpoint instead:
https://agentdocs.eu/mcp(Streamable HTTP, same 19 tools, nothing to install) — see Remote above. Failing that, the REST API has full parity.
Configuration
Env var | Default | Purpose |
| contents of | API token (account or space-scoped) |
|
| Override the API base URL. Advanced — only set this if you've been given a different endpoint |
Updating
The setup commands above are unpinned (npx -y agentdocs-mcp), so they always
resolve the latest published version. To pick up a new release, just restart
your MCP client — the client only re-launches the server process on restart.
The server prints its version on startup (stderr): agentdocs-mcp vX.Y.Z: connected ….
If npx serves a stale cached copy, force a refresh:
npx -y agentdocs-mcp@latest # or: npm cache clean --forceRelated MCP server: ima-mcp-server
Tools
Tool | Description |
| Identify the user and credential scope |
| List accessible workspaces ¹ |
| List spaces in a workspace ¹ |
| Page tree of a space (without content) |
| Full-text (keyword) search across a workspace ¹ |
| Natural-language search ranked by meaning — Pro workspaces ¹ |
| Read a page (full Markdown + version); optional |
| Create a Markdown page (nestable) |
| Update title/content, with optional optimistic version check |
| Append Markdown — ideal for logs and session reports |
| Import a folder of Markdown files; paths become the page hierarchy. Idempotent — re-import reuses by source path (no duplicates); |
| Delete a page (cascades to children) |
| Create up to 500 pages atomically with explicit structure |
| Create a public magic link (web + raw-Markdown URLs) |
| List a page's threaded comments (ids, authors, parents) |
| Post a comment / threaded reply (with |
| Edit a comment or mark its thread resolved (author/admin) |
| Delete a comment (author/admin) |
| Attach a PNG/JPEG/GIF/WebP to a space and get Markdown to embed it — from |
¹ Hidden when running with a space-scoped token.
² path reads a file from the machine this server runs on, so it works on the stdio
server only. The hosted agentdocs.eu/mcp endpoint refuses it — there, the "machine"
is AgentDocs' production server, and honouring a caller-supplied path would be
arbitrary file read. Use source_url or data there.
Pages, spaces, and workspaces are addressable by UUID or human-readable slug
path — get_page accepts "my-workspace/my-space/my-page", create_page accepts
"my-workspace/my-space", etc. (Slug paths require an account token.)
Notes
Every page update creates a version on the server; old versions stay restorable from the AgentDocs UI.
The hosted instance may take ~15 s to respond to the first request after being idle (database cold start) — the server absorbs this with a 35 s timeout and one retry.
Free-tier API limits surface as clear messages with an upgrade link.
Development
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 modeThe testbed space is written to (pages created and deleted) — use a scratch space.
Security
See SECURITY.md. Report vulnerabilities privately to contact@agentdocs.eu.
License
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. Dates show when Glama detected each change.
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
Each tool targets a distinct resource or action. The two search tools are clearly differentiated (keyword vs semantic), page creation tools are distinguished by single/bulk/import modes, and comment lifecycle is fully separated from page lifecycle. No two tools present meaningful overlap that would confuse an agent.
Nearly all tools follow a consistent verb_noun snake_case pattern (list_*, get_*, create_*, update_*, delete_*, add_*, share_*, import_*). The sole exception is 'whoami', which is a standard command name but deviates from the otherwise uniform convention.
18 tools sits in the borderline-high range (16-25) per the calibration criteria. Each tool has a clear purpose, making the set feel justified rather than bloated, but the count is still above the ideal well-scoped range.
The tool surface covers the full page lifecycle (CRUD plus append and bulk creation), comment CRUD, search in two modes, and sharing. Minor gaps exist: no workspace or space creation/deletion, and no explicit version history/restore tool, but these are likely outside the server's core scope.
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.
Knowledge base MCP for AI agents on iknow.dev. Search, read, and maintain via OAuth.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides AI agents with a persistent, searchable knowledge library via MCP tools, allowing them to create books, manage pages, perform semantic search, and retrieve usage guides.5MIT
- 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 gradedqualityCmaintenanceEnables agents to search, list, and read pages from a curated Markdown wiki via MCP, with live updates and tools for targeted section access.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/hoornet/agentdocs-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server