list_challengesLABSCO SUMMARY
The CTFd tab, minus the tab.
It runs at user scope, so reading a challenge, bringing its container up, trying a flag and shutting the container down again all happen without an admin token in play. The container start auto-detects which CTFd deployment style the event uses, which is the part that differs from event to event.
What it is
A CTFd client with a regular player's permissions: it lists visible challenges, reads their details and attachments, starts and stops dynamic containers, and submits flags.
What you get
- Visible challenges listed, filtered by category or to the unsolved ones
- Full challenge detail: description as HTML and plain text, metadata, attachment URLs, solved status
- Flag submission, returning the platform's own status and message
- Dynamic instances started, with dynamic_docker, ctfd-owl and k8s deployments auto-detected
- Instances stopped again by container or challenge ID
Requirements
Python 3.13 managed by uv, CTFD_URL, and one auth method: CTFD_TOKEN (a user token, not an admin one), or a copied browser session cookie if the event has tokens disabled. A CSRF token is needed only if the ctfd-owl plugin enforces CSRF. Runs with uvx ctfd-mcp.
Setup effort
One command — uvx ctfd-mcp
USE CASES
Picking what to work on next
List the unsolved challenges in a category rather than scrolling the board.
Reading a challenge and getting its files
The detail call returns the description as plain text alongside the HTML, plus the attachment URLs.
Bringing up the instance for a challenge
One call starts it; the server works out whether the event runs dynamic_docker, ctfd-owl or k8s.
Submitting a flag you have found
The reply is the platform's own status and message, so a wrong-format flag is obvious immediately.
Freeing your instance quota
Stop the container by ID when you move on, then check what is still listed as running.
5 tools
Listed in project docs. Your client may show a different list.
challenge_detailssubmit_flagstart_containerstop_containerBEFORE YOU INSTALL
What to know first
Tools you get
5 tools named in the project's documentation.
Requires
- uvx on PATH
- Python 3.13
Optional
- CTFD_TOKEN in your environment
- CTFD_USERNAME in your environment
- CTFD_PASSWORD in your environment
- CTFD_SESSION in your environment
- CTFD_CSRF_TOKEN in your environment
Where it runs
All 3 documented clients run the server on your machine.
INSTALLATION
Connect your client
Server setup
uvx ctfd-mcpMCP Clients
Cursor, Claude Desktop
{
"mcpServers": {
"ctfd-mcp": {
"command": "uvx",
"args": [
"ctfd-mcp"
],
"env": {
"CTFD_URL": "<YOUR_CTFD_URL>",
"CTFD_TOKEN": "<YOUR_CTFD_TOKEN>"
}
}
}
}The configuration on this page does not set CTFD_USERNAME, CTFD_PASSWORD, CTFD_SESSION and CTFD_CSRF_TOKEN; the project's instructions put them in a .env file. To supply them without depending on where the server looks for that file, use the block's "env" section.
Codex
[mcp_servers.ctfd-mcp]
command = "uvx"
args = ["ctfd-mcp"]
[mcp_servers.ctfd-mcp.env]
CTFD_URL = "<YOUR_CTFD_URL>"
CTFD_TOKEN = "<YOUR_CTFD_TOKEN>"