A side-by-side look at the Magic MCP and Localhost MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Magic MCP for developer tools work as a local process; choose Localhost MCP for developer tools as a local process. You can also run both side by side in one mcpServers block.
TWENTY_FIRST_API_KEY, API_KEY_21ST.list_dev_servers, port_info, kill_server.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Developer Tools | Developer Tools |
| Quality signal | 53/100 · Good | 59/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | API key required | No auth required |
| Pricing | Paid service | Free |
| Required env vars | TWENTY_FIRST_API_KEYAPI_KEY_21ST | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | 6,089 | 4 |
| Directory activity | 16 views 1 installs 0 upvotes | 3 views 0 installs 0 upvotes |
| Tools | Not listed | 5 |
| Full listing | View Magic MCP | View Localhost MCP |
No tool names declared yet. Check the project README from the listing page.
list_dev_serversRead-only. Lists every local development server (next, vite, nuxt, remix, astro, rails, django, flask, express, deno, bun, etc.) currently LISTENING on a TCP port. For each: port, pid, process name, command line, working directory, project name, detected framework, uptime, memory (MB), CPU %, and owning user. Uses `lsof` on macOS/Linux and `netstat` on Windows; on Windows the cwd/framework fields are limited. Takes no arguments. Returns `{ count, servers[] }`.port_infoRead-only. Inspects a single TCP port and reports the dev server holding it (same fields as `list_dev_servers`). If nothing is listening, or the listener is not a recognised dev process, returns `{ port, status: "free" }`. Useful for answering "what's on :3000?" before starting or killing something.kill_serverTerminates a local dev server by `pid` or `port`. DESTRUCTIVE. Safe by default: with no `confirm`, this is a DRY RUN — it reports what it would kill and changes nothing. Pass `confirm: true` to actually terminate: sends SIGTERM, waits up to 5s, then escalates to SIGKILL (or SIGKILL immediately if `force: true`). Refuses PIDs below 1000 and processes that don't look like dev servers. Provide exactly one of `pid` or `port`. Returns what was (or would be) killed and the signal used.find_zombiesRead-only. Flags dev servers that look abandoned — all three of: uptime > 6h AND CPU < 1% AND memory > 100MB. By default it excludes known always-on noise (VS Code server, language servers, other MCP servers, postgres/redis, sidekiq, etc.); set `include_excluded: true` to also list those. Each candidate comes with the reasons it matched. This tool never kills anything — pass results to `kill_server`. Returns `{ count, candidates[] }`.port_conflictRead-only. Diagnoses an `EADDRINUSE` situation: given a port, returns the dev server currently blocking it plus 5 free alternative ports nearby. Use it when a `listen EADDRINUSE` error fires and you want both the culprit and a port to switch to.Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"21st-dev-magic-mcp": {
"command": "npx",
"args": [
"-y",
"@21st-dev/cli@latest"
],
"env": {
"TWENTY_FIRST_API_KEY": "YOUR_TWENTY_FIRST_API_KEY_HERE",
"API_KEY_21ST": "YOUR_API_KEY_21ST_HERE"
}
}
}
}
{
"mcpServers": {
"hasanjahidul-localhost-mcp": {
"command": "npx",
"args": [
"-y",
"localhost-mcp"
]
}
}
}