Spring Boot-based MCP server providing hotel booking, weather query, and date/time tools
This server has 3 tools with basic Spring AI @Tool annotations. All tools have descriptions (in Chinese), and parameter schemas are visible in the annotations. However, the descriptions are minimal (10-39 chars), parameters lack detailed format guidance, there is no documented output schema, no error handling guidance, and the tool composition shows a basic 'read-only utility + one write operation' pattern with minimal production polish. The naming is functional but generic. No evidence of pagination, result limits, or field-level documentation. The server uses HTTP transport via Spring AI MCP server WebMVC, which is current.
该工具用于预定酒店服务
该工具用于获取今日的日期,得到的日期格式为 yyyy-MM-dd
该工具用于查询某城市在某日的天气
Descriptions are too short and lack actionable context. 'book': 13 chars; 'getTodayDate': 25 chars; 'getWeather': 22 chars. Descriptions should be 50-200 chars with WHAT, WHEN, and any prerequisites.
Tool naming does not follow verb_noun convention consistently. 'getTodayDate' uses camelCase getter pattern instead of get_today_date. 'book' is a bare verb; 'getWeather' uses getter pattern. Inconsistency and non-standard naming harm LLM intent parsing.
No documented output schemas. Tools return plain strings ('成功预订酒店', weather string) or LocalDate. LLMs cannot infer what fields to extract, whether results are paginated, or what to pass to downstream tools.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 41 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 43 | - | v1 |
Parameter descriptions lack format constraints and are in Chinese, limiting multilingual LLM clarity. 'checkInDate' has no mention of ISO 8601 format (though 'getWeather' date param includes a verbose note about yyyy-MM-dd). No enum constraints, min/max bounds, or regex patterns declared.
No error handling or recovery guidance. BookingService validates input and throws IllegalArgumentException, but no try-catch in the tool layer to translate exceptions into actionable error messages for the LLM (e.g., 'Check-in date must be >= today and before check-out date').
The 'book' tool modifies state but has no dry-run or confirmation step. An agent could accidentally book a hotel. No idempotency guarantee or explicit WRITE risk mitigation pattern.
'getTodayDate' violates single responsibility if used alongside other temporal queries. However, at 3 tools total, composition is not yet a critical problem, but no evidence of chaining support (output fields do not align with input parameters of downstream tools).
Language inconsistency: tool descriptions and parameter descriptions in Chinese; developer comments in English. An LLM operating in English context will struggle with mixed descriptions.