设备控制服务器

HTTP流式MCP服务器,用于控制PowerExchange/Fancy Control设备,支持多种操作模式和安全设置。

  • by Kyrnepi
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 Kyrnepi/mcp-fancy-server

使用说明

花式控制MCP服务器

🌐 语言/语言: 英语 | 法语


🇬🇧 英语

用于控制PowerExchange/Fancy Control设备的HTTP流式MCP(模型上下文协议)服务器。

特性

工具 说明
device_config 检查或保存设备配置(SSID、密码、序列号、密钥)
tilt 检查或保存设备倾斜位置值
pet_training_freeze 宠物训练冻结(BETA)-激活宠物训练冻结模式(S2Z)-必须保持静止
pet_training_fast 宠物训练快速-激活宠物训练快速模式(S2F)-更快的响应
warning_buzzer 启用/禁用警告蜂鸣器
pet_training 宠物训练模式(正常/S2)
sleep_deprivation 睡眠剥夺模式
random_mode 随机模式-随机激活
timer 定时器模式(开/关、获取、t1_up/t1_down、t2_up/t2_down)
beep 发出蜂鸣声(相当于短按)
shock 以1-100%的功率发出冲击(相当于长按)
power_control 功率电平控制
send_raw_command 高级用户的原始HTTP命令

建筑

MCP Client ──────► Raspberry Pi ──────► Fancy Device
             eth0 (Ethernet)     wlan0 (WiFi)
             Port 8000           Port 80

快速开始

使用Docker在Raspberry Pi(ARM64)上运行

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-server

使用docker编写

git clone <repository-url>
cd fancy-mcp-server
cp .env.example .env
# Edit .env with your settings
docker compose up -d

看 RASPBERRY_PI_SETUP.md 用于完整的WiFi配置。

没有Docker(Python)

pip install -r requirements.txt
export MCP_AUTH_TOKEN=your-token
export DEVICE_IP=192.168.4.1
python server.py

环境变量

基本配置

变量 必填 默认 描述
MCP_AUTH_TOKEN 是 - MCP身份验证令牌
DEVICE_IP 是 - 设备IP地址
DEVICE_PORT 无 80 设备HTTP端口
MCP_CONTEXT_DESCRIPTION 所有描述均未添加 - 前缀
PORT 无 8000 MCP服务器端口
MCP_SAFETY_MAX_POWER_0_100 否 - 安全:最大功率限制(0-100)。如果设置,所有电源命令(冲击、电源控制)将限制在此值

工具说明(可定制)

每个工具都有自己的变量来自定义其描述:

变量 默认描述
TOOL_DESC_DEVICE_CONFIG 设备配置-检查或保存设备配置。..
TOOL_DESC_TILT 倾斜-检查或保存设备倾斜位置值
TOOL_DESC_PET_TRAINING_FREEZE 宠物训练冻结(BETA)-激活宠物训练冻结模式。..
TOOL_DESC_PET_TRAINING_FAST 宠物训练快速-激活宠物训练快速模式。..
TOOL_DESC_WARNING_BUZZER 警告蜂鸣器-启用或禁用警告蜂鸣器。..
TOOL_DESC_PET_TRAINING 宠物训练模式-启用或禁用宠物训练。..
TOOL_DESC_SLEEP_DEPRIVATION 睡眠剥夺模式-启用或禁用。..
TOOL_DESC_RANDOM_MODE 随机模式-启用或禁用随机激活。..
TOOL_DESC_TIMER 定时器模式-启用或禁用定时器模式。..
TOOL_DESC_BEEP 蜂鸣-向设备发送蜂鸣信号。..
TOOL_DESC_SHOCK 冲击-发送具有指定功率的冲击信号。..
TOOL_DESC_POWER_CONTROL 功率控制-调整设备功率水平
TOOL_DESC_SEND_RAW_COMMAND 向设备发送原始HTTP命令。..

API终点

端点 方法 描述
/mcp POST 主MCP端点(JSON-RPC)
/health GET 健康检查
/ GET 服务器信息

认证

服务器接受带有或不带有“Bearer”前缀的令牌:

