loading…
Search for a command to run...
loading…
Internet speed testing with network performance metrics including download/upload speed, latency, jitter analysis, and CDN server detection with geographic mapp
Internet speed testing with network performance metrics including download/upload speed, latency, jitter analysis, and CDN server detection with geographic mapping
MseeP.ai Security Assessment Badge
An implementation of a Model Context Protocol (MCP) for internet speed testing. It allows AI models and agents to measure, analyze, and report network performance metrics through a standardized interface.
📦 Available on PyPI: https://pypi.org/project/mcp-internet-speed-test/
🚀 Quick Start:
pip install mcp-internet-speed-test
mcp-internet-speed-test
The Model Context Protocol (MCP) provides a standardized way for Large Language Models (LLMs) to interact with external tools and data sources. Think of it as the "USB-C for AI applications" - a common interface that allows AI systems to access real-world capabilities and information.
x-served-by, via, x-cache# Install the package globally
pip install mcp-internet-speed-test
# Run the MCP server
mcp-internet-speed-test
# Install the package globally
uv add mcp-internet-speed-test
# Or run directly without installing
uvx mcp-internet-speed-test
# Build the Docker image
docker build -t mcp-internet-speed-test .
# Run the MCP server in a Docker container
docker run -it --rm -v $(pwd):/app -w /app mcp-internet-speed-test
If you want to contribute or modify the code:
# Clone the repository
git clone https://github.com/inventer-dev/mcp-internet-speed-test.git
cd mcp-internet-speed-test
# Install in development mode
pip install -e .
# Or using uv
uv sync
uv run python -m mcp_internet_speed_test.main
The package automatically installs these dependencies:
mcp[cli]>=1.25.0: MCP server framework with CLI integrationhttpx>=0.27.0: Async HTTP client for speed testsTo use this MCP server with Claude Desktop or other MCP clients, add it to your MCP configuration file.
Edit your Claude Desktop MCP configuration file:
{
"mcpServers": {
"mcp-internet-speed-test": {
"command": "mcp-internet-speed-test"
}
}
}
{
"mcpServers": {
"mcp-internet-speed-test": {
"command": "uvx",
"args": ["mcp-internet-speed-test"]
}
}
}
The MCP Internet Speed Test provides the following tools:
measure_download_speed: Measures download bandwidth (in Mbps) with server location infomeasure_upload_speed: Measures upload bandwidth (in Mbps) with server location infomeasure_latency: Measures network latency (in ms) using samples, reports minimum valuemeasure_jitter: Measures network jitter by analyzing latency variations with server infoget_server_info: Get detailed CDN server information for any URL without running speed testsrun_complete_test: Comprehensive test with all metrics and server metadataThis speed test now provides detailed information about the CDN servers serving your tests:
x-served-by, via, and x-cachex-served-by, via, x-cache, and custom CDN headers{
"cdn_provider": "Fastly",
"pop_code": "MEX",
"pop_location": "Mexico City, Mexico",
"served_by": "cache-mex4329-MEX",
"cache_status": "HIT",
"x_cache": "HIT, HIT"
}
GitHub Repository: inventer-dev/speed-test-files
Branch: main
URL: https://media.githubusercontent.com/media/inventer-dev/speed-test-files/main/
File Sizes: 128KB, 256KB, 512KB, 1MB, 2MB, 4MB, 8MB, 16MB, 32MB, 64MB, 128MB
Storage: Git LFS
Fastly POPs: MEX, QRO, DFW, LAX, NYC, MIA, LHR, FRA, AMS, CDG, NRT, SIN, SYD, GRU, SCL, BOG, MAD, MIL...
Cloudflare Centers: DFW, LAX, SJC, SEA, ORD, MCI, IAD, ATL, MIA, YYZ, LHR, FRA, AMS, CDG, ARN, STO...
AWS CloudFront: ATL, BOS, ORD, CMH, DFW, DEN, IAD, LAX, MIA, MSP, JFK, SEA, SJC, AMS, ATH, TXL...
mcp[cli] and httpx packagesinventer-dev/speed-test-files is accessiblemcp-internet-speed-test/
├── mcp_internet_speed_test/ # Main package directory
│ ├── __init__.py # Package initialization
│ └── main.py # MCP server implementation
├── README.md # This documentation (includes methodology reference)
├── Dockerfile # Container configuration
└── pyproject.toml # Python project configuration
GITHUB_MEDIA_URL: Base URL for test files repository (Git LFS media endpoint)UPLOAD_ENDPOINTS: Prioritized list of upload test endpointsSIZE_PROGRESSION: Ordered list of file sizes for incremental testing (powers of 2)*_POP_LOCATIONS: Mappings of CDN codes to geographic locationsextract_server_info(): Parses HTTP headers to identify CDN providersmeasure_*(): Individual test functions for different metricsrun_complete_test(): Orchestrates comprehensive testing suiteYou can customize the following in mcp_internet_speed_test/main.py if you clone the repository:
# GitHub repository settings
GITHUB_USERNAME = "your-username"
GITHUB_REPO = "your-speed-test-files"
GITHUB_BRANCH = "main"
# Test duration threshold
DEFAULT_TEST_DURATION = 8.0 # seconds
# Default endpoints
DEFAULT_UPLOAD_URL = "your-upload-endpoint"
DEFAULT_LATENCY_URL = "your-latency-endpoint"
This is an experimental project and contributions are welcome:
This project is licensed under the MIT License - see the LICENSE file for details.
Source: SpeedOf.Me — How It Works
This section preserves the SpeedOf.Me testing methodology as referenced by this project. Retrieved on March 8, 2026.
SpeedOf.Me tests an internet connection by downloading and uploading sample files. It reflects actual browsing and download performance by using a single HTTP connection and large continuous files — the same way real web content is delivered.
When the download test is complete, a similar incremental process is used to send data back to the test server:
To ensure the internet connection is thoroughly tested, bandwidth is measured in several passes. Sample file sizes gradually increase until one takes longer than 8 seconds to download.
This approach automatically measures connection speeds ranging from very slow mobile networks (10 Kbps GPRS / 2G) to gigabit fiber connections (1 Gbps or more).
| # | Size |
|---|---|
| 1 | 128 KB |
| 2 | 256 KB |
| 3 | 512 KB |
| 4 | 1 MB |
| 5 | 2 MB |
| 6 | 4 MB |
| 7 | 8 MB |
| 8 | 16 MB |
| 9 | 32 MB |
| 10 | 64 MB |
| 11 | 128 MB |
SpeedOf.Me hosts its sample files on a CDN. It uses servers called PoPs (Points of Presence) in 106+ cities. Each PoP may consist of multiple servers and is located in key regions around the world, near major internet exchange points.
When the test begins, SpeedOf.Me automatically selects the most reliable and responsive server. This may not be the closest one — several factors are taken into account to determine the best option. CDN technology handles this process to provide the most accurate and consistent test results.
Key differences that make this methodology accurate:
| SpeedOf.Me Concept | Implementation in this project |
|---|---|
| Incremental download | measure_download_speed() iterates SIZE_PROGRESSION, breaks when elapsed ≥ sustain_time (default 8 s) |
| Incremental upload | measure_upload_speed() streams chunks and breaks when elapsed ≥ sustain_time |
| 8-second threshold | Configurable via sustain_time parameter (1–8 s, default 8) |
| Latency — 10 samples, min | measure_latency(samples=10) reports min_latency |
| Jitter — variation | measure_jitter(samples=5) reports average deviation from mean |
| CDN with PoPs | Download files served from GitHub via Fastly CDN; upload via Cloudflare Workers |
| Sample file sizes (powers of 2) | 128 KB → 128 MB stored in inventer-dev/speed-test-files (Git LFS) |
| Automatic server selection | CDN handles geographic routing; PoP detected from response headers |
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"inventer-dev-mcp-internet-speed-test": {
"command": "npx",
"args": []
}
}
}