This repository now contains multiple APIs that can be run together.
- OneForAll subdomain API
- Subfinder API
- PySSL API
- Nmap Security Intelligence API
- OpenSSL TLS Profile API
- OneForAll API: 8002
- Subfinder API: 8085
- PySSL API: 8000
- Nmap API: 8010
- OpenSSL API: 8020
Run from monorepo root:
python3 start_monorepo_servers.pyWhat this does:
- Starts OneForAll API
- Starts Subfinder API
- Starts PySSL API
- Starts Nmap API
- Starts OpenSSL API
- Detects busy ports and automatically reassigns to free ports
- Injects runtime env vars for Subfinder so it can reach OneForAll
Press Ctrl+C to stop all services.
Use setup mode to choose ports interactively and optionally persist env values:
python3 start_monorepo_servers.py --setupSetup mode asks:
- OneForAll port
- Subfinder port
- PySSL port
- Nmap port
- OpenSSL port
- Whether to persist Subfinder env settings into subfinder-api/.env
If you want the script to save the resolved URL and listen address:
python3 start_monorepo_servers.py --persist-envKeys written or updated in subfinder-api/.env:
- ONEFORALL_API_URL
- SUBFINDER_API_ADDR
If you do not use this flag, env values are applied only at runtime for that launch.
If you prefer to run each service yourself:
cd one-for-all-subdomains
python3 run_api.py --port 8002cd subfinder-api
ONEFORALL_API_URL=http://127.0.0.1:8002 SUBFINDER_API_ADDR=:8085 go run .cd pyssl-api
python3 -m uvicorn main:app --host 0.0.0.0 --port 8001cd nmap-api
python3 -m uvicorn main:app --host 0.0.0.0 --port 8010 --reloadcd openssl-api
python3 -m uvicorn main:app --host 0.0.0.0 --port 8020 --reloadYou can pass explicit preferred ports to launcher:
python3 start_monorepo_servers.py --oneforall-port 8002 --subfinder-port 8085 --pyssl-port 8000Include Nmap explicitly if desired:
python3 start_monorepo_servers.py --oneforall-port 8002 --subfinder-port 8085 --pyssl-port 8000 --nmap-port 8010Include OpenSSL explicitly if desired:
python3 start_monorepo_servers.py --oneforall-port 8002 --subfinder-port 8085 --pyssl-port 8000 --nmap-port 8010 --openssl-port 8020If a preferred port is busy, the launcher logs a warning and picks the next available port.
The launcher prints colorized logs:
- Green: info
- Yellow: warnings
- Red: errors
- Colored prefixes for each service stream
Disable colors by setting NO_COLOR=1.
Yes, the launcher now handles service-specific Python virtualenvs.
Resolution order per Python service:
- Explicit CLI override (if provided)
- Service local
.venv/bin/python - Service local
venv/bin/python - Fallback to
--python-cmd(defaultpython3)
Override examples:
python3 start_monorepo_servers.py \
--oneforall-python /abs/path/to/oneforall/.venv/bin/python \
--pyssl-python /abs/path/to/pyssl/venv/bin/python \
--nmap-python /abs/path/to/nmap-api/.venv/bin/python \
--openssl-python /abs/path/to/openssl-api/.venv/bin/pythonThis keeps dependencies isolated between one-for-all-subdomains, pyssl-api, nmap-api, and openssl-api while still allowing a fallback when no venv exists.
For Azure Ubuntu VMs, the easiest production-style deployment is Docker Compose.
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo \"$VERSION_CODENAME\") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo usermod -aG docker $USERLog out/in once after usermod.
From monorepo root:
cp .env.docker.example .env
docker compose up -d --buildThis starts:
oneforall-api(8002)subfinder-api(8085)pyssl-api(8000)nmap-api(8010)openssl-api(8020)mcp-monorepo-server(internal MCP bridge service)
docker compose ps
docker compose logs -f nmap-apidocker compose downNotes:
- Service Dockerfiles are in each service directory.
nmap-apicontainer includes thenmapCLI package.- Host ports are configurable via
.envusing.env.docker.exampleas the template.
The monorepo now includes an MCP server so external AI agents can call backend APIs through a single tool interface.
Location:
mcp-monorepo-server/
Quick start:
cd mcp-monorepo-server
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python server.pyClient config templates:
- Claude Desktop / Cursor templates:
mcp-monorepo-server/config-examples/ - VS Code workspace MCP config:
.vscode/mcp.json
Common tools exposed by this MCP server:
nmap_security_intelligencenmap_ethical_scanopenssl_profilepyssl_analysissubfinder_combinedsubfinder_onlyassetfinder_onlymonorepo_api_request(generic request wrapper)
By default the server targets localhost service ports from this monorepo launcher. Override with env vars if needed:
ONEFORALL_API_URLSUBFINDER_API_URLPYSSL_API_URLNMAP_API_URLOPENSSL_API_URL