Chinese Lunar Calendar MCP Server - provides traditional Chinese calendar functions including BaZi calculation, lunar-solar conversion, almanac queries, and fortune analysis
The server defines 6 tools with basic descriptions and parameter schemas, but has significant quality gaps. All tools have descriptions and input schemas are visible (positive), but descriptions are often too brief (10-50 chars) or generic, parameter descriptions lack depth and constraints, and there is no documented output schema. Error handling is present but minimal, most errors are caught generically and return unstructured text rather than actionable recovery guidance. The tools are well-named with action verbs (bazi_calculate, calendar_convert, etc.), but parameter naming inconsistencies and lack of enum constraints reduce clarity. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) are present, and all tools return formatted markdown/text rather than structured JSON, limiting downstream tool composition.
Calculate BaZi (Eight Characters) for fortune telling / 计算生辰八字用于算命
Convert between solar and lunar calendar / 公历农历互转
Get daily fortune and recommendations / 获取每日运势和建议
Query Chinese almanac (Huangli) for a specific date / 查询指定日期的黄历信息
Query 24 solar terms (Jie Qi) for a year / 查询一年的二十四节气
Analyze Wu Xing (Five Elements) from birth info / 根据出生信息分析五行
No output schemas documented for any tool. All tools return unstructured markdown text instead of structured JSON/objects. This prevents LLMs from reliably extracting fields for downstream composition and forces manual parsing.
Parameter constraints are missing. 'convert_to' in calendar_convert accepts free-form strings ('lunar', 'solar') but should be declared as an enum. 'year' in jieqi_query has no min/max bounds. 'date' parameters lack format validation (regex pattern or strict YYYY-MM-DD enforcement).
Tool descriptions are too brief (45 - 65 chars, below the baseline 194 chars) and lack situational context. They do not answer: What does it do? When should the LLM call it instead of a similar tool? What format is the output?
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | F | 49 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 54 | - | v1 |
Error handling is generic and non-actionable. Caught exceptions return 'Error parsing date/time / 日期时间解析错误: {str(e)}' without guidance on what to do next. Missing parameter checks ('if not date:') return bare strings without suggesting next steps or valid input formats.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present. All tools are read-only and idempotent, but this is not explicitly signaled in the tool definitions, forcing LLMs to infer intent.