# With Bearer
-H "Authorization: Bearer your-token"

# Without Bearer
-H "Authorization: your-token"

使用示例

健康检查

curl http://192.168.1.100:8000/health

列出工具

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": {}}'

发送蜂鸣声

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": {}}}'

50%功率下的冲击

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}}}'

启用宠物训练冻结

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"}}}'

启用定时器模式

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"}}}'

获取计时器值

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"}}}'

增加定时器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"}}}'

设备端点

函数 端点
设备配置检查 /TX?
设备配置保存 /TX?SSIDX=<ssid>&PASSX=<password>
倾斜检查 /DIS/BOW
倾斜保存 /TX?TILTVAL=<value>
宠物训练冻结 /mode/S2Z
宠物训练冻结 /mode/0
宠物训练快速开启 /mode/S2F
宠物训练快速关闭 /mode/0
蜂鸣器打开 /S1/1
蜂鸣器关闭 /S1/0
宠物训练 /mode/S2
睡眠剥夺 /mode/S4
随机 /mode/RN
定时器模式 /mode/TM
定时器获取 /DIS/TM
定时器1+ /T1/+
定时器1- /T1/-
定时器2+ /T2/+
定时器2- /T2/-
模式关闭 /mode/0
嘟嘟 /B1/1
震惊 /Z1/1
电源+ /PW/+
电源- /PW/-

码头工人

构建

docker build -t fancy-mcp-server .

运行(最小配置)

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-server

运行(带有自定义描述的完整配置)

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-server

安全须知:The MCP_SAFETY_MAX_POWER_0_100 变量限制了最大功率。在上面的例子中,即使要求100%的电击,也将限制在50%。

停止/删除

docker stop fancy-mcp-server
docker rm fancy-mcp-server

日志

docker logs -f fancy-mcp-server

使用docker编写

docker compose build
docker compose up -d
docker compose logs -f

MCP合规性

  • 协议版本:2024-11-05
  • 传输:HTTP流式传输
  • 格式:JSON-RPC 2.0
  • 方法:初始化、工具/列表、工具/调用、资源/列表、资源/读取、提示/列表、提示/获取、ping

🇫🇷 法语

MCP(模型上下文协议)HTTP流服务器,用于控制PowerExchange/Fancy控制设备。

功能

输出 描述
device_config 检查或保存设备配置(SSID、密码、序列号、密钥)
tilt 检查或保存设备的倾斜位置值
pet_training_freeze 宠物训练冷冻(BETA)-主动模式宠物训练冷冻
pet_training_fast 宠物训练快速-激活宠物训练快速(S2F)模式-更快的响应
warning_buzzer 打开/关闭警告蜂鸣器
pet_training 模式宠物训练(正常/S2)
sleep_deprivation 睡眠剥夺模式
random_mode 随机模式-随机激活
timer 模式定时器(开/关、获取、t1_up/t1_down、t2_up/t2_down)
beep 发送嘟嘟声(相当于短按)
shock 发出1-100%功率冲击(相当于长时间按压)
power_control 功率电平控制
send_raw_command 高级用户的原始HTTP命令

建筑

Client MCP ──────► Raspberry Pi ──────► Device Fancy
             eth0 (Ethernet)     wlan0 (WiFi)
             Port 8000           Port 80

安装速度快

带Docker的Raspberry Pi(ARM64)

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-server

使用Docker Compose

git clone <repository-url>
cd fancy-mcp-server
cp .env.example .env
# Éditer .env avec vos paramètres
docker compose up -d

见 RASPBERRY_PI_SETUP.md 配置完整的WiFi。

无Docker(Python)

pip install -r requirements.txt
export MCP_AUTH_TOKEN=votre-token
export DEVICE_IP=192.168.4.1
python server.py

环境变量

基础配置

变量 必需 默认 描述
MCP_AUTH_TOKEN 是 - MCP身份验证令牌
DEVICE_IP 是 - 设备的IP地址
DEVICE_PORT 非 80 端口HTTP du设备
MCP_CONTEXT_DESCRIPTION 否 - 前缀已添加到所有描述中
PORT 否 8000 MCP服务器端口
MCP_SAFETY_MAX_POWER_0_100 非 - 安全 最大功率限制(0-100)。如果设置,所有功率命令(shock、power-control)将上限为该值

