portcheck

io.github.roystondwork-dev由 GitHub 帳號 roystondwork-dev 發布v0.11.0更新於 Oct 27, 2026

See which process holds a port, find free ports, and stop a dev server safely.

概覽

AI 產生的概覽

本機 MCP 伺服器,讓助理查看哪個行程佔用 TCP/UDP 埠、尋找可用埠、等待服務就緒,並安全停止開發伺服器。

可以做什麼
  • 檢查埠是否可用;被佔用時回報佔用行程的名稱、PID、使用者、命令列、啟動者,以及發佈該埠的 Docker 或 Podman 容器。
  • 列出本機監聽中的埠,可依行程名稱或埠範圍篩選。
  • 尋找目前可用的埠,透過實際綁定驗證,可限定在某個範圍內。
  • 等待埠開始接受連線,或等待埠變為可用。
  • 依埠或 PID 停止行程:先要求正常結束,5 秒後強制終止。
適用情境
當開發伺服器、資料庫或測試因「address already in use」或 EADDRINUSE 失敗時,可讓助理找出佔用者、釋放埠或改用其他埠。也適合查看本機正在監聽什麼,或等待某個服務啟動完成。
執行需求
以本機 stdio 行程執行,通常透過 npx portcheck-cli 啟動;僅限桌面環境。未宣告驗證、環境變數或標頭。部分行程資訊在權限不足時可能看不到。
安裝前請注意
stop_process 會終止本機行程,執行前應確認目標,可先用 dry_run 預覽;它會拒絕停止系統行程與助理本身,權限不足時也無法停止其他使用者的行程。由容器發佈的埠只會回傳停止指令,不會直接結束。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 portcheck,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

portcheck

See what's using your ports, find free ones, free them up, and check remote hosts.
One static binary for macOS, Linux and Windows.

[CI] [CodeQL] [Coverage] [Release] [OpenSSF Scorecard] [OpenSSF Best Practices] [M8ven Score] [Go Reference] [License: MIT]

[portcheck demo]

Port already in use?

sh
npx portcheck-cli kill 3000

portcheck shows what holds the port and who started it, asks, then stops it gently (and never touches system processes). It's a safer kill-port, with nothing to install first.

Fixes for the error you're seeing: Node.js, Next.js, Vite · Python, Django, Flask · Docker · Rails, Spring Boot, Go, .NET, PHP · macOS · Windows · Linux

Features

Command
🔍portcheck list -lEvery listening socket with its process, PID and user
✅portcheck 3000Is the port free? If not, who holds it? Exit code 0 or 1 for scripts
🆓portcheck free 3000-3999 -n 3Free ports, verified by actually binding them
🛑portcheck kill 8080Graceful SIGTERM, then SIGKILL; refuses PID 1, your shell and system processes
🧹portcheck servers --older-than 1dThe dev servers you forgot: your listening processes with their project and uptime, oldest first; --stop to clean up
📡portcheck scan db.internal -p 5432Rate-limited TCP connect checks of remote hosts. No root needed
⏳portcheck wait db:5432 -t 60sBlock until services accept connections, or until a port is free. Built for CI
▶️portcheck run --port 3000 --next -- npm run devStart a command on a free port ($PORT, {port}); take the next one or stop the holder
🩺portcheck doctorCheck the ports listed in .portcheck.yaml and get a fix for each problem
🖥️portcheckLive, sortable, filterable TUI. Stop processes without leaving it
🌐Browser extensionEdge (and Chrome): which process serves a localhost tab, off when nothing listens, stop it from the popup (guide)
🧩VS Code extension"Port in use" errors in the terminal become one-click fixes; listening ports in the sidebar (guide)
🤖portcheck mcpAI assistants (Claude Code, Cursor, Copilot…) check and free ports themselves (guide)
⌨️RaycastSearch Ports, Check Port, Kill Port and Find Free Port from the Mac launcher
✍️Neovim:Portcheck picker, check/kill/free, and "port in use" in :terminal → stop it
🔌Menu bar / tray appYour listening ports in the macOS menu bar or Windows/Linux tray: stop, open, copy in two clicks
🧠JetBrains pluginIntelliJ IDEA, WebStorm, PyCharm, GoLand…: "port in use" in Run/Debug → Stop it and rerun; a Ports tool window

VS Code extension

When a dev server fails because its port is taken, the extension says who holds it and fixes it: stop it and re-run, or re-run on the next free port.

[portcheck in VS Code: npm run dev fails with EADDRINUSE, the extension names the process holding port 3000, stops it and re-runs the command]

Install Portcheck - Port in Use Fixer from the VS Code Marketplace (search "portcheck" in VS Code) or Open VSX (VSCodium, Cursor, Windsurf). portcheck is built in.

JetBrains plugin

In IntelliJ IDEA, WebStorm, PyCharm, GoLand and the other JetBrains IDEs, when a run configuration fails because its port is taken, a notification names the process and offers Stop it and rerun; the Ports tool window lists every listening port.

▶ Watch the 20-second demo

