Command Palette

Search for a command to run...

UnylyUnyly
Browse all

Portfan

FreeNot checked

Summarize and diff nmap XML into prioritized, attackable findings

GitHubEmbed

About

Summarize and diff nmap XML into prioritized, attackable findings

README

PORTFAN

PORTFAN

Summarize and diff nmap XML into prioritized, attackable findings

PyPI CI License: COCL 1.0 Suite

Part of the Cognis Neural Suite.

pip install cognis-portfan
portfan scan .            # → prioritized findings in seconds

🔎 Example output

Real, reproducible output from the tool — runs offline:

$ portfan-emit --version
portfan 0.1.0
$ portfan-emit --help
usage: portfan [-h] [--version] [--format {table,json}] {triage,diff} ...

Summarize and diff nmap XML into prioritized triage findings (defensive
analysis only — no scanning, no network).

positional arguments:
  {triage,diff}
    triage              Summarize one nmap XML scan.
    diff                Diff two nmap XML scans.

options:
  -h, --help            show this help message and exit
  --version             show program's version number and exit
  --format {table,json}
                        Output format (default: table).

Blocks above are real portfan output — reproduce them from a clone.

Sample result format (illustrative values — run on your own data for real findings):

{
"findings": [
    {
        "id": "1234567890",
        "title": "Suspicious Activity Detected",
        "description": "Anomalous network traffic detected from IP 192.168.1.100",
        "severity": "high",
        "created": "2023-02-20T14:30:00Z"
    }
]
}

Usage — step by step

  1. Install the CLI (Python 3.9+):

    pip install git+https://github.com/cognis-digital/portfan.git
    
  2. Run an nmap scan that emits XML, then triage it into prioritized findings:

    nmap -oX scan.xml -sV target.example.com
    portfan triage scan.xml
    
  3. Get machine-readable output for dashboards or tickets:

    portfan --format json triage scan.xml > findings.json
    
  4. Diff a new scan against a baseline to surface newly exposed services:

    portfan diff baseline.xml scan.xml
    
  5. Track exposure drift in CI:

    - name: port exposure diff
      run: |
        pip install git+https://github.com/cognis-digital/portfan.git
        portfan --format json diff baseline.xml scan.xml
    

Contents

Why portfan?

turn raw scans into a triage list

portfan is single-purpose, scriptable, and self-hostable: point it at a target, get prioritized results in the format your workflow already speaks (table · JSON · SARIF), gate CI on it, and let agents drive it over MCP.

Features

  • ✅ Score Service
  • ✅ Parse Nmap Xml
  • ✅ Summarize
  • ✅ Diff Reports
  • ✅ Runs on Linux/macOS/Windows · Docker · devcontainer
  • ✅ Ports in Python, JavaScript, Go, and Rust (ports/)

Quick start

pip install cognis-portfan
portfan --version
portfan scan .                       # scan current project
portfan scan . --format json         # machine-readable
portfan scan . --fail-on high        # CI gate (non-zero exit)

Example

$ portfan scan .
  [HIGH    ] POR-001  example finding             (./src/app.py)
  [MEDIUM  ] POR-002  another signal              (./config.yaml)

  2 findings · risk score 5 · 38ms

Architecture

flowchart LR
  IN[capture / scan] --> P[portfan<br/>parse + map]
  P --> OUT[report]

Use it from any AI stack

portfan is interoperable with every popular way of using AI:

  • MCP serverportfan mcp (Claude Desktop, Cursor, Cognis.Studio, uncensored-fleet)
  • OpenAI-compatible / JSON — pipe portfan scan . --format json into any agent or LLM
  • LangChain · CrewAI · AutoGen · LlamaIndex — wrap the CLI/JSON as a tool in one line
  • CI / scripts — exit codes + SARIF for non-AI pipelines

How it compares

Cognis portfan nmap
Self-hostable, no account varies
Single command, zero config ⚠️
JSON + SARIF for CI varies
MCP-native (AI agents)
Polyglot ports (JS/Go/Rust)
Open license ✅ COCL varies

Built in the spirit of nmap, re-framed the Cognis way. Missing a credit? Open a PR.

Integrations

Pipes into your stack: SARIF for code-scanning, JSON for anything, an MCP server (portfan mcp) for AI agents, and a webhook forwarder for SIEM/Slack/Jira. See docs/INTEGRATIONS.md.

Install — every way, every platform

pip install "git+https://github.com/cognis-digital/portfan.git"    # pip (works today)
pipx install "git+https://github.com/cognis-digital/portfan.git"   # isolated CLI
uv tool install "git+https://github.com/cognis-digital/portfan.git" # uv
pip install cognis-portfan                                          # PyPI (when published)
docker run --rm ghcr.io/cognis-digital/portfan:latest --help        # Docker
brew install cognis-digital/tap/portfan                             # Homebrew tap
curl -fsSL https://raw.githubusercontent.com/cognis-digital/portfan/main/install.sh | sh
Linux macOS Windows Docker Cloud
scripts/setup-linux.sh scripts/setup-macos.sh scripts/setup-windows.ps1 docker run ghcr.io/cognis-digital/portfan DEPLOY.md (AWS/Azure/GCP/k8s)

Related Cognis tools

  • subhunt — Aggregate & dedupe subdomain enumeration from multiple sources
  • dirsight — Analyze web content-discovery output (ffuf/gobuster) into ranked endpoints
  • jwtinspect — Decode JWTs and lint for alg=none, weak secrets, and missing claims
  • corsaudit — Detect permissive/misconfigured CORS from headers or a config
  • headerscan — Grade HTTP security headers (CSP/HSTS/XFO) A-F from a response dump
  • ssltriage — Grade TLS config (protocols/ciphers/expiry) from openssl/sslyze output

Explore the suite → 🗂️ all 170+ tools · ⭐ awesome-cognis · 🔗 cognis-sources · 🤖 uncensored-fleet · 🧠 engram

Contributing

PRs, new rules, and demo scenarios are welcome under the collaboration-pull model — see CONTRIBUTING.md and SECURITY.md.

⭐ If portfan saved you time, star it — it genuinely helps others find it.

Interoperability

{} composes with the 300+ tool Cognis suite — JSON in/out and a shared OpenAI-compatible /v1 backbone. See INTEROP.md for the suite map, composition patterns, and reference stacks.

License

Source-available under the Cognis Open Collaboration License (COCL) v1.0 — free for personal, internal-evaluation, research, and educational use; commercial / production use requires a license ([email protected]). See LICENSE.


Cognis Digital · one of 170+ tools in the Cognis Neural Suite · Making Tomorrow Better Today

from github.com/cognis-digital/portfan

Installing Portfan

This server has no published package — it is built from source. Open the repository and follow its README.

▸ github.com/cognis-digital/portfan

FAQ

Is Portfan MCP free?

Yes, Portfan MCP is free — one-click install via Unyly at no cost.

Does Portfan need an API key?

No, Portfan runs without API keys or environment variables.

Is Portfan hosted or self-hosted?

Self-hosted: the server runs locally on your machine via the install command above.

How do I install Portfan in Claude Desktop, Claude Code or Cursor?

Open Portfan on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.

Related MCPs

Compare Portfan with

Not sure what to pick?

Find your stack in 60 seconds

Author?

Embed badge for your README

Browse similar

All development MCPs