CTFd MCP 服务端实现

使用说明内容(Markdown格式)

  1. 项目简介
  • 该仓库实现了一个面向 CTFd 的 MCP 服务器,能够将 CTFd 的挑战、挑战详情、提交旗帜、以及容器相关的功能暴露为 MCP 的资源和工具,供大模型客户端通过标准的 MCP 协议进行查询与操作。
  1. 主要功能点
  • 资源暴露:提供 challenge 的 Markdown 快照资源,方便 LLM 客户端渲染挑战描述、附件等信息。
  • 工具暴露:实现以下可由 MCP 客户端调用的后端操作
    • list_challenges(category?, only_unsolved?)
    • challenge_details(challenge_id)
    • submit_flag(challenge_id, flag)
    • start_container(challenge_id)
    • stop_container(container_id?, challenge_id?)
  • 容器/实例支持:
    • dynamic_docker(ctfd-whale): 通过 /api/v1/containers 启动/停止容器
    • dynamic_check_docker(ctfd-owl): 通过 /plugins/ctfd-owl/container 启动/停止容器
    • k8s(Kubernetes): 通过 /api/v1/k8s/* 系列接口管理实例
  • 安全与会话管理:结合 CTFd 的令牌、会话 cookie 与 CSRF 令牌策略,提供 CSRF 刷新、令牌重试、重登录等容错处理。
  • 错误映射:将 CTFd 客户端错误映射为 MCP 能理解的错误描述,便于 MCP 客户端呈现友好信息。
  • 资源格式化:/challenges 资源以 Markdown 格式渲染,便于直接展示给用户或在对话中显示。
  1. 安装步骤
  • 环境要求:Python 3.13+
  • 安装/部署方式通常有两种:
    • 使用 uvx 直接从 PyPI 启动:uvx ctfd-mcp
    • 从源码运行(开发模式):uvx --from . ctfd-mcp
  • 依赖与构建通常会自动处理,请确保环境中已有 Python、网络访问权限以及 CTFd 实例可访问。
  1. 服务器配置(MCP 客户端配置说明) 下面的配置用于 MCP 客户端在启动时链接到此 MCP 服务器。配置信息以 json 形式给出,包含服务器名称、启动命令及参数等。请将示例中的占位值替换为实际环境信息。该客户端不需要在此处进行配置说明,只需要服务器提供的启动参数,帮助 MCP 客户端正确连接与调用。

{ "mcpServers": { "ctfd-mcp": { "command": "uvx", "args": ["ctfd-mcp"], "env": { "CTFD_URL": "https://ctfd.example.com", "CTFD_TOKEN": "your_user_token" } // 说明: // - 命令: 启动 MCP 服务器的主命令 // - 参数: 启动参数,通常指向仓库中的 MCP 服务实现 // - env: 环境变量,用于连接目标 CTFd 实例。CTFD_TOKEN 使用普通用户令牌,或使用其他认证方式(如 CTFD_SESSION、CTFD_USERNAME/CTFD_PASSWORD 等),具体以服务器实现的认证策略为准。 } } }

  1. 基本使用方法
  • 启动服务器
    • 使用部署脚本或命令启动 ctfd-mcp 服务器(如上配置所示的命令组合)。
  • 客户端交互
    • MCP 客户端通过 JSON-RPC 方式向服务器请求资源、执行工具等。
    • 常见操作包括查询可见挑战、获取挑战详情、提交旗帜、以及启动/停止挑战对应的容器实例。
  • 运行模式
    • 服务器默认支持 stdio 等传输模式,并通过 FastMCP 框架处理请求与响应。
  • 排错与日志
    • 如遇认证、CSRF、网络调用等错误,服务器会通过统一的错误格式返回给客户端,便于诊断。

服务器信息