MCP server for AgentDocs (agentdocs.eu) — read, search, and write collaborative docs from any MCP client
agentdocs-mcp demonstrates solid definition quality with comprehensive tool coverage and generally clear, contextual descriptions. All 13 tools have non-empty descriptions (10-500+ chars, within the 10-1024 baseline). Input schemas are present and well-structured with proper types and descriptions for parameters. Tool naming follows verb_noun convention consistently (whoami, list_*, search_*, get_*, add_*, update_*, delete_*, upload_*, share_*). However, there are gaps: some parameters lack minLength/maxLength constraints; output schemas are not formally documented; and error handling could be more prescriptive. The tools are well-composed for a documentation platform (search + retrieval + commenting + sharing), though the add_comment / update_comment / delete_comment sequence could benefit from clearer error recovery guidance. Strong points: natural-language parameter hints (e.g. 'workspace UUID or workspace slug'), permission awareness (space-scoped vs account credentials), and thoughtful design (e.g. include_comments, include_children, include_images flags for flexible payloads). Baseline compliance: tool naming (100%), descriptions present (100%), parameter descriptions (95%), documented constraints (70%), output schema docs (0%).
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.
Permanently delete a comment. Only the comment's author (or an admin) may delete it. There is no undo via the API.
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.
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.)
Output schemas are not formally documented in the tool definitions. LLMs cannot plan downstream tool calls or extract the right data without knowing what fields to expect (e.g., what does list_workspaces return? Does it include workspace_id, name, slug, created_at?).
delete_comment lacks guidance on error recovery or permission failures. The description states 'Only the comment's author (or an admin) may delete it' but does not specify what error is returned if the agent lacks permission or what to do next. This violates the recovery-guide pattern.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 75 | 2026-07-28+ | v2 |
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.
List the spaces in a workspace.
List all AgentDocs workspaces the user can access. Workspaces contain spaces; spaces contain pages.
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.
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).
Create a public magic link for a page — anyone with the link can read it without logging in. Returns a web URL and a raw-Markdown URL (the raw one is ideal for other agents).
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.
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. Counts against the workspace's image storage quota (Free 50 MB, Pro 5 GB).
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.
update_comment description is vague: 'Provide at least one of content / resolved' is a constraint, but the description does not explain what happens if neither is provided or what the error response will be. This forces the LLM to guess at error handling.
search_docs and semantic_search lack explicit result limits or pagination parameters. If a workspace contains thousands of pages, the response could exhaust context. Descriptions should state 'Returns up to [N] results' and offer cursor/offset pagination.
upload_image parameter 'path' is marked optional but the description does not explain when to use 'path' vs 'source_url' vs 'data'. For LLMs, ambiguous mutual-exclusivity forces guessing. Clarify: 'Either path (preferred, avoids sending bytes) or source_url (must be public) or data (base64 bytes) is required.'
get_page optional parameters (include_comments, include_children, include_images) default to false but there is no guidance on what each returns. LLMs cannot decide when to set these flags without knowing the impact. Add: 'include_comments: returns up to [N] threaded comments; include_children: returns page tree; include_images: returns embedded image blocks.'
add_comment minLength of 1 and maxLength of 10,000 are constraints, but the description does not mention them or explain why they exist. LLMs often ignore constraints in parameter lists and rely on descriptions, state these explicitly.