Skip to content

Enhance Dockerfile, add MCP bridges, and update documentation#1

Merged
mitsuakki merged 12 commits into
mainfrom
dev
Jul 2, 2026
Merged

Enhance Dockerfile, add MCP bridges, and update documentation#1
mitsuakki merged 12 commits into
mainfrom
dev

Conversation

@mitsuakki

Copy link
Copy Markdown
Owner

No description provided.

mitsuakki and others added 12 commits July 1, 2026 16:27
…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>
@mitsuakki
mitsuakki merged commit 9fde77f into main Jul 2, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread scripts/mcp/shell-mcp.py
server = Server("shell-mcp")


@server.tool()

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 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 👍 / 👎.

Comment thread .claude/mcp.json
"shell": {
"command": "docker",
"args": [
"exec", "-i", "ctf-re",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment thread scripts/mcp/python-mcp.py
server = Server("python-mcp")

PRELUDE = """
import angr, claripy, pwntools

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant