关于 MCP Internet Speed Test
面向 AI 模型和 Agent 的网络测速 MCP 服务,可测量带宽、延迟和抖动,并提供 CDN 与服务器位置详情,辅助网络诊断。
主要功能
- 01渐进式下载测速
- 02上传带宽测量
- 03延迟与抖动分析
- 04CDN 与位置检测
- 05包含服务器元数据的综合测试
适用场景
- 01检查网络速度与稳定性
- 02结合 CDN 位置分析测速结果
- 03查看 CDN 缓存状态和响应头
MCP 相关
向 MCP 客户端提供下载和上传测速、延迟与抖动测量、CDN 服务器信息及综合测试工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
MCP Internet Speed Test
互联网测速的模型上下文协议(MCP)实现。它允许 AI 模型和 Agent 通过标准化接口测量、分析和报告网络性能指标。
📦 可在 PyPI 上获取: https://pypi.org/project/mcp-internet-speed-test/
🚀 快速开始:
pip install mcp-internet-speed-test
mcp-internet-speed-test
什么是 MCP?
模型上下文协议(MCP)提供了一种标准化方式,让大语言模型(LLM)能够与外部工具和数据源交互。可以将其视为“AI 应用的 USB-C”——一种通用接口,让 AI 系统能够访问现实世界的功能和信息。
功能
- 智能增量测试:采用 SpeedOf.Me methodology,并以 8 秒为阈值,实现最佳准确度
- 下载速度测试:使用 GitHub 仓库(Git LFS)中 128KB 至 128MB 的文件测量带宽
- 上传速度测试:使用 128KB 至 128MB 的流式数据测试上传带宽
- 延迟测试:使用多个样本测量网络延迟,并报告最小值
- 抖动分析:使用多个延迟样本计算网络稳定性(默认值:5)
- 多 CDN 支持:检测 Fastly、Cloudflare 和 AWS CloudFront,并提供相关信息
- 地理位置:将 POP 代码映射到实际地理位置(全球 50 多个位置)
- 缓存分析:检测 HIT/MISS 状态和缓存标头
- 服务元数据:提取详细的 CDN 标头,包括
x-served-by、via、x-cache - 全面测试:使用单个函数运行所有测试并获取完整指标
安装
前置条件
- Python 3.12 或更高版本(异步支持所必需)
- pip 或 uv 包管理器
选项 1:通过 pip 从 PyPI 安装(推荐)
# Install the package globally
pip install mcp-internet-speed-test
# Run the MCP server
mcp-internet-speed-test
选项 2:通过 uv 从 PyPI 安装
# Install the package globally
uv add mcp-internet-speed-test
# Or run directly without installing
uvx mcp-internet-speed-test
选项 3:使用 docker
# 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
选项 4:开发/本地安装
如果你想贡献代码或修改代码:
# 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
依赖项
该软件包会自动安装以下依赖项:
mcp[cli]>=1.25.0:带 CLI 集成的 MCP 服务框架httpx>=0.27.0:用于速度测试的异步 HTTP 客户端
配置
若要将此 MCP 服务与 Claude Desktop 或其他 MCP 客户端配合使用,请将其添加到 MCP 配置文件中。
Claude Desktop 配置
编辑 Claude Desktop MCP 配置文件:
选项 1:使用通过 pip 安装的软件包(推荐)
{
"mcpServers": {
"mcp-internet-speed-test": {
"command": "mcp-internet-speed-test"
}
}
}
选项 2:使用 uvx
{
"mcpServers": {
"mcp-internet-speed-test": {
"command": "uvx",
"args": ["mcp-internet-speed-test"]
}
}
}
API 工具
MCP Internet Speed Test 提供以下工具:
测试函数
measure_download_speed:测量下载带宽(单位为 Mbps),并提供服务位置相关信息measure_upload_speed:测量上传带宽(单位为 Mbps),并提供服务位置相关信息measure_latency:使用多个样本测量网络延迟(单位为 ms),并报告最小值measure_jitter:通过分析延迟变化测量网络抖动,并提供服务信息get_server_info:获取任意 URL 对应的详细 CDN 服务信息,无需运行速度测试run_complete_test:全面测试所有指标和服务元数据
CDN 服务检测
此速度测试现在会提供为测试提供服务的 CDN 服务的详细信息:
可获得的信息
- CDN 提供商:识别你连接的是 Fastly、Cloudflare 还是 Amazon CloudFront
- 地理位置:显示服务器的物理位置(例如,“墨西哥城,墨西哥”)
- POP 代码:标识接入点(Point of Presence)的三字母代码(例如,“MEX”“QRO”“DFW”)
- 缓存状态:内容是从缓存提供(HIT)还是从源站获取(MISS)
- 服务器标头:完整的 HTTP 标头,包括
x-served-by、via和x-cache
技术实现
智能测试方法
- 渐进式测试:从小文件(128KB)开始,并逐步增大文件(按 2 的幂次递增)
- 基于时间的阈值:使用可配置的 sustain_time(1-8 秒,默认值:8)。样本超过阈值时停止
- 注重准确性:将耗时 ≥ 8 秒的最后一个样本的速度用作最终测量结果
- 支持多家服务提供商:针对地理位置分散的端点进行测试
- 完整方法:参见 SpeedOf.Me 测试方法
CDN 检测能力
- Fastly:检测 POP 代码,并映射到 50 多个全球位置
- Cloudflare:识别数据中心和地理区域
- AWS CloudFront:识别各大洲的边缘位置
- 标头分析:解析
x-served-by、via、x-cache和自定义 CDN 标头
这为何重要
- 网络诊断:了解实际为测试提供服务的服务器
- 性能分析:将速度结果与服务器距离相关联
- CDN 优化:确认 ISP 的路由是否达到最优
- 地理位置感知:了解测试是否在预期区域运行
- 故障排查:识别路由问题和 CDN 配置错误
服务器信息输出示例
{
"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
上传端点优先级
- Cloudflare Workers(httpi.dev)- 全球分发,优先级最高
- HTTPBin(httpbin.org)- 基于 AWS 的备用端点
支持的 CDN 位置(150 多个 POP)
Fastly POP:MEX、QRO、DFW、LAX、NYC、MIA、LHR、FRA、AMS、CDG、NRT、SIN、SYD、GRU、SCL、BOG、MAD、MIL……
Cloudflare 中心: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……
性能阈值
- 测试时长阈值:8.0 秒(样本超过此时长时停止)
- 最大文件大小:可配置(默认值:128MB)
- 延迟样本数:10 次测量,报告最小值(可配置)
- 抖动样本数:5 次测量(可配置)
- 持续时间:1-8 秒(可配置,默认值:8)
故障排查
常见问题
MCP 服务连接
- 路径配置:确保在 MCP 配置中使用绝对路径
- 目录权限:确认项目目录具有读取/执行权限
- Python 版本:需要支持异步的 Python 3.12+
- 依赖项:安装
mcp[cli]和httpx软件包
测速问题
- GitHub 仓库访问:确保可以访问
inventer-dev/speed-test-files - 防火墙/代理:检查企业防火墙是否阻止了测试端点
- CDN 路由:某些 ISP 可能会以不同方式路由到 CDN
- 网络稳定性:抖动测试需要稳定的连接
性能注意事项
- 文件大小限制:在慢速连接下,大文件(>50MB)可能会超时
- 上传端点:如果主要端点失败,会自动使用备用端点
- 地理位置准确性:POP 检测取决于 CDN 标头的一致性
开发
项目结构
mcp-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:测试文件仓库的基础 URL(Git LFS 媒体端点)UPLOAD_ENDPOINTS:按优先级排列的上传测试端点列表SIZE_PROGRESSION:用于递增测试的文件大小有序列表(2 的幂)*_POP_LOCATIONS:CDN 代码到地理位置的映射
核心函数
extract_server_info():解析 HTTP 标头以识别 CDN 提供商measure_*():用于测量不同指标的单独测试函数run_complete_test():负责协调完整测试套件
自定义配置
如果克隆仓库,可以在 mcp_internet_speed_test/main.py 中自定义以下内容:
# 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"
贡献
这是一个实验性项目,欢迎贡献:
- 问题反馈:报告错误或申请新功能
- 拉取请求:提交代码改进
- 文档:帮助改进此 README
- 测试:在不同网络条件和 CDN 下进行测试
许可证
本项目采用 MIT 许可证授权,详情请参阅 LICENSE 文件。
致谢
- 感谢 MCP Framework 维护者对 AI 工具交互进行标准化
- 感谢 Model Context Protocol 社区提供文档和示例
- 感谢 SpeedOf.Me 团队提供递增测试方法(工作原理)。请参阅下方的方法参考
- 如需使用官方 SpeedOf.Me MCP 服务,请参阅 @speedofme/mcp
SpeedOf.Me 测试方法
本节保留了本项目引用的 SpeedOf.Me 测试方法。 获取日期:2026 年 3 月 8 日。
点击展开完整方法
概述
SpeedOf.Me 通过下载和上传示例文件来测试互联网连接。它使用单个 HTTP 连接和大型连续文件,反映实际的浏览和下载性能——这与真实网页内容的 传输方式相同。
下载测试
- 首先下载最小的示例文件(128 KB)。
- 实时测量下载时长。
- 如果下载耗时少于 8 秒,则继续使用下一个更大的 示例文件。
- 如果下载耗时达到或超过 8 秒,则停止递增。
- 最终速度测量值基于最后一个示例文件——即耗时达到或超过 8 秒的文件。
上传测试
下载测试完成后,将采用类似的递增流程向测试服务发送数据:
- 从较小的示例文件开始,逐渐增大文件大小。
- 持续测试,直到上传一个示例文件耗时超过 8 秒。
- 上传速度基于该最后一个示例文件计算。
延迟与抖动
- 延迟(ping): 数据传输到服务并返回所需的时间。对 10 个样本进行测量,并报告最低值。
- 抖动: 各延迟样本之间的变化。抖动越低,连接越稳定,这对视频通话和游戏很重要。
自适应测试方法
为确保全面测试互联网连接,带宽会通过多轮测试进行测量。示例文件大小逐渐增加,直到某个文件的下载耗时超过 8 秒。
这种方法可自动测量从极慢的移动网络(10 Kbps GPRS / 2G)到千兆光纤连接(1 Gbps 或 更高)的连接速度。
示例文件大小
| # | 大小 |
|---|---|
| 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 将示例文件托管在 CDN 上。它使用称为 PoP(存在点)的服务器,分布在 106+ 个城市。每个 PoP 可能由多台服务器组成,位于全球关键区域,靠近主要互联网交换点。
测试开始时,SpeedOf.Me 会自动选择最可靠、响应最快的服务器。它不一定是距离最近的服务器——系统会综合多种因素,确定最佳选项。CDN 技术会处理这一过程,以提供最准确、最稳定的测试结果。
准确性
以下关键差异使这种方法更准确:
- 单次连续下载 — 下载大型、连续的示例文件,类似网页或媒体文件的典型传输方式。其他测速工具会并行传输小块数据,并通过调整来估算速度。
- 多个全球服务器 — 使用位于不同地区的 PoP,得出的结果更贴近实际情况。其他服务通常会选择物理距离最近的服务器(有时位于 ISP 网络内部),这可能会导致结果偏高。
- 无需插件 — 测试直接在客户端运行,无需额外软件。
本项目如何实现这种方法
| SpeedOf.Me 概念 | 本项目中的实现 |
|---|---|
| 增量下载 | measure_download_speed() 遍历 SIZE_PROGRESSION,当耗时 ≥ sustain_time(默认 8 s)时停止 |
| 增量上传 | measure_upload_speed() 持续传输数据块,当耗时 ≥ sustain_time 时停止 |
| 8 秒阈值 | 可通过 sustain_time 参数配置(1–8 s,默认 8) |
| 延迟 — 10 次采样,取最小值 | measure_latency(samples=10) 报告 min_latency |
| 抖动 — 波动情况 | measure_jitter(samples=5) 报告相对于平均值的平均偏差 |
| 带有 PoP 的 CDN | 下载文件通过 Fastly CDN 从 GitHub 提供;上传通过 Cloudflare Workers 进行 |
| 示例文件大小(2 的幂) | 128 KB → 128 MB,存储在 inventer-dev/speed-test-files(Git LFS)中 |
| 自动选择服务器 | CDN 负责地理路由;通过响应头检测 PoP |
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。
