Fancy Control MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Fancy Control MCP ServerShock my device at 70% power"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Fancy Control MCP Server
đ Language / Langue : English | Français
đŹđ§ English
HTTP Streamable MCP (Model Context Protocol) server for controlling PowerExchange/Fancy Control devices.
Features
Tool | Description |
| Check or save device configuration (SSID, password, serial, key) |
| Check or save device tilt position value |
| PET TRAINING FREEZE (BETA) - Activate Pet Training freeze mode (S2Z) - must stay still |
| PET TRAINING FAST - Activate Pet Training fast mode (S2F) - faster response |
| Enable/disable the warning buzzer |
| Pet Training mode (normal/S2) |
| Sleep Deprivation mode |
| Random mode - random activation |
| Timer mode (on/off, get, t1_up/t1_down, t2_up/t2_down) |
| Send a beep (short press equivalent) |
| Send a shock with power 1-100% (long press equivalent) |
| Power level control |
| Raw HTTP command for advanced users |
Architecture
MCP Client âââââââș Raspberry Pi âââââââș Fancy Device
eth0 (Ethernet) wlan0 (WiFi)
Port 8000 Port 80Quick Start
On Raspberry Pi (ARM64) with Docker
git clone <repository-url>
cd fancy-mcp-server
# Build the image
docker build -t fancy-mcp-server .
# Run the container
docker run -d \
--name fancy-mcp-server \
--restart unless-stopped \
-p 8000:8000 \
-e MCP_AUTH_TOKEN=your-secure-token \
-e DEVICE_IP=192.168.4.1 \
-e DEVICE_PORT=80 \
-e MCP_CONTEXT_DESCRIPTION="My Fancy device" \
fancy-mcp-serverWith docker-compose
git clone <repository-url>
cd fancy-mcp-server
cp .env.example .env
# Edit .env with your settings
docker compose up -dSee RASPBERRY_PI_SETUP.md for complete WiFi configuration.
Without Docker (Python)
pip install -r requirements.txt
export MCP_AUTH_TOKEN=your-token
export DEVICE_IP=192.168.4.1
python server.pyEnvironment Variables
Basic Configuration
Variable | Required | Default | Description |
| Yes | - | MCP authentication token |
| Yes | - | Device IP address |
| No | 80 | Device HTTP port |
| No | - | Prefix added to all descriptions |
| No | 8000 | MCP server port |
| No | - | Safety: Maximum power limit (0-100). If set, all power commands (shock, power_control) will be capped at this value |
Tool Descriptions (customizable)
Each tool has its own variable to customize its description:
Variable | Default Description |
| Device Config - Check or save device configuration... |
| Tilt - Check or save the device tilt position value |
| PET TRAINING FREEZE (BETA) - Activate Pet Training freeze mode... |
| PET TRAINING FAST - Activate Pet Training fast mode... |
| Warning Buzzer - Enable or disable the warning buzzer... |
| Pet Training Mode - Enable or disable pet training... |
| Sleep Deprivation Mode - Enable or disable... |
| Random Mode - Enable or disable random activation... |
| Timer Mode - Enable or disable timer mode... |
| Beep - Send a beep signal to the device... |
| Shock - Send a shock signal with specified power... |
| Power Control - Adjust the device power level |
| Send a raw HTTP command to the device... |
API Endpoints
Endpoint | Method | Description |
| POST | Main MCP endpoint (JSON-RPC) |
| GET | Health check |
| GET | Server info |
Authentication
The server accepts the token with or without "Bearer" prefix:
# With Bearer
-H "Authorization: Bearer your-token"
# Without Bearer
-H "Authorization: your-token"Usage Examples
Health Check
curl http://192.168.1.100:8000/healthList Tools
curl -X POST http://192.168.1.100:8000/mcp \
-H "Content-Type: application/json" \
-H "Authorization: your-token" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list", "params": {}}'Send a Beep
curl -X POST http://192.168.1.100:8000/mcp \
-H "Content-Type: application/json" \
-H "Authorization: your-token" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "beep", "arguments": {}}}'Shock at 50% Power
curl -X POST http://192.168.1.100:8000/mcp \
-H "Content-Type: application/json" \
-H "Authorization: your-token" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "shock", "arguments": {"power": 50}}}'Enable Pet Training Freeze
curl -X POST http://192.168.1.100:8000/mcp \
-H "Content-Type: application/json" \
-H "Authorization: your-token" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "pet_training_freeze", "arguments": {"action": "on"}}}'Enable Timer Mode
curl -X POST http://192.168.1.100:8000/mcp \
-H "Content-Type: application/json" \
-H "Authorization: your-token" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "timer", "arguments": {"action": "on"}}}'Get Timer Values
curl -X POST http://192.168.1.100:8000/mcp \
-H "Content-Type: application/json" \
-H "Authorization: your-token" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "timer", "arguments": {"action": "get"}}}'Increase Timer 1
curl -X POST http://192.168.1.100:8000/mcp \
-H "Content-Type: application/json" \
-H "Authorization: your-token" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "timer", "arguments": {"action": "t1_up"}}}'Device Endpoints
Function | Endpoint |
Device Config Check |
|
Device Config Save |
|
Tilt Check |
|
Tilt Save |
|
Pet Training Freeze ON |
|
Pet Training Freeze OFF |
|
Pet Training Fast ON |
|
Pet Training Fast OFF |
|
Buzzer ON |
|
Buzzer OFF |
|
Pet Training |
|
Sleep Deprivation |
|
Random |
|
Timer Mode |
|
Timer Get |
|
Timer 1 + |
|
Timer 1 - |
|
Timer 2 + |
|
Timer 2 - |
|
Mode OFF |
|
Beep |
|
Shock |
|
Power + |
|
Power - |
|
Docker
Build
docker build -t fancy-mcp-server .Run (minimal config)
docker run -d \
--name fancy-mcp-server \
--restart unless-stopped \
-p 8000:8000 \
-e MCP_AUTH_TOKEN=your-token \
-e DEVICE_IP=192.168.4.1 \
fancy-mcp-serverRun (full config with custom descriptions)
docker run -d \
--name fancy-mcp-server \
--restart unless-stopped \
-p 8000:8000 \
-e MCP_AUTH_TOKEN=your-token \
-e DEVICE_IP=192.168.4.1 \
-e DEVICE_PORT=80 \
-e MCP_CONTEXT_DESCRIPTION="My Device" \
-e MCP_SAFETY_MAX_POWER_0_100=50 \
-e TOOL_DESC_DEVICE_CONFIG="Device config" \
-e TOOL_DESC_TILT="Tilt" \
-e TOOL_DESC_PET_TRAINING_FREEZE="Freeze training mode" \
-e TOOL_DESC_PET_TRAINING_FAST="Fast training mode" \
-e TOOL_DESC_WARNING_BUZZER="Warning buzzer" \
-e TOOL_DESC_PET_TRAINING="Training mode" \
-e TOOL_DESC_SLEEP_DEPRIVATION="Sleep deprivation mode" \
-e TOOL_DESC_RANDOM_MODE="Random mode" \
-e TOOL_DESC_TIMER="Timer" \
-e TOOL_DESC_BEEP="Send a beep" \
-e TOOL_DESC_SHOCK="Send a shock" \
-e TOOL_DESC_POWER_CONTROL="Power control" \
-e TOOL_DESC_SEND_RAW_COMMAND="Raw command" \
fancy-mcp-serverSafety Note: The
MCP_SAFETY_MAX_POWER_0_100variable limits the maximum power. In the example above, even if a shock is requested at 100%, it will be limited to 50%.
Stop / Remove
docker stop fancy-mcp-server
docker rm fancy-mcp-serverLogs
docker logs -f fancy-mcp-serverWith docker-compose
docker compose build
docker compose up -d
docker compose logs -fMCP Compliance
Protocol Version: 2024-11-05
Transport: HTTP Streamable
Format: JSON-RPC 2.0
Methods: initialize, tools/list, tools/call, resources/list, resources/read, prompts/list, prompts/get, ping
Related MCP server: MCP PiShock Server
đ«đ· Français
Serveur MCP (Model Context Protocol) HTTP Streamable pour contrĂŽler les appareils PowerExchange/Fancy Control.
Fonctionnalités
Outil | Description |
| Vérifie ou sauvegarde la configuration du device (SSID, mot de passe, numéro de série, clé) |
| Vérifie ou sauvegarde la valeur de position d'inclinaison du device |
| PET TRAINING FREEZE (BETA) - Active le mode Pet Training freeze (S2Z) - doit rester immobile |
| PET TRAINING FAST - Active le mode Pet Training rapide (S2F) - réponse plus rapide |
| Active/désactive le buzzer d'avertissement |
| Mode Pet Training (normal/S2) |
| Mode Sleep Deprivation |
| Mode Random - activation aléatoire |
| Mode Timer (on/off, get, t1_up/t1_down, t2_up/t2_down) |
| Envoie un bip (équivalent appui court) |
| Envoie un shock avec puissance 1-100% (équivalent appui long) |
| ContrĂŽle du niveau de puissance |
| Commande HTTP brute pour utilisateurs avancés |
Architecture
Client MCP âââââââș Raspberry Pi âââââââș Device Fancy
eth0 (Ethernet) wlan0 (WiFi)
Port 8000 Port 80Installation rapide
Sur Raspberry Pi (ARM64) avec Docker
git clone <repository-url>
cd fancy-mcp-server
# Build de l'image
docker build -t fancy-mcp-server .
# Lancer le container
docker run -d \
--name fancy-mcp-server \
--restart unless-stopped \
-p 8000:8000 \
-e MCP_AUTH_TOKEN=votre-token-securise \
-e DEVICE_IP=192.168.4.1 \
-e DEVICE_PORT=80 \
-e MCP_CONTEXT_DESCRIPTION="Mon device Fancy" \
fancy-mcp-serverAvec docker-compose
git clone <repository-url>
cd fancy-mcp-server
cp .env.example .env
# Ăditer .env avec vos paramĂštres
docker compose up -dVoir RASPBERRY_PI_SETUP.md pour la configuration WiFi complĂšte.
Sans Docker (Python)
pip install -r requirements.txt
export MCP_AUTH_TOKEN=votre-token
export DEVICE_IP=192.168.4.1
python server.pyVariables d'environnement
Configuration de base
Variable | Requis | Défaut | Description |
| Oui | - | Token d'authentification MCP |
| Oui | - | Adresse IP du device |
| Non | 80 | Port HTTP du device |
| Non | - | Préfixe ajouté à toutes les descriptions |
| Non | 8000 | Port du serveur MCP |
| Non | - | Sécurité : Limite maximale de puissance (0-100). Si définie, toutes les commandes de puissance (shock, power_control) seront plafonnées à cette valeur |
Descriptions des outils (personnalisables)
Chaque outil a sa propre variable pour personnaliser sa description :
Variable | Description par défaut |
| Device Config - Check or save device configuration... |
| Tilt - Check or save the device tilt position value |
| PET TRAINING FREEZE (BETA) - Activate Pet Training freeze mode... |
| PET TRAINING FAST - Activate Pet Training fast mode... |
| Warning Buzzer - Enable or disable the warning buzzer... |
| Pet Training Mode - Enable or disable pet training... |
| Sleep Deprivation Mode - Enable or disable... |
| Random Mode - Enable or disable random activation... |
| Timer Mode - Enable or disable timer mode... |
| Beep - Send a beep signal to the device... |
| Shock - Send a shock signal with specified power... |
| Power Control - Adjust the device power level |
| Send a raw HTTP command to the device... |
Endpoints API
Endpoint | Méthode | Description |
| POST | Endpoint MCP principal (JSON-RPC) |
| GET | Health check |
| GET | Info serveur |
Authentification
Le serveur accepte le token avec ou sans préfixe "Bearer" :
# Avec Bearer
-H "Authorization: Bearer votre-token"
# Sans Bearer
-H "Authorization: votre-token"Exemples d'utilisation
Health Check
curl http://192.168.1.100:8000/healthListe des outils
curl -X POST http://192.168.1.100:8000/mcp \
-H "Content-Type: application/json" \
-H "Authorization: votre-token" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list", "params": {}}'Envoyer un Beep
curl -X POST http://192.168.1.100:8000/mcp \
-H "Content-Type: application/json" \
-H "Authorization: votre-token" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "beep", "arguments": {}}}'Shock Ă 50% de puissance
curl -X POST http://192.168.1.100:8000/mcp \
-H "Content-Type: application/json" \
-H "Authorization: votre-token" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "shock", "arguments": {"power": 50}}}'Activer Pet Training Freeze
curl -X POST http://192.168.1.100:8000/mcp \
-H "Content-Type: application/json" \
-H "Authorization: votre-token" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "pet_training_freeze", "arguments": {"action": "on"}}}'Activer le mode Timer
curl -X POST http://192.168.1.100:8000/mcp \
-H "Content-Type: application/json" \
-H "Authorization: votre-token" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "timer", "arguments": {"action": "on"}}}'Lire les valeurs Timer
curl -X POST http://192.168.1.100:8000/mcp \
-H "Content-Type: application/json" \
-H "Authorization: votre-token" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "timer", "arguments": {"action": "get"}}}'Augmenter Timer 1
curl -X POST http://192.168.1.100:8000/mcp \
-H "Content-Type: application/json" \
-H "Authorization: votre-token" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "timer", "arguments": {"action": "t1_up"}}}'Endpoints du Device
Fonction | Endpoint |
Config Device (check) |
|
Config Device (save) |
|
Tilt (check) |
|
Tilt (save) |
|
Pet Training Freeze ON |
|
Pet Training Freeze OFF |
|
Pet Training Fast ON |
|
Pet Training Fast OFF |
|
Buzzer ON |
|
Buzzer OFF |
|
Pet Training |
|
Sleep Deprivation |
|
Random |
|
Timer Mode |
|
Timer Get |
|
Timer 1 + |
|
Timer 1 - |
|
Timer 2 + |
|
Timer 2 - |
|
Mode OFF |
|
Beep |
|
Shock |
|
Power + |
|
Power - |
|
Docker
Build
docker build -t fancy-mcp-server .Lancer (config minimale)
docker run -d \
--name fancy-mcp-server \
--restart unless-stopped \
-p 8000:8000 \
-e MCP_AUTH_TOKEN=votre-token \
-e DEVICE_IP=192.168.4.1 \
fancy-mcp-serverLancer (config complÚte avec descriptions personnalisées)
docker run -d \
--name fancy-mcp-server \
--restart unless-stopped \
-p 8000:8000 \
-e MCP_AUTH_TOKEN=votre-token \
-e DEVICE_IP=192.168.4.1 \
-e DEVICE_PORT=80 \
-e MCP_CONTEXT_DESCRIPTION="Mon Device" \
-e MCP_SAFETY_MAX_POWER_0_100=50 \
-e TOOL_DESC_DEVICE_CONFIG="Configuration device" \
-e TOOL_DESC_TILT="Inclinaison" \
-e TOOL_DESC_PET_TRAINING_FREEZE="Mode dressage freeze" \
-e TOOL_DESC_PET_TRAINING_FAST="Mode dressage rapide" \
-e TOOL_DESC_WARNING_BUZZER="Buzzer d'avertissement" \
-e TOOL_DESC_PET_TRAINING="Mode dressage" \
-e TOOL_DESC_SLEEP_DEPRIVATION="Mode privation de sommeil" \
-e TOOL_DESC_RANDOM_MODE="Mode aléatoire" \
-e TOOL_DESC_TIMER="Minuterie" \
-e TOOL_DESC_BEEP="Ămettre un bip" \
-e TOOL_DESC_SHOCK="Envoyer une décharge" \
-e TOOL_DESC_POWER_CONTROL="ContrĂŽle de puissance" \
-e TOOL_DESC_SEND_RAW_COMMAND="Commande brute" \
fancy-mcp-serverNote sécurité : La variable
MCP_SAFETY_MAX_POWER_0_100permet de limiter la puissance maximale. Dans l'exemple ci-dessus, mĂȘme si un shock est demandĂ© Ă 100%, il sera limitĂ© Ă 50%.
ArrĂȘter / Supprimer
docker stop fancy-mcp-server
docker rm fancy-mcp-serverLogs
docker logs -f fancy-mcp-serverAvec docker-compose
docker compose build
docker compose up -d
docker compose logs -fConformité MCP
Protocol Version: 2024-11-05
Transport: HTTP Streamable
Format: JSON-RPC 2.0
Méthodes: initialize, tools/list, tools/call, resources/list, resources/read, prompts/list, prompts/get, ping
License
MIT License
Related MCP Connectors
Retired. Use Collimer's remote MCP server at https://app.collimer.com/mcp instead.
Nifty's MCP server â exposes tasks, projects, messages, and files as tools for AI agents.
QuLab MCP remote server (Streamable HTTP) for computational science and lab tools.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server for seamless integration with peripheral devices connected to your computer. Control, monitor, and manage hardware devices through a unified API.5MIT
- AlicenseNot gradedqualityDmaintenanceEnables controlling PiShock devices (shock, vibrate, beep) via the MCP protocol with API key authentication.4MIT
- AlicenseNot gradedqualityDmaintenanceThis MCP server enables remote control of Lovense toys via the Lovense Cloud API, allowing any MCP client to send actions like vibration, rotation, and patterns to connected toys.MIT
- FlicenseNot gradedqualityCmaintenanceAn MCP server for controlling Lovense toys via local API, with multi-channel scripting, validated inputs, and physiologically-grounded presets.-