ctfd-mcp 服务端(MCP后端)

使用说明(Markdown 格式)

  • 项目简介

    • ctfd-mcp 是一个基于 MCP 标准的服务端实现,连接到 CTFd 实例,向 MCP 客户端提供对挑战列表、挑战详情、提交旗帜、以及统一的容器管理接口等能力。通过 FastMCP 框架实现对客户端请求的分发、错误映射与会话管理,支持多种传输模式。
  • 主要功能点

    • 资源暴露:提供单挑战的可读信息(如描述、分类、分值、附件等)的资源接口。
    • 工具执行:提供统一的容器/实例管理相关操作,如启动与停止挑战相关的计算资源(动态 Docker、K8s、ctfd-owl 等)等。
    • 会话与鉴权处理:内部管理对 CTFD 的用户凭证、CSRF 令牌等,尽量在请求失败时自动重试与刷新。
    • JSON-RPC 交互:服务器通过 MCP 框架处理 JSON-RPC 形式的请求与响应,向 LLM 客户端返回结构化数据。
    • 兼容性与扩展:设计考虑对不同后端部署(ctfd-docker、ctfd-owl、k8s 等)的统一包装,方便未来扩展。
  • 安装步骤

    • 确保运行环境为 Python 3.13 或以上。
    • 安装依赖(示例,实际依赖请以项目发布的依赖清单为准):安装 MCP 框架及所需网络请求库,例如 mcp、httpx、python-dotenv。
    • 获取代码:将仓库克隆到本地或以合适方式部署到服务器。
    • 安装并配置依赖后,在服务器环境变量中配置 CTFd 实例信息,例如 CTFD_URL、CTFD_TOKEN/CTFD_SESSION/CTFD_USERNAME+CTFD_PASSWORD 等。
    • 启动服务器:使用包提供的入口命令 ctfd-mcp(控制台脚本),或按需要以 stdio、SSE、WebSocket 等传输方式启动。
  • 服务器配置(JSON 结构,供 MCP 客户端了解如何连接服务器;MCP 客户端通常需要此信息来建立连接。以下为示意信息,具体字段以实际实现为准) { "server_name": "ctfd-mcp", "command": "ctfd-mcp", "args": [ "stdio" // 默认传输模式,表示通过标准输入/输出通信 ], "transport_defaults": "stdio(标准输入/输出,兼容大多数简易运行环境)", "notes": "若需通过网络传输,请调整 args/配置以使用 SSE 或 WebSocket 等传输模式;客户端将相应配置以建立连接。" }

  • 基本使用方法

    • 启动后,MCP 客户端通过 JSON-RPC 方式向服务器发起请求,例如查询挑战列表、获取挑战详情、提交旗帜、启动/停止容器等操作。
    • 客户端可根据返回的数据进行下一步处理,LLM 可以将返回的数据用于上下文构建、工具调用等场景。
  • 重要注意事项

    • 服务器需要访问 CTFD 实例,且对凭证的获取和 CSRF 处理有一定容错策略,实际部署时请确保凭证有效且网络通畅。
    • 不同 CTFD 部署(如 dynamic_docker、dynamic_k8s、ctfd-owl)在容器启动、停止等行为上实现不同的后端逻辑,服务器内部对这些类型进行了适配。

服务器信息