基于MCP协议的英文单词学习和记忆辅助服务器,使用艾宾浩斯遗忘曲线实现词汇学习和复习计划管理
VocabCoach MCP server exhibits significant quality gaps across tool definitions. While all 7 tools are registered with descriptions, the descriptions are in Chinese and often generic. Parameter schemas are present for most tools but lack rigor, no enums for constrained inputs, no numeric bounds, and minimal constraint documentation. Output schemas are not documented anywhere in the code. Error handling is minimal (try/catch in one tool only), with no guidance for recovery or categorization. The server uses STDIO transport, which is a hard cap at 50 for protocol readiness. Tool naming is adequate (verb-first), but parameter naming inconsistencies (text_book vs textbook) and underdescribed relationships (e.g., text_book_subject's dependency on text_book) weaken discoverability. Security: no credentials visible in tool params, but no explicit audit logging or permission checks evident. Composition: tools are single-responsibility (good), but output structure is verbose (includes row_index, phonetic fields irrelevant to most query patterns) and not designed for downstream tool chaining.
获取指定课本的可用单元列表 返回指定课本中包含的所有单元名称。
获取可用的课本列表 返回系统支持的所有课本名称列表。
获取范围查询帮助信息 提供关于如何使用get_words_by_range工具的详细帮助信息,包括参数说明、使用示例和注意事项。
获取服务器信息 返回MCP服务器的基本信息,包括版本、状态、配置等。
获取指定范围的单词数量统计 返回指定课本或单元的详细单词统计信息,包括总数、唯一单词数等。
按课本范围获取英文单词 根据指定的课本和单元范围获取相应的英文单词,支持随机或顺序选择。
健康检查工具 检查MCP服务器和相关组件的健康状态,包括数据文件访问、内存使用等。
Descriptions are in Chinese and lack actionable guidance for LLM selection. Tools like 'get_range_query_help' (35 chars) and 'health_check' (description under 20 chars in English context) fall below the 10 - 1024 character baseline for clarity. No descriptions explain WHEN to call a tool instead of alternatives or what prerequisites exist.
No output schema documentation. The code constructs response objects (e.g., 'response = {success, message, total_count, returned_count, words: [...]}'), but these are never formally declared or annotated. LLMs cannot infer expected fields, forcing them to guess at downstream tool parameters or extract unstructured data.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 47 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 33 | - | v1 |
No enum constraints on text_book or text_book_subject parameters. The description lists valid values ('七上', '七下', etc.) as prose, not as a formal enum. LLMs will hallucinate invalid textbook names. A discovery tool get_available_textbooks exists but is not referenced in get_words_by_range's parameter description as a prerequisite.
Parameter relationships are undocumented. The text_book_subject parameter is optional only when text_book != '全部', but this constraint is buried in the description text and not formally stated. The code (not fully shown) likely enforces this; no validation error message is designed for LLM recovery.
Error handling is minimal. The get_words_by_range function wraps calls in a try block (visible in partial code), but no error categorization, recovery guidance, or actionable messages are visible. A call with an invalid textbook will likely return a generic error with no hint to call get_available_textbooks.
Output is over-verbose and not chaining-optimized. The get_words_by_range response includes row_index and phonetic fields for every word, which inflate token count. Downstream tools (if any) are not designed; no team_id, session_id, or context_id to facilitate multi-tool workflows.
Tool naming inconsistency: 'get_words_by_range' vs 'get_available_textbooks' vs 'get_available_subjects' uses mixed naming (verb_by_resource vs verb_resource). Parameter names also vary: 'text_book' vs 'textbook'. LLMs may conflate similar tools.
No pagination or result limits documented. The get_words_by_range accepts 'word_count' (default 1, range 1 - 10), but this is only documented in the parameter description. No mention of pagination for get_word_count_statistics, which might return large result sets.
Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are absent. All tools are read-only and idempotent, but this is not formally declared. An LLM cannot reason about safe retry semantics without explicit hints.