OpenShock设备控制服务器

基于官方Python MCP SDK构建的OpenShock设备控制服务器,支持自动电击强度限制和安全HTTP通信。

  • by Kyrnepi
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Kyrnepi/mcp-openshock-server

使用说明

OpenShock MCP Server | OpenShock MCP 服务器

英语 | 法语


英语

用于控制OpenShock设备的模型上下文协议(MCP)服务器,使用官方Python MCP SDK构建。具有自动冲击强度限制和基于HTTP的安全通信功能。

特性

  • 官方MCP SDK:使用官方 mcp Anthropic的Python包
  • 完整的MCP协议:通过适当的工具定义全面实施MCP标准
  • 可用工具:
    • SHOCK:发送具有自动强度限制的电击命令
    • VIBRATE:发送振动命令
    • BEEP:发送声音/蜂鸣声命令
    • STOP:停止所有命令
  • 安全功能:通过以下方式自动限制冲击强度 SHOCK_LIMIT 环境变量
  • HTTP传输:使用JSON-RPC 2.0的现代基于HTTP的MCP服务器
  • 连接池:高效的HTTP客户端连接管理
  • Docker支持:使用Docker和Docker compose轻松部署

建筑

此服务器使用:

  • 快速API 用于HTTP传输层和MCP JSON-RPC 2.0端点
  • HTTPX 用于具有连接池的异步HTTP客户端
  • OpenShock API v2 用于设备控制

安装

先决条件

  • Docker和Docker组合(推荐)
  • 或者使用pip的Python 3.11+
  • 有效的OpenShock API令牌

配置

  1. 克隆存储库:

    git clone <repository-url>
    cd openshock-mcp-server
    
  2. 复制 .env.example 到 .env:

    cp .env.example .env
    
  3. 编辑 .env 使用您的配置文件:

    OPENSHOCK_API_TOKEN=your_openshock_token_here
    MCP_AUTH_TOKEN=your_secure_mcp_token_here
    SHOCK_LIMIT=50  # Optional: limit shock intensity (0 = no limit)
    

从Docker Compose开始(推荐)

docker-compose up -d

服务器将可在以下位置访问 http://localhost:8000

从Docker开始

docker build -t openshock-mcp-server .
docker run -p 8000:8000 \
  -e OPENSHOCK_API_TOKEN=your_token \
  -e MCP_AUTH_TOKEN=your_mcp_token \
  -e SHOCK_LIMIT=50 \
  openshock-mcp-server

本地开发

# Install dependencies
pip install -r requirements.txt

# Set environment variables
export OPENSHOCK_API_TOKEN=your_token
export MCP_AUTH_TOKEN=your_mcp_token
export SHOCK_LIMIT=50

# Run the server
python app.py

用法

MCP客户端连接

将您的MCP客户端连接到 http://localhost:8000/mcp 使用JSON-RPC 2.0格式的HTTP POST请求。

需要身份验证: 所有请求都必须在 Authorization 头球这 Bearer 前缀对于MCP客户端兼容性是可选的:

Authorization: Bearer your_mcp_auth_token

或

Authorization: your_mcp_auth_token

这 /health 端点无需身份验证即可公开访问。

可用的MCP工具

1.休克

发送具有自动强度限制的电击命令。

参数:

  • shockers (列表):震撼配置列表
    • id (字符串):电击器ID
    • intensity (整数):冲击强度1-100(由Shock_LIMIT自动限制)
    • duration (整数):持续时间(毫秒)(300-30000)

例子:

{
  "name": "SHOCK",
  "arguments": {
    "shockers": [
      {
        "id": "your_shocker_id",
        "intensity": 80,
        "duration": 1000
      }
    ]
  }
}

如果 SHOCK_LIMIT=50,强度将自动降低到50。

2.振动

发送振动命令(不受SHOCK_LIMIT的影响)。

参数:

  • shockers (列表):震撼配置列表
    • id (字符串):电击器ID
    • intensity (整数):振动强度1-100
    • duration (整数):持续时间(毫秒)(300-30000)

例子:

{
  "name": "VIBRATE",
  "arguments": {
    "shockers": [
      {
        "id": "your_shocker_id",
        "intensity": 30,
        "duration": 2000
      }
    ]
  }
}
3.嘟嘟声

