CyberEdu MCP服务器
这是CyberEdu CTF平台的官方模型上下文协议(MCP)服务器(https://cyber-edu.co / https://cyberedu.ro).此服务器自动发现并公开来自 CyberEduClient 作为MCP工具,通过MCP兼容的客户端可以轻松地与CyberEdu平台进行交互。
特性
- 动态工具发现:自动发现来自的所有公共方法
CyberEduClient并将其作为MCP工具公开 - 新方法的零配置:当添加新方法时
CyberEduClient,它们自动成为MCP工具,无需任何代码更改 - 类型安全:根据方法签名和类型提示自动生成JSON模式
- 错误处理:具有详细错误消息的全面错误处理
CyberEDU平台概述
CyberEDU是一个网络安全培训平台,提供动手实验室、现实模拟和竞争环境。它专为企业安全团队、学术机构、政府机构和 个人学习者。
岩心描述
CyberEDU是一个全面的网络安全培训平台,提供动手实验室、现实模拟和竞争环境。它专为企业安全团队、学术机构和政府设计 希望通过现实世界场景培养实用网络安全技能的机构和个人学习者。
关键差异
- 实践方法:用户攻击和防御真实基础设施(而不仅仅是视频或理论)的交互式网络范围
- MITRE ATT&CK映射:使用真实的恶意软件样本(安全包含)将场景映射到MITRE ATT-CCK
- 更好的记忆力:与被动学习相比,技能记忆力提高了3.5倍
- 真实世界场景:模拟实际的对手技术和攻击模式
平台组件
- Cyber Range——具有复杂网络拓扑的企业级网络战仿真
- 网络实验室——650多个动手实验室,映射到MITRE ATT&CK,基于浏览器和自动评分
- 锦标赛套件——游戏化比赛(CTF、红蓝、战争游戏)
关键统计数据
- 全球30000多名活跃用户
- 650多个实践实验室
- 1400多个模拟配置文件
- 举办了500多场活动
- 服务的国家超过45个
- 250+小时的培训内容
目标受众
- 学生:以职业为中心的培训,包括CTF挑战和排行榜
- 学术界:LMS集成和自动评分课程
- 企业:技术招聘评估、团队培训、合规性映射
- 政府:气隙部署、OT/SCADA模拟、关键基础设施防御
部署选项
- 云托管SaaS(基于浏览器,无需安装)
- 内部部署(VMware、Proxmox、裸机)
- 用于机密环境的气隙部署
安装
克隆存储库
这 cyberedu-client 作为git子模块包含。使用克隆 --recursive 获取一切:
git clone --recursive https://github.com/CyberEDU-Cyber-Range/cyberedu-mcp.git
cd cyberedu-mcp如果你已经克隆了 --recursive,初始化子模块:
git submodule update --init --recursive安装程序包
安装两个软件包(客户端和MCP服务器):
macOS/Linux:
python3 -m venv venv
source venv/bin/activate
pip install -e ".[local]" # Installs with local cyberedu-client submodule
# Or for development:
# pip install -e ".[local,dev]"Windows(PowerShell):
python -m venv venv
.\venv\Scripts\Activate.ps1
pip install -e ".[local]" # Installs with local cyberedu-client submoduleWindows(命令提示符):
python -m venv venv
venv\Scripts\activate.bat
pip install -e ".[local]"替代:单独安装软件包: ``bash pip install -e ./cyberedu-client pip install -e . ``配置
会话持久性(推荐)
MCP服务器会自动将会话凭据保存到磁盘。这意味着:
- 设置cookie一次 使用
cyberedu_set_session_cookie工具,它将在MCP会话中被记住 - 不需要环境变量 在第一次身份验证之后
- 租户选择保留 当你更换租户时
会话文件位置:
- macOS/Linux:
~/.cyberedu-mcp/session.json - 窗户:
%USERPROFILE%\.cyberedu-mcp\session.json(例如。,C:\Users\YourName\.cyberedu-mcp\session.json)
出于Unix系统的安全考虑,该文件具有受限权限(仅限所有者读/写)。
环境变量(备选)
您还可以使用环境变量。服务器按以下优先级顺序加载凭据:
- 来自磁盘的持久凭据(最高优先级)
- 环境变量
- 默认值
环境变量:
CYBEREDU_SESSION_COOKIE:您的CyberEdu会话cookie
- 登录后,从浏览器的开发人员工具获取此信息https://app.cyber-edu.co - 寻找 cyberedu_session cookie值
CYBEREDU_TENANT:您的租户标识符(可选,默认为“cyberedu”)
获取会话Cookie
铬/边缘:
- 打开开发人员工具(F12)
- 转到应用程序/存储选项卡
- 导航到Cookie→
https://app.cyber-edu.co - 找到
cyberedu_session并复制其值
火狐浏览器:
- 打开开发人员工具(F12)
- 转到存储选项卡
- 导航到Cookie→
https://app.cyber-edu.co - 找到
cyberedu_session并复制其值
用法
运行MCP服务器
服务器可以直接运行(用于测试):
macOS/Linux:
python3 -m venv venv
source venv/bin/activate
python -m cyberedu_mcp窗户:
python -m venv venv
.\venv\Scripts\Activate.ps1
python -m cyberedu_mcpMCP客户端配置
要将此服务器与MCP客户端(Cursor IDE或Claude Desktop)一起使用,请将其添加到MCP配置中。
重要:使用venv中Python可执行文件的完整路径。MCP客户端在外部运行服务器,无法访问已激活的虚拟环境。
macOS/Linux示例
光标IDE (~/.cursor/mcp.json):
{
"mcpServers": {
"cyberedu": {
"command": "/path/to/cyberedu-mcp/venv/bin/python3",
"args": ["-m", "cyberedu_mcp"]
}
}
}克劳德桌面版 (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"cyberedu": {
"command": "/path/to/cyberedu-mcp/venv/bin/python3",
"args": ["-m", "cyberedu_mcp"]
}
}
}Windows示例
光标IDE (%APPDATA%\Cursor\User\mcp.json 或 C:\Users\YourName\.cursor\mcp.json):
{
"mcpServers": {
"cyberedu": {
"command": "C:\\path\\to\\cyberedu-mcp\\venv\\Scripts\\python.exe",
"args": ["-m", "cyberedu_mcp"]
}
}
}克劳德桌面版 (%APPDATA%\Claude\claude_desktop_config.json):
{
"mcpServers": {
"cyberedu": {
"command": "C:\\path\\to\\cyberedu-mcp\\venv\\Scripts\\python.exe",
"args": ["-m", "cyberedu_mcp"]
}
}
}跨平台示例
VS Code (.vscode/mcp.json 在您的工作空间中):
{
"servers": {
"cyberedu": {
"type": "stdio",
"command": "/path/to/cyberedu-mcp/venv/bin/python3",
"args": ["-m", "cyberedu_mcp"]
}
}
}*Windows:使用 C:\\path\\to\\cyberedu-mcp\\venv\\Scripts\\python.exe*
反重力/风帆 (mcp_config.json -通过MCP存储访问→ 管理MCP服务器→ 查看原始配置):
{
"mcpServers": {
"cyberedu": {
"command": "/path/to/cyberedu-mcp/venv/bin/python3",
"args": ["-m", "cyberedu_mcp"],
"env": {}
}
}
}*Windows:使用 C:\\path\\to\\cyberedu-mcp\\venv\\Scripts\\python.exe*
备注:会话凭据将持久化到 ~/.cyberedu-mcp/session.json,因此在通过 cyberedu_set_session_cookie 工具。
可用工具
服务器自动公开来自的所有公共方法 CyberEduClient 作为MCP工具。工具前缀为 cyberedu_ 以避免命名冲突。
会话管理工具
这些工具允许您在不重新启动MCP服务器的情况下管理身份验证和租户切换。凭据将自动持久化到 ~/.cyberedu-mcp/session.json:
cyberedu_get_session_status-检查是否经过身份验证,选择了哪个租户,以及是否保留了凭据cyberedu_set_session_cookie-设置/更新用于身份验证的会话cookie(持久到磁盘)cyberedu_switch_tenant-切换到其他租户/组织(持久到磁盘)cyberedu_clear_session-从磁盘和内存中清除已存储的凭据
示例用法:
- 检查状态:“我的CyberEdu会话状态如何?”
- 设置cookie:“将我的CyberEdu会话cookie设置为
eyJ...“(只需要一次,坚持!) - 切换租户:“切换到租户
myorg" - 清除凭据:“清除我的CyberEdu会话”
身份验证和用户工具
cyberedu_check_auth-验证身份验证并获取用户信息cyberedu_get_user_info-获取完整的用户信息cyberedu_list_tenants-列出所有可用租户cyberedu_get_current_tenant_info-获取当前租户信息cyberedu_get_user-按ID获取用户信息
挑战工具(存档)
cyberedu_list_challenges-列出所有挑战(带可选过滤器)cyberedu_get_challenge-获取挑战详情cyberedu_get_challenge_difficulties-获取可用的难度级别cyberedu_get_challenge_tags-获取可用的挑战标签cyberedu_subscribe_to_challenge-订阅挑战
标记和提交工具(存档)
cyberedu_get_flag-获取标志/问题信息cyberedu_submit_flag-提交标记/答案
文件工具(存档)
cyberedu_download_file-下载挑战文件(使用可选save_path直接保存到磁盘的参数)
维修工具(存档)
cyberedu_start_service-启动挑战服务cyberedu_get_service_status-获取服务状态cyberedu_extend_service-延长服务时间cyberedu_restart_service-重新启动服务
竞赛工具
cyberedu_list_contests-列出所有可用的竞赛cyberedu_get_contest-获取比赛详情cyberedu_get_contest_ranks-获取比赛排行榜cyberedu_get_contest_challenge-在比赛中获取挑战细节cyberedu_subscribe_to_contest_challenge-订阅竞赛挑战
比赛标志和提交工具
cyberedu_get_contest_flag-在比赛中获取旗帜信息cyberedu_submit_contest_flag-在比赛中提交旗帜
竞赛文件工具
cyberedu_download_contest_file-从竞赛挑战中下载文件(使用可选save_path直接保存到磁盘的参数)
竞赛服务工具
cyberedu_start_contest_service-在比赛中启动服务cyberedu_get_contest_service_status-在比赛中获取服务状态cyberedu_extend_contest_service-延长比赛中的服务时间cyberedu_restart_contest_service-在比赛中重新启动服务
使用示例和提示
与CyberEdu MCP服务器交互的示例提示:
会话和身份验证
"Check my CyberEdu session status"
"Set my CyberEdu session cookie to eyJpdiI6Ik..."
"Switch to tenant 'mycompany'"挑战(存档)
"List all web security challenges"
"Show me the easiest challenges from tenant unbreakable/rocsc"
"Show me hard difficulty forensics challenges"
"Get details for challenge abc123"
"Subscribe me to this challenge and start the service"
"Download challenge files to ./downloads/"
"Submit flag 'CTF{i-like-web-security-ctf-challenges}' for this challenge"竞赛
"List available CTF contests"
"Show leaderboard for contest 'defcamp ctf quals 2025'"
"Get challenge abc123 from contest 'rocsc26-quals'"
"Start service for this contest challenge"
"Submit flag 'FLAG{solved}' for contest challenge"工作流示例
1. "List easy web challenges from tenant rocsc"
2. "Subscribe to 'why-xor' and start the service"
3. "Download the challenge files"
4. [Solve...]
5. "Submit flag 'CTF{xor-is-not-safe}'"建筑
动态工具发现
服务器使用Python inspect 模块,用于自动从中发现所有公共方法 CyberEduClient 类。对于每种方法:
- 方法发现:扫描类中的公共方法(不包括私有方法和助手)
- 模式生成:根据方法签名和类型提示自动生成JSON模式
- 工具注册:使用适当的元数据将每个方法注册为MCP工具
工具注册表
这 ToolRegistry 类提供了一个灵活的工具管理系统:
- 自动发现:使用自省从类中发现方法
- 手动注册:允许手动注册自定义方法
- 类别式组织:自动对方法进行分类(身份验证、挑战、竞赛、服务等)
可扩展性
要添加新功能,请执行以下操作:
- 向CyberEduClient添加方法:只需将新的公共方法添加到 CyberEduClient 类
- 自动曝光:MCP服务器将自动发现并公开新方法
- 无MCP代码更改:无需更改MCP服务器代码
对于不直接映射到客户端方法的自定义工具:
from cyberedu_mcp.tool_registry import ToolRegistry
registry = ToolRegistry()
def custom_tool(param1: str, param2: int) -> dict:
"""Custom tool description."""
return {"result": f"{param1}: {param2}"}
registry.register_method(
name="custom_tool",
method=custom_tool,
description="A custom tool",
category="custom"
)错误处理
服务器提供全面的错误处理:
- HTTP错误:返回详细的HTTP错误信息,包括状态代码和响应正文
- 验证错误:对于缺失或无效的参数,返回明确的错误消息
- 客户端错误:返回所有异常的结构化错误信息
文档
其他文件可在 docs/ 文件夹:
- docs/index.md -文档概述和快速参考
- docs/architecture.md -服务器设计、工具发现和会话管理
- docs/extending.md -如何添加自定义工具和修改行为
许可证
麻省理工学院
