A bandwidth figure on its own does not explain a slow connection; knowing the bytes came from a POP in another city, on a cache MISS, does. The measurement follows the SpeedOf.Me approach — file sizes double until one sample runs long enough to be a fair reading, and that sample is the number reported rather than an average over short ones.
A Python server that runs real network measurements and reports both the numbers and the CDN server that served the test — provider, POP code, physical location and cache status.
- `measure_download_speed` and `measure_upload_speed` in Mbps, each with the server location that handled it
- `measure_latency` from multiple samples, reporting the minimum, and `measure_jitter` from the variation between them
- `get_server_info` — CDN details for any URL without running a speed test at all
- `run_complete_test` — every metric plus server metadata in a single call
- CDN identification for Fastly, Cloudflare and Amazon CloudFront, with the POP code mapped to a physical location from a table of 50+ worldwide, cache HIT or MISS, and the `x-served-by`, `via` and `x-cache` headers
- Incremental testing that starts at 128KB and doubles up to 128MB, stopping once a sample runs at least the sustain time — configurable from 1 to 8 seconds, default 8
Python 3.12 or higher, for the async support. `pip install mcp-internet-speed-test` then run `mcp-internet-speed-test`, or `uvx mcp-internet-speed-test` without installing anything. A Dockerfile is included if you would rather containerise it.
One command — pip install mcp-internet-speed-test