发送蜂鸣/声音命令。

参数:

  • shockers (列表):震撼配置列表
    • id (字符串):电击器ID
    • intensity (整数):蜂鸣音量强度1-100(默认为50)
    • duration (整数):持续时间(毫秒)(300-30000)

例子:

{
  "name": "BEEP",
  "arguments": {
    "shockers": [
      {
        "id": "your_shocker_id",
        "intensity": 50,
        "duration": 500
      }
    ]
  }
}
4.停止

停止指定电击器上的所有命令。

参数:

  • shockers (列表):要阻止的震惊事件列表
    • id (字符串):电击器ID

例子:

{
  "name": "STOP",
  "arguments": {
    "shockers": [
      {
        "id": "your_shocker_id"
      }
    ]
  }
}

安全功能

冲击极限

这 SHOCK_LIMIT 环境变量为冲击指令提供自动安全限制:

  • SHOCK_LIMIT=0:无限制(默认行为)
  • SHOCK_LIMIT=50:自动将冲击强度限制在最大50
  • SHOCK_LIMIT=25:自动将冲击强度限制在最大25

行为:

  • 命令强度高于 SHOCK_LIMIT 是 未被拒绝
  • 强度为 自动减少 达到配置的限制
  • 回复包括有关调整的详细信息
  • 记录所有调整以进行安全审计

备注:只有 SHOCK 命令受以下因素影响 SHOCK_LIMIT. VIBRATE 和 BEEP 命令不受限制。

环境变量

变量 描述 必填 默认
OPENSHOCK_API_TOKEN OpenShock API令牌 ✅ 是 -
MCP_AUTH_TOKEN MCP身份验证令牌(在授权标头中发送,承载前缀可选) ✅ 是 -
SHOCK_LIMIT 最大冲击强度(0=无限制) ❌ 否 0
OPENSHOCK_API_URL OpenShock API网址 ❌ 否 https://api.openshock.app
MCP_SERVER_NAME MCP服务器名称 ❌ 否 openshock mcp服务器
MCP_VERSION 服务器版本 ❌ 否 2.1.0
PORT 监听端口 ❌ 否 8000

健康检查

服务器在以下位置提供健康检查端点 /health:

curl http://localhost:8000/health

答复:

{
  "status": "healthy"
}

安全最佳实践

  • ⚠️ 令牌安全:两者都保留 OPENSHOCK_API_TOKEN 和 MCP_AUTH_TOKEN 安全,从不将其提交给版本控制
  • 🔑 强代币:使用强随机生成的令牌 MCP_AUTH_TOKEN (例如UUID或32+个字符的随机字符串)
  • 🔒 HTTPS在生产中:在生产环境中始终使用HTTPS/TLS
  • 🎯 配置SHOCK_LIMIT:设置适当的 SHOCK_LIMIT 根据您的安全要求
  • 🔐 网络安全:使用防火墙限制对服务器的网络访问
  • 📊 审计日志:记录所有强度调整和身份验证失败,以进行安全审计

故障排除

服务器无法启动

  • 验证 OPENSHOCK_API_TOKEN 设置正确
  • 检查日志 docker-compose logs -f (Docker)或控制台输出(本地)

命令不起作用

  • 验证震惊者ID是否正确
  • 检查OpenShock API令牌是否具有适当的权限
  • 查看日志中的错误消息

连接问题

  • 确保服务器在配置的端口上可访问
  • 检查防火墙规则
  • 验证MCP客户端是否已配置为使用JSON-RPC 2.0进行HTTP传输

发展

此服务器是使用以下方式构建的:

要贡献或报告问题,请使用GitHub存储库。

版本历史

v2.1.0 (当前)

  • 架构更改:从SSE(服务器发送事件)切换到纯HTTP JSON-RPC 2.0
  • 通过直接JSON响应简化响应处理
  • 改进了与标准JSON-RPC客户端的兼容性
  • 更新文档以反映仅HTTP传输

v2.0.1

  • 安全修复:重新实现身份验证(v2.0.0存在严重漏洞)
  • 使用中间件进行承载令牌身份验证
  • 除以下端点外,所有端点都需要身份验证 /health

v2.0.0版本 (请勿使用-安全问题)

  • 使用官方MCP Python SDK完成重写
  • 严重错误:身份验证被意外删除
  • 添加了HTTP客户端连接池
  • 更好的错误处理
  • 完整的英文代码库,包含双语文档

