A MCP server to calculate Texas Hold'em poker odds.
Single tool with a problematic interface. Tool name is descriptive (calculate_poker_odds), but description is in Chinese, making it inaccessible to most English-speaking LLMs and developers. Input schema is present and typed, but parameters have minimal English descriptions, only Chinese annotations are visible in the code. The schema structure is reasonable (array of hand strings, optional community cards, simulation count), but lacks actionable guidance for LLM selection and error handling. No output schema is documented. Error handling is present in the core function but returns generic error dicts without recovery guidance. The tool does one thing (calculate odds), which is good for composition, but the description quality and parameter clarity are below production standards.
计算德州扑克多手牌在给定公共牌(可选)情况下的胜负平概率。模拟次数越多,结果越精确。
Tool description is entirely in Chinese (计算德州扑克多手牌...), making it inaccessible to English-speaking LLM users and violating the language assumption of most MCP clients. Descriptions must be in English.
Input parameter descriptions are in Chinese. Parameter 'player_hands' has a Chinese description only, violating the requirement that every parameter have a clear, English description explaining what it controls. LLMs cannot infer parameter meaning from Chinese text.
No output schema is documented. The tool returns results but there is no specification of the response structure (e.g., does it return {win_probability: float, tie_probability: float} per player or a flat dict?). LLMs cannot plan downstream operations without knowing what fields to expect.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 44 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 33 | - | v1 |
Error handling returns generic {'error': str(e)} dicts without recovery guidance. Per pattern:recovery-guide, errors must tell the LLM what to do next (e.g., 'Invalid hand format. Each hand must be 2 cards like AsKd. Try: search_poker_hands() for examples.').
Parameter 'num_simulations' has a default of 10000 and minimum of 100, but no maximum is specified. Unbounded max simulation counts could cause timeout, excessive CPU, or memory exhaustion.
Parameter 'community_cards' is optional with default null, but no guidance on what happens when it's omitted. Does the tool simulate all 5 community cards, or require at least 3? The description hints at this but lacks clarity for an LLM.