工具说明(可自定义)

每个工具都有自己的变量来自定义其描述:

变量 默认描述
TOOL_DESC_DEVICE_CONFIG 设备配置-检查或保存设备配置。..
TOOL_DESC_TILT 倾斜-检查或保存设备倾斜位置值
TOOL_DESC_PET_TRAINING_FREEZE 宠物训练冻结(BETA)-激活宠物训练冻结模式。..
TOOL_DESC_PET_TRAINING_FAST 宠物训练快速-激活宠物训练快速模式。..
TOOL_DESC_WARNING_BUZZER 警告蜂鸣器-启用或禁用警告蜂鸣器。..
TOOL_DESC_PET_TRAINING 宠物训练模式-启用或禁用宠物训练。..
TOOL_DESC_SLEEP_DEPRIVATION 睡眠剥夺模式-启用或禁用。..
TOOL_DESC_RANDOM_MODE 随机模式-启用或禁用随机激活。..
TOOL_DESC_TIMER 定时器模式-启用或禁用定时器模式。..
TOOL_DESC_BEEP 蜂鸣-向设备发送蜂鸣信号。..
TOOL_DESC_SHOCK 冲击-发送具有指定功率的冲击信号。..
TOOL_DESC_POWER_CONTROL 功率控制-调整设备功率水平
TOOL_DESC_SEND_RAW_COMMAND 向设备发送原始HTTP命令。..

端点API

端点 方法 描述
/mcp POST 端点MCP主体(JSON-RPC)
/health GET 健康检查
/ 获取 服务器信息

认证

服务器接受带有或不带有前缀“bearer”的令牌:

# Avec Bearer
-H "Authorization: Bearer votre-token"

# Sans Bearer
-H "Authorization: votre-token"

使用示例

健康检查

curl http://192.168.1.100:8000/health

工具列表

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": {}}'

发送蜂鸣声

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": {}}}'

50%功率冲击

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}}}'

活跃宠物训练冻结

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"}}}'

激活定时器模式

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"}}}'

读取计时器值

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"}}}'

增量器定时器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"}}}'

设备端点

功能 端点
配置设备(检查) /TX?
配置设备(保存) /TX?SSIDX=<ssid>&PASSX=<password>
倾斜(检查) /DIS/BOW
倾斜(保存) /TX?TILTVAL=<valeur>
宠物训练冻结 /mode/S2Z
宠物训练冻结 /mode/0
宠物训练快速开启 /mode/S2F
宠物训练快速关闭 /mode/0
蜂鸣器打开 /S1/1
蜂鸣器关闭 /S1/0
宠物训练 /mode/S2
睡眠剥夺 /mode/S4
随机 /mode/RN
定时器模式 /mode/TM
定时器获取 /DIS/TM
定时器1+ /T1/+
定时器1- /T1/-
定时器2+ /T2/+
定时器2- /T2/-
模式关闭 /mode/0
嘟嘟 /B1/1
震惊 /Z1/1
电源+ /PW/+
电源- /PW/-

码头工人

构建

docker build -t fancy-mcp-server .

Lancer(配置最小值)

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-server

启动(具有自定义描述的完整配置)

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-server

安全说明 :La变量 MCP_SAFETY_MAX_POWER_0_100 允许限制最大功率。在上面的示例中,即使要求100%电击,也将限制为50%。

停止/删除

docker stop fancy-mcp-server
docker rm fancy-mcp-server

日志

docker logs -f fancy-mcp-server

使用Docker Compose

docker compose build
docker compose up -d
docker compose logs -f

MCP合规性

  • 协议版本:2024-11-05
  • 传输:HTTP流式传输
  • 格式:JSON-RPC 2.0
  • 方法:初始化、工具/列表、工具/调用、资源/列表、资源/读取、提示/列表、提示/获取、ping

许可证

MIT许可证