v1.0.0

  • 带有自定义MCP实现的初始版本

法语

用于控制OpenShock设备的模型上下文协议(MCP)服务器,使用官方MCP Python SDK构建。包括自动冲击强度限制和基于HTTP的安全通信。

功能

  • 官方MCP SDK:使用Python包构建 mcp 官方Anthropic
  • 完整MCP协议:全面实施MCP标准,并定义适当的工具
  • 可用工具:
    • SHOCK:发送具有自动强度限制的冲击命令
    • VIBRATE:发送振动命令
    • BEEP:发送声音命令
    • STOP:停止所有命令
  • 安全功能:通过变量自动限制冲击强度 SHOCK_LIMIT
  • 传输HTTP:使用JSON-RPC 2.0的现代基于HTTP的MCP服务器
  • 连接池:高效管理HTTP客户端连接
  • 支持Docker:使用Docker和Docker Compose轻松部署

建筑

此服务器使用:

  • 快速API 对于HTTP传输层和MCP端点JSON-RPC 2.0
  • HTTPX 对于具有连接池的异步HTTP客户端
  • API OpenShock v2 用于控制设备

安装

先决条件

  • Docker和Docker组合(推荐)
  • 或使用Pip的Python 3.11+。
  • 代币API OpenShock缬ide

配置

  1. 克隆存储库:

    git clone <repository-url>
    cd openshock-mcp-server
    
  2. 复制 .env.example 朝向 .env :

    cp .env.example .env
    
  3. 编辑文件 .env 使用您的配置:

    OPENSHOCK_API_TOKEN=votre_token_openshock
    MCP_AUTH_TOKEN=votre_token_mcp_securise
    SHOCK_LIMIT=50  # Optionnel: limite l'intensité des chocs (0 = pas de limite)
    

Docker Compose入门(推荐)

docker-compose up -d

服务器将可访问 http://localhost:8000

Docker入门

docker build -t openshock-mcp-server .
docker run -p 8000:8000 \
  -e OPENSHOCK_API_TOKEN=votre_token \
  -e MCP_AUTH_TOKEN=votre_token_mcp \
  -e SHOCK_LIMIT=50 \
  openshock-mcp-server

地方发展

# Installer les dépendances
pip install -r requirements.txt

# Définir les variables d'environnement
export OPENSHOCK_API_TOKEN=votre_token
export MCP_AUTH_TOKEN=votre_token_mcp
export SHOCK_LIMIT=50

# Lancer le serveur
python app.py

使用

Connexion客户端MCP

将MCP客户端连接到 http://localhost:8000/mcp 使用JSON-RPC 2.0格式的HTTP POST请求。

认证要求: 所有请求必须在头中包含身份验证令牌 Authorization.前缀 Bearer 可选,以便与MCP客户端兼容:

Authorization: Bearer votre_token_mcp

或

Authorization: votre_token_mcp

Le端点 /health 无需身份验证即可公开访问。

MCP工具可用

1.休克

发送具有自动强度限制的冲击命令。

设置 :

  • shockers (列表):冲击器配置列表
    • id (string):ID du shock
    • intensity (整数):冲击强度1-100(由shock-limit自动限制)
    • duration (整数):以毫秒为单位的持续时间(300-30000)

示例:

{
  "name": "SHOCK",
  "arguments": {
    "shockers": [
      {
        "id": "votre_id_shocker",
        "intensity": 80,
        "duration": 1000
      }
    ]
  }
}

是 SHOCK_LIMIT=50强度将自动降低到50。

2.振动

发送振动命令(不受shock-limit影响)。

设置 :

  • shockers (列表):冲击器配置列表
    • id (string):ID du shock
    • intensity (整数):振动强度1-100
    • duration (整数):以毫秒为单位的持续时间(300-30000)

示例:

{
  "name": "VIBRATE",
  "arguments": {
    "shockers": [
      {
        "id": "votre_id_shocker",
        "intensity": 30,
        "duration": 2000
      }
    ]
  }
}
3.嘟嘟声

发送声音命令。

设置 :

  • shockers (列表):冲击器配置列表
    • id (string):ID du shock
    • intensity (整数):音量强度1-100(默认为50)
    • duration (整数):以毫秒为单位的持续时间(300-30000)

