MCP server exposing document management tools to AI agents via stdio JSON-RPC, authenticating to the md-manager HTTP API
27 tools with consistent verb-noun naming (list_, create_, get_, update_, delete_, search_, add_). All tools have descriptions (avg ~80 chars, within baseline 34-392). Input schemas present for all tools with typed parameters and descriptions. However, output schemas are entirely undocumented, LLMs cannot predict response structure for chaining. Error handling is absent: no recovery guidance, no categorization of retryable vs fatal errors, no actionable error messages. Security concerns: no evidence of permission gates on destructive tools (delete_doc, revoke_share). Composition is strong, tools are single-responsibility and chainable (e.g., create_doc returns document_id usable by update_doc). Parameter naming is consistent (project_id, document_id, user_id). Missing: enum constraints on 'role' and 'mode' parameters; no pagination guidance for list_* tools; no dry-run/confirmation for irreversible operations.
File a document under a category
Add a tag to a document
Add an organization member to a team
Append content to an existing document
Create a new category with optional parent category
Create a new document in a project with path, title, and optional content
Create a new project with a slug and name
Create a public read-only share link for a document with optional expiration
Output schemas completely undocumented. LLMs cannot predict response structure, field names, or types for any tool. This breaks tool chaining and forces agents to guess at downstream parameter mappings.
No error handling or recovery guidance. Tools lack actionable error messages, error categorization (retryable vs fatal), or suggestions for recovery. E.g., delete_doc provides no confirmation or dry-run option despite being destructive.
Enum constraints missing for 'role' parameter (grant_project_access, grant_document_access). Description states 'viewer|commenter|editor|admin' but no formal enum schema. LLMs may hallucinate invalid role values.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | <=2025-11-25 | v2 |
Create a new team with slug and name
Soft-delete a document
Get a document by ID and return its raw markdown content
Get a document by project ID and path, returning raw markdown content
Get version history for a document
Grant or deny a user or team access to a document (role: viewer|commenter|editor|admin|none)
Grant a user or team a role on a project (role: viewer|commenter|editor|admin)
List all categories in the organization
List documents in a category
List documents in a project with optional limit
List all projects in the authenticated organization
List public share links for a document
List all tags in the organization
List all teams in the organization
Move (rename) a document to a new path
Restore a document to a prior version
Revoke a public share link
Full-text search documents with optional project filter and search mode (keyword/semantic/hybrid)
Update a document's content with optimistic concurrency control using expected_version
search_docs 'mode' parameter lacks enum constraint. Description mentions 'keyword|semantic|hybrid' but no formal schema enforcement. LLMs may pass invalid modes.
No pagination guidance for list_* tools. list_documents accepts optional 'limit' but no offset/cursor, total_count, or has_more field documented. Large result sets risk context window exhaustion.