MCP-compliant HTTP Streamable server for controlling PowerExchange IoT devices based on decompiled Android app: FANCY_CONTROL_V7B
This MCP server exposes an extraordinarily dangerous control interface for what appears to be an animal shock device. While the code is technically structured (FastAPI + async HTTP), the tool definitions have critical failures: (1) Most tools lack proper descriptions explaining WHEN and WHY to use them. (2) Parameter schemas are present but minimal. (3) Critically, tools like 'pet_training', 'pet_training_freeze', 'pet_training_fast', 'shock', and 'sleep_deprivation' represent destructive/harmful operations with no permission gates, confirmation flows, or audit trails. (4) No error handling guidance. (5) Tool composition is poor, separate modes (freeze, fast, normal) should not be individual tools. (6) The tool 'send_raw_command' is a security anti-pattern that bypasses all safety controls. The server does attempt to integrate a safety max-power limit via environment variable, but this is insufficient given the harmful nature of the exposed functions. From a definition-quality perspective, this scores as a D-tier server, the bare minimum of schema structure is present, but descriptions are weak, composition is poor, and security/safety practices are absent.
Beep - Send a beep signal to the device (equivalent to short button press).
Device Config - Check or save device configuration (SSID, password, serial number, key).
Pet Training Mode - Enable or disable pet training mode (normal/S2). Use pet_training_fast or pet_training_freeze for other modes.
PET TRAINING FAST - Activate Pet Training in fast mode (mode 2/S2F). Faster response time for training corrections.
PET TRAINING FREEZE (BETA) - Activate Pet Training in freeze mode (mode 3/S2Z). When enabled, subject must stay completely still - any movement triggers a correction without warning.
Power Control - Increase or decrease the device power level. Device only supports increment/decrement, not absolute values.
Destructive and harmful tools ('pet_training', 'pet_training_freeze', 'shock', 'sleep_deprivation') exposed without permission gates, confirmation flows, or audit trails. An LLM agent could invoke these functions without explicit user consent, causing harm.
send_raw_command tool bypasses all safety controls and allows arbitrary HTTP endpoints. This is a critical security anti-pattern that enables an LLM agent to invoke any device function, defeating the purpose of structured tool exposure.
Most tool descriptions are vague or insufficient (20-50 chars). Descriptions should be 50-200 chars and answer WHAT the tool does, WHEN to use it, and any prerequisites. Current descriptions lack guidance on tool selection and use cases.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 46 | <=2025-11-25 | v2 |
Random Mode - Enable or disable random activation mode.
Send a raw HTTP command to the device. For advanced users.
Shock - Send a shock signal with specified power level (equivalent to long button press).
Sleep Deprivation Mode - Enable or disable sleep deprivation mode.
Tilt - Check or save the device tilt position value.
Timer Mode - Control timer mode: on/off, get values, increase/decrease timer1 or timer2.
Warning Buzzer - Enable or disable the warning buzzer on the device.
Poor tool composition: 'pet_training', 'pet_training_fast', and 'pet_training_freeze' are three separate tools representing different modes of the same underlying function. These should be consolidated into a single 'set_pet_training_mode' tool with a mode parameter (normal|fast|freeze).
No error handling guidance. Tools return success/failure but do not tell the LLM what to do on failure, what conditions are retryable, or how to self-correct. Missing pattern: recovery-guide.
No dry-run or confirmation step for irreversible operations like 'shock' or 'pet_training'. Agents can invoke these destructively without explicit user confirmation, violating the confirmation-request pattern.
Tool 'shock' accepts a 'power_level' parameter (0-100) but the description does not clearly explain the consequences or safety constraints. The parameter should include units/meaning and respect the MCP_SAFETY_MAX_POWER_0_100 limit (which is set but not documented in the tool description).
No audit logging or security scoping. Tools do not declare what permissions they require (e.g., 'admin:device', 'write:device'). There is no visible audit trail of which agent called which tool with which parameters.
Parameter 'action' is used in multiple tools but lacks clarity. For timer, 'action' accepts 7 different enum values (on, off, get, increase_timer1, decrease_timer1, increase_timer2, decrease_timer2), which violates the single-responsibility principle and should be split into multiple tools (timer_on, timer_off, timer_get, timer_increase, timer_decrease) or accept a structured object with (operation, timer_index).
device_config tool accepts 'action' enum (get|set) but the schema does not make ssid, password, serial_number, key conditionally required based on the action. When action='get', these should not be required; when action='set', they should be required. This is undocumented parameter dependency.