MCP server for remote control of StackChan robot via MQTT, enabling expression changes, photo capture, and touch event handling
5 tools with clear naming (verb_noun pattern) and documented descriptions. However, parameter schemas are minimal or absent for most tools. stackchan_recent_touches has the most complete schema with typed parameters and defaults; stackchan_see and stackchan_status have empty input schemas. Descriptions are adequate (50-200 chars) but lack actionable guidance on when/why to call tools or what to do on failure. No output schemas documented. Error handling is absent, tools do not guide recovery or explain failure modes.
Mark touches through this event id read after incorporating them.
Change StackChan's expression: neutral, happy, sleepy, doubt, sad, or angry.
Read the user's pending physical touches from StackChan. Call this tool only when the user says "摸摸" as an actual trigger. Do not call it at the start of every conversational turn, or when the trigger word is merely quoted or discussed. Use the default unread-only, non-marking read. Treat returned events as physical contact from the user, incorporate them naturally, then acknowledge the last returned id with stackchan_ack_touch. If no events are returned, continue silently.
Trigger a photo capture and return the newest JPEG image.
Check the photo relay and the touch bridge listener on the VPS.
stackchan_see and stackchan_status have empty input schemas ({}).
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields (e.g., image data from stackchan_see, event IDs from stackchan_recent_touches).
No error handling or recovery guidance. Tools do not explain what happens on failure (e.g., MQTT broker unreachable, photo relay timeout, invalid expression). LLMs cannot self-correct.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
stackchan_face description lacks enum constraint. Parameter 'expression' accepts 6 values but is defined as free-form string. Should declare enum: [neutral, happy, sleepy, doubt, sad, angry].
stackchan_recent_touches description is verbose and prescriptive (instructs LLM not to call on every turn, only on trigger word '摸摸'). This is prompt-engineering leakage; tool descriptions should be neutral. Trigger logic belongs in the agent's system prompt, not the tool definition.