Local Markdown document search MCP server for enterprise documentation (WeChat Work and Feishu platforms)
Single tool 'doc-hub' with partial implementation. Tool has an action verb naming ('doc-hub' is somewhat generic but contextually clear), detailed parameter schema with enums and constraints, and explicit input/output schemas with Zod validation. However, description is lengthy (232 chars) and embeds dynamic content that will become stale. Parameter descriptions are adequate but could be more concise. Output schema is well-structured with typed fields. Error handling returns structured responses but lacks actionable recovery guidance. No tool annotations (readOnlyHint, idempotentHint) despite being a read-only search tool. Schema is fully visible and properly defined, which is a strength.
根据关键词检索企业微信与飞书开放平台的本地 Markdown 文档(更新至 2025-10-12,源目录:${sourceDescription})。支持通过 source 参数指定文档来源(wecom/feishu),提高检索精确性。
Tool name 'doc-hub' lacks action verb. Search/document retrieval tools should start with 'search_', 'query_', or 'retrieve_' to signal intent clearly to LLMs. Current name is noun-like and does not convey the action.
Description embeds dynamic content ('${sourceDescription}', '2025-10-12') that will become stale and requires runtime substitution in the tool registration. This violates static tool definition principles and creates maintenance risk.
Missing tool annotations. Tool is read-only and idempotent but provides no readOnlyHint or idempotentHint. LLMs benefit from explicit annotations to understand side-effect profile.
Error handling does not provide actionable recovery guidance per pattern:recovery-guide. When documents are not found, response is 'No documents found' without suggesting next steps (e.g., 'Try a broader query', 'Check available sources with list_doc_sources').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | D | 55 | 2025-06-18+ | v2 |
| 2026-03-09 | D | 51 | - | v1 |
Resource template uses path traversal variable '{+path}' without explicit validation of resourcePath in the handler. Input validation checks for existence but does not sanitize against path traversal attacks (e.g., '../../../etc/passwd').
No pagination support in output. Baseline pattern:paginated-result expects limit/offset and total count. Current tool accepts limit (1-20) but response does not indicate total matches available or whether results are complete.