[portcheck in IntelliJ IDEA: the run fails with "Address already in use", and a notification names the Python process holding port 3000 with Stop Python and rerun]

Install portcheck-jetbrains-<version>.zip from the latest release (Settings → Plugins → ⚙ → Install Plugin from Disk…); it is in review on JetBrains Marketplace (guide).

Browser extension

On every localhost tab, a badge names the process serving it, or says off when nothing is listening; the popup shows who started it and stops it safely.

[The portcheck browser popup for localhost:3000: Running, node with its pid, who started it, its command and user, Stop process, and the ports listening on the machine]

Install Portcheck - Localhost Port Inspector from Microsoft Edge Add-ons, then run portcheck browser install once. For Chrome, Brave and Chromium, load the zip from the latest release (guide).

Highlights

  • Same commands and output on every OS. It replaces lsof -i, netstat -ano, ss -ltnp and kill.
  • Built for scripts. --json follows a versioned schema, exit codes are stable, and results go to stdout while messages go to stderr.
  • Container- and WSL-aware. Ports published by Docker/Podman or forwarded from WSL show the container or distro, and kill tells you how to stop it there instead of killing the proxy.
  • Honest about permissions. Hidden owners are shown as hidden, with a hint on how to see them.
  • A Go library too. See pkg/.

Install

sh
# Homebrew (macOS, Linux)brew install roystondwork-dev/tap/portcheck
# winget (Windows; the package is waiting for Microsoft's review)winget install roystondwork-dev.portcheck
# Scoop (Windows)scoop bucket add portcheck https://github.com/roystondwork-dev/scoop-bucketscoop install portcheck
# npm (any OS): run it without installingnpx portcheck-cli 3000
# PyPI (any OS)pipx install portcheck-tool
# Go 1.26+go install github.com/roystondwork-dev/portcheck/cmd/portcheck@latest

.deb, .rpm, .apk and archives for amd64/arm64 are on the releases page. The checksum file covering every artifact is signed with cosign (keyless), and releases ship SBOMs and SLSA provenance; see verifying downloads.

Quickstart

console
$ portcheck 3000PORT  PROTO  STATUS  PID    PROCESS  USER3000  tcp    in-use  42379  node     alice
$ portcheck kill 3000About to terminate:  PID 42379  node  (port 3000)Proceed? [y/N] yPID    PROCESS  RESULT      DETAIL42379  node     terminated
$ portcheck free 3000-3999 -n 2 -o plainPORT30003001
$ portcheck list -l --json | jq '.data.sockets[] | {port: .localPort, name: .process.name}'

📖 Documentation: https://roystondwork-dev.github.io/portcheck/ (quickstart · guides · CLI reference · permissions by OS · FAQ)

Use as a Go library

go
res, err := inspect.NewSystem().List(ctx, inspect.Filter{Ports: portspec.Single(3000), ListeningOnly: true})if err != nil {	log.Fatal(err)}for _, s := range res.Sockets {	if s.Process != nil { // nil when the owner is hidden from your user		fmt.Println(s.PID, s.Process.Name)	}}

See the library guide for portspec, inspect, freeport, killer, scan, waitfor and containers.

Responsible use

portcheck scan makes ordinary TCP connections and has no stealth features. Only scan hosts and networks you own or are authorized to test.

Contributing

Contributions are welcome! See CONTRIBUTING.md for setup and standards (every change is tested on Linux, macOS and Windows, with a 100% coverage gate on the library), and TASKS.md for the roadmap and status. Please follow the Code of Conduct, and report vulnerabilities privately as described in SECURITY.md.

License

MIT © 2026 Royston D and portcheck contributors

來源:README.md,提交 0b8f56f

工具

5

check_port

Check a port

Check whether ports are free. For each port in use, says which process holds it: name, PID, user, command line, who started it, and the container if Docker or Podman publishes it. Use it first when a server fails with "address already in use" or EADDRINUSE.

輸入參數ports必填proto

find_free_port

Find free ports

Find ports that are free right now, verified by binding them, optionally within a range (e.g. 3000-3999). Use it to start a server on another port instead of stopping what holds one.

輸入參數countrange

list_ports

List listening ports

List the ports listening on this machine, with the process, PID, user and who started it (e.g. npm ← zsh), and the container for ports published by Docker or Podman. Use it to see what's running, or to find a dev server by name (name="node*") or port range.

輸入參數nameportsproto

stop_process

Stop a process

Stop the process listening on a port, or a process by PID: asks it to exit, then kills it after 5 s. Refuses system processes and the assistant itself. Ports published by Docker, Podman or WSL report the command to run instead. Use dry_run to see what would be stopped, and check_port first to tell the user what it is.

輸入參數pidportforcedry_run

wait_for_port

Wait for a port

Wait until a port accepts connections, e.g. until a server or database has finished starting, or with free=true until a port is free again. Returns as soon as it's ready, or fails after timeout_seconds.

輸入參數freehostport必填timeout_seconds

版本歷史

1
  1. v0.11.0最新Oct 25, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分