An MCP server exposing a physical deck (button interface) to AI agents over JSON-RPC on HTTP. Allows agents to ask questions, notify users, control deck pages, and interact with integrations like Discord and OBS.
The server defines 7 tools with basic schemas and descriptions, but falls short of production quality. Tool names follow verb_noun convention (deck_ask, deck_notify, etc.), which is good. However, descriptions are minimal (10-50 chars), parameter descriptions are sparse or missing, and output schemas are undocumented. The 'action' parameter in deck_set_key is typed as 'object' with no nested schema. deck_propose_page has nested objects (discord, obs) with minimal field documentation. Error handling exists but lacks recovery guidance. No tool annotations (readOnlyHint/destructiveHint) despite clear WRITE vs READ_ONLY risk classifications in the metadata.
Ask a question on the physical deck with multiple choice options. The user presses a key to select their answer.
Get information about available integrations (Discord, OBS, etc.) and their connection status.
Send a notification message to display on the deck.
Propose a new page layout with custom keys for the deck. Keys can have Discord actions, OBS actions, hotkeys, text input, or program execution.
Reset a deck page to its default state.
Set the action for a specific deck key.
Get the current status of the deck, including connected state, current page, and key states.
Output schemas undocumented. deck_status and deck_integrations return data but no schema is visible in code or descriptions. LLMs cannot plan downstream calls without knowing response structure.
Nested object parameters lack schema detail. deck_set_key's 'action' parameter is typed as object with no properties defined. deck_propose_page's 'discord' and 'obs' objects have minimal field descriptions. LLMs cannot construct valid payloads.
Tool annotations missing. Metadata marks deck_set_key, deck_propose_page, and deck_reset_page as WRITE operations, but no destructiveHint or idempotentHint annotations are present in the schema. Agents cannot distinguish safe from risky calls.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
Minimal parameter descriptions. Most parameters lack actionable guidance. 'timeout_seconds' says '5-3600 seconds, default 300' but no description of what happens on timeout. 'action' in deck_set_key has no description of valid action types.
Error handling lacks recovery guidance. Code returns 'Tool failed: <message>' but does not categorize errors as retryable, user-fixable, or fatal. No suggestions for next steps (e.g., 'Try deck_status to check deck connection').