示例:

{
  "name": "BEEP",
  "arguments": {
    "shockers": [
      {
        "id": "votre_id_shocker",
        "intensity": 50,
        "duration": 500
      }
    ]
  }
}
4.停止

停止指定冲击器上的所有命令。

设置 :

  • shockers (列表):要停止的冲击者列表
    • id (string):ID du shock

示例:

{
  "name": "STOP",
  "arguments": {
    "shockers": [
      {
        "id": "votre_id_shocker"
      }
    ]
  }
}

安全功能

冲击极限

环境变量 SHOCK_LIMIT 为冲击控制提供自动安全限制:

  • SHOCK_LIMIT=0:无限制(默认行为)
  • SHOCK_LIMIT=50:自动将冲击强度限制为最大50
  • SHOCK_LIMIT=25:自动将冲击强度限制为最大25

行为:

  • 强度大于的命令 SHOCK_LIMIT 他们不是 未被拒绝
  • 强度是 自动减少 在配置的限制
  • 答案包括调整的细节
  • 记录所有调整以进行安全审计

备注:只有命令 SHOCK 受影响 SHOCK_LIMIT.命令 VIBRATE 和 BEEP 不受限制。

环境变量

变量 描述 必需 默认
OPENSHOCK_API_TOKEN OpenShock API令牌 ✅ 是的 -
MCP_AUTH_TOKEN MCP身份验证令牌(在报头授权中发送,可选承载前缀) ✅ 是的 -
SHOCK_LIMIT 最大冲击强度(0=无限制) ❌ 否 0
OPENSHOCK_API_URL api openshock的URL ❌ 没有 https://api.openshock.app
MCP_SERVER_NAME MCP服务器名称 ❌ 否 openshock mcp服务器
MCP_VERSION 服务器版本 ❌ 否 2.1.0
PORT 监听端口 ❌ 否 8000

健康检查

服务器向提供运行状况检查端点 /health :

curl http://localhost:8000/health

答复:

{
  "status": "healthy"
}

良好安全做法

  • ⚠️ 代币安全:同时保持 OPENSHOCK_API_TOKEN 和 MCP_AUTH_TOKEN 安全,永远不要在版本控制中提交它们
  • 🔑 代币Forts:使用强随机生成的令牌 MCP_AUTH_TOKEN (例如:UUID或32个以上字符的随机字符串)
  • 🔒 HTTPS en生产:在生产环境中始终使用HTTPS/TLS
  • 🎯 配置器SHOCK_LIMIT:定义一个 SHOCK_LIMIT 适合您的安全要求
  • 🔐 网络安全:使用防火墙限制对服务器的网络访问
  • 📊 审计日志记录:记录所有强度调整和身份验证失败,以进行安全审核

故障排除

服务器无法启动

  • 检查 OPENSHOCK_API_TOKEN 定义正确
  • 查看日志 docker-compose logs -f (Docker)或控制台输出(本地)

命令不起作用

  • 检查Shockers ID是否正确
  • 验证OpenShock API令牌是否具有适当的权限
  • 检查日志以查找错误消息

连接问题

  • 确保在配置的端口上可以访问服务器
  • 检查防火墙规则
  • 验证MCP客户端是否配置为使用JSON-RPC 2.0进行HTTP传输

发展

此服务器构建有:

要贡献或报告问题,请使用GitHub存储库。

版本历史

v2.1.0 (当前)

  • 建筑结构变更:使用JSON-RPC 2.0从服务器发送事件(SSE)切换到纯HTTP
  • 使用JSON Direct简化响应管理
  • 改进了与标准JSON-RPC客户端的兼容性
  • 更新文档以仅反映HTTP传输

v2.0.1

  • 安全纠正:重新实现身份验证(v2.0.0存在严重漏洞)
  • 使用中间件的Token Bearer身份验证
  • 所有端点都需要身份验证,除非 /health

v2.0.0版本 (不使用-安全问题)

  • 使用官方MCP Python SDK完全重写
  • BUG批评:身份验证被意外删除
  • 添加HTTP客户端连接池
  • 更好地管理错误
  • 代码完全用英语编写,带有双语文档

v1.0.0

  • 具有自定义MCP实现的初始版本