Skip to content
Back to skills

Servers

ASecurity

/servers, after starting a dev server, or user asks what's running, which port is which, why browsers or node.exe are open, or to close old servers and browsers.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 7, 2026
ai-agentspythongoshellbashnodedebugging

Works with

  • cli
  • mcp

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned November 11, 2026

npx -y skills add ryanportfolio/winuse-mcp --skill servers --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Servers?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Servers
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ryanportfolio-servers-winuse-mcp/badge)](https://www.skillsdirectory.com/skills/ryanportfolio-servers-winuse-mcp)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: servers
description: "/servers, after starting a dev server, or user asks what's running, which port is which, why browsers or node.exe are open, or to close old servers and browsers."
---

# Servers and automation browsers

Script paths below are from the repository root; when this skill came from a plugin, use the `scripts/` folder in this skill's base directory instead, and keep running from the checkout.

`/servers` triages the whole machine, every session and app, not only what this session started. `.claude/skills/servers/scripts/servers.mjs` groups each dev server (listener on port 1024+ owned by node, bun, python and similar), automation browser (Chrome, Edge or Chromium started with a debugging flag or its own profile) and helper runtime (any other node, bun, deno or python process) with the launchers that started it (`npm` → `cmd /c` → `node`, `bash -c`), and judges the unit. A personal browser launched normally is never listed.

**Triage.** Run it and show the user the result:

```bash
node .claude/skills/servers/scripts/servers.mjs
```

It prints three groups, each row with a one-line reason, then the node.exe count by kind:

- **Safe to close**: its folder was deleted; orphaned (the shell or session that launched it has exited) and old, failing (5xx) or silent; a helper runtime such as a Playwright MCP whose session has exited.
- **Probably stale, your call**: orphaned but young; old with its session still open; failing; a duplicate that runs the same command as a listening server but holds no port.
- **Keep**: protected; in use (another live process names its port in a URL, such as `verify-*.mjs --base http://127.0.0.1:8349`, or holds a loopback connection to it); an app from a repository's main checkout that answers; young and owned by an open session. Helper runtimes with a live owner (Playwright MCP, Codex, the ChatGPT app, vercel CLI, scripts) are one line per kind; they close with their session or app.

Signals behind the verdicts: parent process and age from the process table, `GET /` on each port (1.5 s), whether the folder still exists, records, and `~/.claude/servers-protect.txt` (a port or name per line; protected rows are never closed, since closing kills the whole tree). `--here` limits the groups to this repository, `--all` lists every helper row, `--old-hours N` moves the old line (default 12), `--json` gives data. Add the user's own long-running apps to the protect file when they ask.

When the user asks "which port is X", answer from the folder and purpose columns and give the URL. When asked to "turn on" a server that is not listed, start it from the right checkout and record it.

**Record what you start.** Windows cannot tell which folder a running `npm run dev` belongs to, so after starting a server, record it from the checkout it serves:

```bash
node .claude/skills/servers/scripts/servers.mjs register --port 5173 --purpose "menu page preview"
```

`launchPlacedChrome()` records its browsers itself; pass `purpose` to label them.

**Close.** Show the triage, recommend the safe group, and close what the user approves. Without `--yes` the script only prints the plan:

```bash
node .claude/skills/servers/scripts/servers.mjs close safe --yes             # the safe-to-close group
node .claude/skills/servers/scripts/servers.mjs close 5173 pid:4120 --yes    # named rows: a port, or the pid a row shows
```

Each target closes with its whole tree and leftover launchers, after a fresh check that the pid still belongs to the same process and runs nothing protected. A pid inside a row closes only that process and what runs under it. `close stale` (folder gone) and `close old` (recorded rows and automation browsers, old or gone) still work. After closing, the script lists again and prints the node.exe count before and after; report both to the user.

Close what this session started without asking. Anything else, including every other session's servers, browsers and helpers, only after the user has seen the triage and agreed to those rows.

Files in this skill

  • SKILL.md2.4 KB
  • scripts/servers.mjs22.9 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in ai-agents →

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.