Report · transparency
Why some MCP servers have no security result
We opened a live, read-only session with 19,568 of the 38,977 registry entries. The other 19,409 have no exercised checks. Every one states why on its own page; this report adds them up. A check we did not run is never counted as passed, and we never show a server as “safe” for a check that never ran.
Whose limit it is
Every not-tested server falls into exactly one of four owners. The counts below add up to all 19,409 untested servers. If you run one of them, you can test it yourself from your own machine with the free self-test command: a server it starts there, or your own server at its URL after a one-time proof, with your own credential if it needs one. Those results stay on your machine and do not change these counts.
- 10,520
- the server's own choice
54.2% of the untested - 1,848
- a defect in the package
9.5% of the untested - 356
- our limit
1.8% of the untested - 6,685
- cause not determined
34.4% of the untested
the server's own choice · 10,520 servers
The server's own choice
The server itself made testing impossible or declined it — it required a sign-in or payment, answered with an error, or declares no way to run. This is the server’s own choice, not a judgement of the publisher.
| Reason | What it means | Servers | Share |
|---|---|---|---|
| needs-credential | It requires a credential (a key or token) that the publisher marks as required. We never fill in credentials, so we did not start it. | 5,382 | 27.7% |
| auth-required | The server required a sign-in before it would list anything, and we never use a credential its operator did not give us. Its operator can test it with their own credential, on their own machine, with our self-test command (/docs/selftest). | 3,964 | 20.4% |
| needs-configuration | It requires a setting the publisher marks as required (for example a URL part or a configuration value) that has no default, so we did not start it. | 684 | 3.5% |
| no-delivery | The registry entry declares no package and no remote endpoint, so there is nothing to run. | 471 | 2.4% |
| image-private | Its Docker image could not be pulled without a registry login (it is private or access-restricted), so we could not start it. | 10 | 0.1% |
| undeclared-config | The server stopped at start and said it needs a key or setting that its registry entry does not declare. We never supply credentials, so no session could be opened. | 9 | 0.0% |
a defect in the package · 1,848 servers
A defect in the package
The published package could not start in our sandbox, so no session could be opened. This is a defect in the package as published today.
| Reason | What it means | Servers | Share |
|---|---|---|---|
| not-executable | The published package provides no runnable server (no executable, or one the system cannot start), so no session could be opened. | 992 | 5.1% |
| broken-dependency | The published package does not install or start cleanly today because of a dependency it did not pin, so no session could be opened. | 834 | 4.3% |
| serves-http | The published image starts a web (HTTP) server instead of the standard input/output transport its registry entry declares, so no session could be opened over the declared transport. | 18 | 0.1% |
| image-not-found | Its Docker image or tag was not found in its registry, so there was nothing to start. | 4 | 0.0% |
our limit · 356 servers
Our limit
The limit is ours: our sandbox does not run this package type or transport yet, or our client or time limit fell short. We say so plainly rather than counting it against the server.
| Reason | What it means | Servers | Share |
|---|---|---|---|
| unsupported-package | Its package type is not run in our sandbox yet. This is our limit, not the server's. | 163 | 0.8% |
| unsupported-transport | It runs over a transport our sandbox does not start yet. This is our limit, not the server's. | 127 | 0.7% |
| connect-timeout | The server did not answer within our time limit; a longer limit or a retry is on us. | 33 | 0.2% |
| image-too-large | Its Docker image is larger than the size limit of our sandbox, so we did not start it. This is our limit, not the server's. | 14 | 0.1% |
| docker-options-refused | Its registry entry asks for Docker run options our sandbox does not grant for security (for example a different network mode or extra privileges), so we did not start it. This is our choice, not a fault of the server. | 7 | 0.0% |
| build-timeout | The package is a Rust crate that must be compiled from source, and our sandbox did not finish compiling it within our time limit, so no session could be opened. A longer limit would be on us. | 5 | 0.0% |
| not-attempted | It could be started, but has not been tested yet. This is our limit, not the server's. | 3 | 0.0% |
| protocol-mismatch | The server speaks a newer protocol version than our test client supports; updating our client is on us. | 2 | 0.0% |
| image-not-amd64 | Its Docker image has no build for the x86-64 (linux/amd64) machines our sandbox runs on. This is our limit, not the server's. | 1 | 0.0% |
| docker-harness | Our Docker reader hit an error of its own (for example a registry rate limit on our pulls) before the server started. This is our limit, not the server's. | 1 | 0.0% |
cause not determined · 6,685 servers
Cause not determined
No session could be opened, and the recorded evidence does not show whose side the cause was on. We do not guess an owner.
| Reason | What it means | Servers | Share |
|---|---|---|---|
| could-not-connect | No session could be opened when we tried, and the cause was not recorded. | 6,389 | 32.9% |
| bundle-unavailable | The package's downloadable bundle could not be fetched, verified against its published hash, or unpacked (a failed download, a hash mismatch, an invalid archive, or a size over our limit), so no session could be opened; the recorded error does not say whose side the cause is on. | 144 | 0.7% |
| process-closed | The package's process closed before a session opened, and the recorded output does not show whether the cause was ours or the package's. | 140 | 0.7% |
| other | No session could be opened, and the recorded cause does not fit a known category. | 11 | 0.1% |
| build-failed | The package is a Rust crate that must be compiled from source, and the build failed in our sandbox; the recorded output does not show whether the cause was our sandbox (for example a missing system library) or the crate, so no session could be opened. | 1 | 0.0% |
Counts from our read-only sessions and the official MCP registry · data as of 2026-10-14 · the code counts sum to the 19,409 untested servers · how we measured · all reports