Conversation
…cause i'll maybe add multiple configs to aim specific type of CTF
- Add BuildKit cache mounts for apt, pip, and Maven (~/.m2) - Consolidate 3 apt-get calls into single layer, 3 pip calls into one - Uncomment honggfuzz build with required deps (libunwind-dev, binutils-dev, libblocksruntime-dev) - Dynamically extract Ghidra version from application.properties, patch pom.xml before Maven build — no more version mismatch - Set PIP_BREAK_SYSTEM_PACKAGES=1 for ensure-prereqs internal pip - Add missing deps: mcp pip package, libc6-i386 (32-bit binaries) - Recreate /var/lib/apt/lists/partial after cleanup for post-build apt usage - Reorder layers by change frequency (scripts last) - Add .dockerignore (exclude .git, workspace, *.md, LICENSE) - Add # syntax=docker/dockerfile:1 for BuildKit features Co-Authored-By: Claude <noreply@anthropic.com>
- Strip Xvfb/fluxbox/x11vnc/noVNC/websockify from entrypoint - Remove ENABLE_GHIDRA_GUI env var and GUI ports from compose - Bind Ghidra headless to 0.0.0.0 instead of 127.0.0.1 - Simplify container to single-purpose headless RE server Co-Authored-By: Claude <noreply@anthropic.com>
- Translate from French to English - Add Claude Desktop and Claude Code MCP configuration sections - Remove all VNC/GUI references (image is headless-only) - Document ghidra-gui as external-host-only option - Add copy-paste JSON snippets for each MCP server - Rename project to re-toolbox Co-Authored-By: Claude <noreply@anthropic.com>
- scripts/mcp/shell-mcp.py: generic shell command execution inside container — exposes all CLI tools via single MCP server - scripts/mcp/python-mcp.py: Python code execution with angr, pwntools, z3, lief, capstone pre-imported - scripts/mcp/fuzz-mcp.py: wraps fuzz-init.sh — scaffold AFL++/ honggfuzz sessions, run smoke tests, triage crashes - scripts/mcp/angr-mcp.py: wraps angr-solve.py — binary CFG overview, symbolic path finding, function listing - configs/base.json: add shell/python/fuzz/angr entries, fix ghidra-gui comment (remove noVNC fiction), use host.docker.internal - .claude/mcp.json: Claude Code MCP config with all 6 servers Co-Authored-By: Claude <noreply@anthropic.com>
- .gitignore: add __pycache__/, *.pyc, .DS_Store, editor swap files, .vscode/, .idea/ — keep .claude/ (project shares mcp.json) - CI: bump GHIDRA_VERSION 11.3.2 -> 12.1.2, GHIDRA_DATE -> 20260605 to match Dockerfile defaults - LICENSE: normalize line endings Co-Authored-By: Claude <noreply@anthropic.com>
…or ghcr free tier...
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5f5788884f
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| server = Server("shell-mcp") | ||
|
|
||
|
|
||
| @server.tool() |
There was a problem hiding this comment.
Use FastMCP for tool-decorated servers
The Dockerfile installs the unpinned stable mcp package, where Server is the low-level server API; that API registers tools via list_tools/call_tool, while @...tool() belongs to the FastMCP-style server. This decorator is evaluated during import and raises AttributeError, and the same pattern is used in the other added MCP bridge scripts, so the configured docker exec ... python3 /opt/tools/scripts/mcp/*-mcp.py commands exit before serving any tools.
Useful? React with 👍 / 👎.
| "shell": { | ||
| "command": "docker", | ||
| "args": [ | ||
| "exec", "-i", "ctf-re", |
There was a problem hiding this comment.
Point MCP configs at the compose container
The compose file names the running container toolbox, but this new project MCP config execs ctf-re for each server. After following the README's docker compose up -d, Docker returns No such container for these commands, so none of the project-level MCP servers can start until the entries use toolbox or the compose container name is changed.
Useful? React with 👍 / 👎.
| server = Server("python-mcp") | ||
|
|
||
| PRELUDE = """ | ||
| import angr, claripy, pwntools |
There was a problem hiding this comment.
Remove the nonexistent pwntools module import
When the Python MCP tool is invoked, this prelude runs before user code; the pwntools pip package is imported as pwn/pwnlib, not as a pwntools module, and line 23 already imports pwn. With the image built from this Dockerfile, every call to the Python tool fails with ModuleNotFoundError before executing the requested snippet.
Useful? React with 👍 / 👎.
No description provided.