portcheck
This MCP server exposes portcheck's local port inspection and management tools.
Check whether specified TCP/UDP ports are free or in use, including process, PID, user, command, and container details.
Find available ports, optionally within a range and for a requested count.
List listening ports, filtered by process name, port range/list, or protocol.
Stop a process by PID or listening port, with dry-run and force options, while refusing system processes and the assistant itself.
Wait for a port to accept connections or become free, with configurable host and timeout.
Browser extension for Brave that shows which process serves a localhost tab, indicates when nothing is listening, and lets users stop the process from the popup.
Detects ports published by Docker containers, shows the container or distro, and advises stopping it in Docker rather than killing the port-forwarding proxy.
JetBrains plugin support for GoLand: detects port conflicts in run configurations, names the process, offers stop-and-rerun, and lists listening ports in a Ports tool window.
JetBrains plugin support for IntelliJ IDEA: detects port conflicts in run configurations, names the process, offers stop-and-rerun, and lists listening ports in a Ports tool window.
Provides a JetBrains IDE plugin that turns port-in-use run failures into a "Stop it and rerun" action and adds a Ports tool window listing listening ports.
Provides a Neovim plugin with a :Portcheck picker to check, kill, and free ports, and to stop processes holding ports used in :terminal.
Detects ports published by Podman containers, shows the container details, and advises stopping it in Podman rather than killing the port-forwarding proxy.
JetBrains plugin support for PyCharm: detects port conflicts in run configurations, names the process, offers stop-and-rerun, and lists listening ports in a Ports tool window.
Provides Raycast commands to search listening ports, check a port, kill a port, and find free ports from the macOS launcher.
VS Code-compatible extension available via Open VSX for VSCodium that turns "port in use" terminal errors into one-click fixes and lists listening ports in a sidebar.
JetBrains plugin support for WebStorm: detects port conflicts in run configurations, names the process, offers stop-and-rerun, and lists listening ports in a Ports tool window.
Port already in use?
npx portcheck-cli kill 3000portcheck 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
Related MCP server: tidyports
Features
Command | ||
🔍 |
| Every listening socket with its process, PID and user |
✅ |
| Is the port free? If not, who holds it? Exit code 0 or 1 for scripts |
🆓 |
| Free ports, verified by actually binding them |
🛑 |
| Graceful SIGTERM, then SIGKILL; refuses PID 1, your shell and system processes |
🐚 |
| After any command fails with "address already in use", your terminal says who holds the port and how to free it; bash, fish and PowerShell too (guide) |
🧹 |
| The dev servers you forgot: your listening processes with their project and uptime, oldest first; |
📡 |
| Rate-limited TCP connect checks of remote hosts. No root needed |
🌍 |
| Your IP addresses, gateway and DNS; the devices on your network, with vendor hints; DNS facts about a name or address (guide) |
⏳ |
| Block until services accept connections, or until a port is free. Built for CI, also as a GitHub Action |
📡 |
| Uptime monitors for URLs and ports, checked from your device; |
▶️ |
| Start a command on a free port ( |
📌 |
| Every project gets its own remembered port, so two projects never fight over 3000 (guide) |
🩺 |
| Check the ports listed in |
🖥️ |
| Live, sortable, filterable TUI. Stop processes without leaving it |
🌐 | Edge (and Chrome): which process serves a localhost tab, | |
🧩 | "Port in use" errors in the terminal become one-click fixes; listening ports in the sidebar (guide) | |
🤖 |
| AI assistants (Claude Code, Cursor, Copilot…) check and free ports themselves (guide) |
⌨️ | Search Ports, Check Port, Kill Port and Find Free Port from the Mac launcher | |
✍️ |
| |
🔌 | Your listening ports in the macOS menu bar or Windows/Linux tray: stop, open, copy in two clicks | |
🧠 | IntelliJ 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.

The Network Tools panel checks ports on this machine or another host, looks up domains and IPs, and lists your addresses and the devices on your network:

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.

Install portcheck from JetBrains Marketplace
(Settings → Plugins → Marketplace, search "portcheck"), or install
portcheck-jetbrains-<version>.zip from the
latest release
(Settings → Plugins → ⚙ → Install Plugin from Disk…) (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.
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).
Claude Code plugin
One install adds portcheck's MCP tools and a skill that tells Claude when to use them, so "port 3000 is already in use" gets diagnosed and fixed in the conversation, asking before anything is stopped:
/plugin install portcheck --marketplace roystondwork-dev/portcheckOr from your shell: claude plugin marketplace add roystondwork-dev/portcheck, then
claude plugin install portcheck@portcheck (guide).
Highlights
Same commands and output on every OS. It replaces
lsof -i,netstat -ano,ss -ltnpandkill.Built for scripts.
--jsonfollows 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
killtells 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
# 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-bucket
scoop install portcheck
# npm (any OS): run it without installing
npx 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
$ portcheck 3000
PORT PROTO STATUS PID PROCESS USER
3000 tcp in-use 42379 node alice
$ portcheck kill 3000
About to terminate:
PID 42379 node (port 3000)
Proceed? [y/N] y
PID PROCESS RESULT DETAIL
42379 node terminated
$ portcheck free 3000-3999 -n 2 -o plain
PORT
3000
3001
$ 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
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
Available Tools
5 toolscheck_portARead-onlyIdempotent
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.
Inputs: ports (required), proto.
find_free_portARead-onlyIdempotent
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.
Inputs: count, range.
list_portsARead-onlyIdempotent
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.
Inputs: name, ports, proto.
stop_processADestructive
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.
Inputs: pid, port, force, dry_run.
wait_for_portARead-onlyIdempotent
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.
Inputs: port (required), free, host, timeout_seconds.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 5 tools
Each tool has a distinct role: check_port checks specific ports and explains holders, list_ports enumerates listening ports, find_free_port locates available ports, stop_process terminates a holder, and wait_for_port blocks until readiness. check_port and list_ports overlap in reporting process details, but their usage guidance (specific ports vs. inventory/search) keeps them separable.
All names are snake_case with a leading action verb: check_port, find_free_port, list_ports, stop_process, wait_for_port. Minor variation in verb phrasing (find_free_port, wait_for_port) is natural and consistent, not mixed conventions.
Five tools is well-scoped for a port diagnostics utility, with each covering a distinct phase: check, discover, inventory, stop, and wait. There are no redundant or filler tools.
The set covers the core lifecycle for port troubleshooting: detect conflicts, identify holders, find free alternatives, stop processes safely, and wait for readiness. No obvious operational gap remains for the stated purpose.
Maintenance
Related MCP Connectors
Network, domain and website diagnostics for AI clients via MCP.
238+ dev tools via MCP: JSON, QR, PDF, DNS, hash, UUID, code review, JWT, SSL, WHOIS, and more
Pingstack monitors cron jobs and scheduled tasks with heartbeat checks, and checks websites, TCP ports, DNS records, SSL certificates and domain expiry. This MCP server lets your agent create, update, pause and delete checks, build dashboards and publish them as status pages, manage notification groups, and read incidents with their causes, uptime, run history and latency. Pause, delete and unpublish stay off until you turn them on. Browser sign-in, no API key needed.
Shared memory for your AI tools: tasks, notes and context every tool can read and write over MCP.
Related MCP Servers
- AlicenseAqualityDmaintenanceInspect, manage, and kill local dev servers via MCP. Stop guessing what's on :3000. Five tools: list servers with framework detection, inspect ports, find zombies, diagnose conflicts, safe-kill with dry-run default. Local, no cloud, no telemetry.521 npm4MIT
- AlicenseNot gradedqualityDmaintenanceSee and control the local dev servers your coding agents leave running. Lists listeners with provenance — which agent, terminal and git worktree started each — kills strays, and allocates collision-free ports so parallel agents stop fighting over :3000.MIT
- AlicenseNot gradedqualityBmaintenanceSee what's on your ports, then act on it. Diagnostic-first port viewer for Linux, MacOS and Windows.61MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for managing local dev ports on macOS. It enables AI agents to inspect listening ports, identify owning processes and parent chains, kill processes safely, wait for ports, and report LAN exposure.8 npm1MIT