v5.0
live available
practices ranked 21 Oct 2026

Five popular MCP servers, read for their defaults rather than their features

The protocol says command execution through its stdio transport is not a vulnerability. That pushes the entire security question down into each server's defaults, so I went and read them.

By Purvansh Parmar Checked 2026-10-21 Read 9 min Entries 5

There is a particular kind of security review nobody does on these things: install it, change nothing, and write down what you just agreed to. Everyone reads the feature list. Almost nobody reads the row in the environment variable table that says what the bind address defaults to, or the sentence in SECURITY.md admitting that the directory allowlist does not cover the terminal tool. So I did that for five of the most installed MCP servers on GitHub, and the pattern that came out of it was not that these projects are careless. Several are unusually honest. The pattern is that the safe default and the way you will actually run it are two different things.

How this was checkedPulled the current star counts and push dates for the top MCP repositories from the GitHub API, then read the documentation of five of them for one thing only: what happens if you install it and change nothing. Found a hardened bind default that the project's own Docker image opts out of, a directory allowlist that the project documents as not covering terminal commands, and a configuration setter exposed to the model as a callable tool. Nothing here is an undisclosed flaw. Every line of it is in the projects' own docs.

What I compared on

01 The MCP trust model itself

The specification repository's own SECURITY.md, which defines what the protocol will and will not treat as a flaw.

Wins
It is explicit, which is worth a great deal. A section titled Behaviors That Are Not Vulnerabilities tells you exactly where the standard stops and your own threat model has to start, and it states plainly that a local server is trusted like any other software you install.
Loses
It resolves the question by declaring it out of scope. Reports about arbitrary command execution via stdio transport configuration, in clients or SDKs, are explicitly not eligible, so every mitigation you want has to come from the server you chose or the sandbox you put it in.
9,495 stars4 stated trust assumptions0 eligible reports for stdio command execution

02 Desktop Commander

Gives the model terminal control and filesystem access on your machine, with a configurable directory allowlist.

Wins
The most honest security document in this set. It calls itself an amplifier of whatever the connected client asks for, states that its restrictions are guardrails rather than a sandbox, and its own table marks symlink traversal prevention as not implemented.
Loses
The allowlist does not do what its name suggests: the project documents that allowedDirectories restricts filesystem operations only, and that terminal commands can still reach files outside them. set_config_value is also exposed as a tool, so the model can edit teh list that constrains it, which is why the docs advise changing configuration in a separate chat window.
10,084 starsallowedDirectories covers 1 of 2 pathssymlink prevention: no

03 MCP Inspector

The official testing tool for MCP servers, with a web backend that spawns processes on request.

Wins
Properly hardened on the command line. HOST defaults to 127.0.0.1, every /api/ route is guarded by a bearer token generated fresh per launch, and an all-interfaces bind is refused outright rather than warned about.
Loses
The refusal is lifted by DANGEROUSLY_BIND_ALL_INTERFACES, and the documentation notes that the project's Docker image sets it. Secrets are another two tier story: OAuth tokens and stdio env values go to the OS keychain where one exists, and to an unencrypted file under the home directory where one does not, which covers headless boxes, SSH sessions and containers.
11,112 stars127.0.0.1 defaultunencrypted fallback on keychain-less hosts

04 Playwright MCP

Microsoft's browser automation server, the most starred genuine MCP server on GitHub.

Wins
The default is right: the server binds localhost unless told otherwise, and the host flag is documented in the same table as everything else rather than buried in a security appendix.
Loses
The containerised recipe in the same README runs it with the host set to all interfaces and the browser sandbox disabled. Both are defensible inside a container and neither is flagged, so the copy and paste path hands you the two settings you would have been warned about on the command line.
38,458 starslocalhost default0.0.0.0 plus no-sandbox in the Docker recipe

05 GitHub MCP Server

GitHub's official server, which hands an agent your repositories, issues and pull requests through a token.

Wins
Read-only mode is a real, well implemented feature rather than a note in the docs: a single flag, and it takes priority over any explicit tool selection, so it cannot be partially undone by another argument.
Loses
It is opt in. Install it the way the quickstart shows and the agent has your write tools from the first prompt, with the blast radius set by the token you pasted rather than by anything the server decided.
33,816 starsread-only is 1 flagwrite enabled by default

Side by side

StarsDefault postureThe catch
MCP trust model9,495documents the boundarystdio execution is out of scope
Desktop Commander10,084guardrails, stated as suchallowlist misses the terminal
MCP Inspector11,112loopback plus token authDocker image opts out
Playwright MCP38,458binds localhostDocker recipe binds everything
GitHub MCP Server33,816read-only availablenot the default

Verdict

Read Desktop Commander's SECURITY.md before you install anything else in this category, including things you consider safer. It is the only one of the five that writes down what its own controls cannot do, and the sentence admitting that path restrictions can be circumvented by shell substitution or another interpreter tells you more about the real threat model than any feature list will. Then do the same audit on whatever you are about to install, because it takes ten minutes: check the bind default, check whether the container image overrides it, and check whether the configuration is reachable as a tool. The answer to the third one is the one that will surprise you.

Sources