MCP server for interacting with Bale chat platform, enabling message reading, sending, and chat registration
Three tools with basic verb-noun naming (list, read, send). All have descriptions and visible input schemas with types. However, descriptions are minimal (10-50 chars), parameter descriptions lack detail on constraints/formats, and output schemas are not formally documented. No error handling guidance, no parameter validation hints, and no security/permission documentation. Tool composition is reasonable (single responsibility), but parameter design could be more user-friendly (e.g., accepting chat names instead of requiring IDs). Schemas present but sparse, missing min/max bounds, enums, and format constraints.
List all registered Bale chats.
Read recent messages from a registered Bale chat by title.
Send a text message to a registered Bale chat by title.
Parameter descriptions lack constraint details. 'limit' has no min/max bounds stated; 'text' has max 4000 chars mentioned in description but no formal schema constraint (maxLength). 'chat_title' has no guidance on format or how to discover valid titles.
Tool descriptions are too brief (10-50 chars). Current descriptions lack WHEN to use, WHAT it returns, and any prerequisites. E.g., 'List all registered Bale chats' does not explain what 'registered' means or what fields are returned.
Output schemas not documented. Code shows tools return dicts with 'ok', 'count', 'chats', 'messages', etc., but no formal schema is visible in tool registration. LLMs cannot plan downstream calls without knowing response structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 47 | 2026-07-28+ | v2 |
No error handling guidance. Code catches exceptions and calls format_tool_error(), but tool descriptions do not explain what errors are possible, whether they are retryable, or what the LLM should do next. E.g., 'chat_title not found', should the LLM call bale_list_chats first?
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). bale_send_message is destructive (sends a message) and non-idempotent, but this is not declared in the schema. bale_list_chats and bale_read_messages are read-only but lack readOnlyHint annotation.