MCP Internet Speed Test について
AIモデルやエージェント向けに、帯域幅、レイテンシ、ジッターを測定するMCPサーバーです。CDNやサーバーの所在地も確認でき、ネットワーク診断に役立ちます。
主な機能
- 01段階的なダウンロード速度測定
- 02アップロード帯域幅の測定
- 03レイテンシとジッターの分析
- 04CDNと所在地の検出
- 05サーバーメタデータ付き総合テスト
活用シーン
- 01ネットワーク速度と安定性の確認
- 02測定結果とCDN所在地の関連付け
- 03CDNキャッシュ状態とレスポンスヘッダーの確認
MCP 対応
MCPクライアントに、ダウンロードとアップロードの測定、レイテンシとジッターの計測、CDNサーバー情報、総合テストのツールを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP インターネット速度テスト
インターネット速度をテストするための Model Context Protocol(MCP)の実装です。標準化されたインターフェースを通じて、AI モデルやエージェントがネットワークパフォーマンスの指標を測定、分析、報告できるようにします。
📦 PyPI で利用可能: https://pypi.org/project/mcp-internet-speed-test/
🚀 クイックスタート:
pip install mcp-internet-speed-test
mcp-internet-speed-test
MCP とは?
Model Context Protocol(MCP)は、大規模言語モデル(LLM)が外部のツールやデータソースとやり取りするための標準化された方法を提供します。「AI アプリケーションの USB-C」のようなものと考えてください。AI システムが現実世界の機能や情報にアクセスできるようにする、共通のインターフェースです。
機能
- スマートな段階的テスト:最適な精度を得るため、8 秒のしきい値を設けた SpeedOf.Me の手法を使用します
- ダウンロード速度テスト:GitHub リポジトリ(Git LFS)の 128KB から 128MB までのファイルを使って帯域幅を測定します
- アップロード速度テスト:128KB から 128MB までのストリーミングデータを使ってアップロード帯域幅をテストします
- レイテンシテスト:複数のサンプルを使ってネットワークレイテンシを測定し、最小値を報告します
- ジッター分析:複数のレイテンシサンプル(デフォルト:5)を使ってネットワークの安定性を計算します
- 複数 CDN のサポート:Fastly、Cloudflare、AWS CloudFront を検出し、情報を提供します
- 地理的位置:POP コードを物理的な場所に対応付けます(世界中の 50 か所以上)
- キャッシュ分析:HIT/MISS の状態とキャッシュヘッダーを検出します
- サーバーメタデータ:
x-served-by、via、x-cacheなどの詳細な CDN ヘッダーを取得します - 包括的なテスト:すべてのテストを実行し、完全な指標を取得する単一の関数
インストール
前提条件
- 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 を識別する 3 文字のコードです(例:「MEX」、「QRO」、「DFW」)
- キャッシュステータス:コンテンツがキャッシュから配信されたか(HIT)、オリジンから取得されたか(MISS)を示します
- サーバーヘッダー:
x-served-by、via、x-cacheを含む完全な HTTP ヘッダーです
技術的な実装
スマートなテスト方法
- 段階的なアプローチ:小さなファイル(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
主要コンポーネント
Configuration Constants
GITHUB_MEDIA_URL:テストファイルリポジトリのベース URL(Git LFS メディアエンドポイント)UPLOAD_ENDPOINTS:優先順位付きのアップロードテストエンドポイント一覧SIZE_PROGRESSION:段階的なテストに使用するファイルサイズの順序付きリスト(2 の累乗)*_POP_LOCATIONS:CDN コードと地理的な場所の対応付け
Core Functions
extract_server_info():HTTP ヘッダーを解析して CDN プロバイダーを特定しますmeasure_*():さまざまな指標を測定する個別のテスト関数run_complete_test():包括的なテスト一式を実行します
Configuration Customization
リポジトリをクローンすると、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"
Contributing
これは実験的なプロジェクトであり、貢献を歓迎します。
- Issues:バグの報告や機能のリクエスト
- Pull Requests:コードの改善案の提出
- Documentation:この README の改善
- Testing:さまざまなネットワーク状況や CDN でのテスト
License
このプロジェクトは MIT License の下でライセンスされています。詳細については LICENSE ファイルをご覧ください。
Acknowledgments
- AI ツールのやり取りを標準化している MCP Framework のメンテナー
- ドキュメントや例を提供している Model Context Protocol コミュニティ
- 増分テストの手法を提供している SpeedOf.Me チーム(仕組み)。以下の手法に関する説明をご覧ください。
- 公式の SpeedOf.Me MCP サーバーについては、@speedofme/mcpをご覧ください。
SpeedOf.Me Testing Methodology
出典: SpeedOf.Me — 仕組み
このセクションでは、このプロジェクトが参照する SpeedOf.Me のテスト手法を掲載しています。 2026年3月8日に取得しました。
クリックして手法の全文を表示
概要
SpeedOf.Me は、サンプルファイルをダウンロードおよびアップロードしてインターネット接続をテストします。単一の HTTP 接続と大容量の連続したファイルを使用することで、実際の Web コンテンツの配信方法と同様に、実際のブラウジングやダウンロードのパフォーマンスを反映します。
ダウンロードテスト
- 最小のサンプルサイズ(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(Point of Presence)と呼ばれるサーバーを106 以上の都市で使用しています。各 PoP は複数のサーバーで構成される場合があり、世界各地の主要なインターネット交換ポイントに近い重要な地域に配置されています。
テストが始まると、SpeedOf.Me は最も信頼性が高く応答性に優れたサーバーを自動的に選択します。最も近いサーバーとは限りません。最適なサーバーを決定する際には、いくつかの要素が考慮されます。この処理は CDN テクノロジーによって行われ、最も正確で一貫性のあるテスト結果が得られます。
正確性
この方法の正確性を支える主な違いは次のとおりです。
- 単一の連続ダウンロード — Web ページやメディアファイルの一般的な配信方法と同様に、大きなサンプルファイルを連続してダウンロードします。他の速度テストでは、小さなチャンクを並行して転送し、速度を推定するために調整を加えます。
- 複数のグローバルサーバー — 異なる地域の PoP を使用することで、より現実に即した結果を得られます。他のサービスでは、最寄りの物理サーバー(ISP ネットワーク内の場合もあります)を選択することが多く、結果が実際より高くなる可能性があります。
- プラグイン不要 — 追加のソフトウェアを必要とせず、クライアントから直接テストを実行します。
このプロジェクトでの方法の実装
| SpeedOf.Me の概念 | このプロジェクトでの実装 |
|---|---|
| 段階的なダウンロード | measure_download_speed() が SIZE_PROGRESSION を反復し、経過時間が sustain_time(デフォルトは 8 秒)以上になると終了します |
| 段階的なアップロード | measure_upload_speed() がチャンクをストリーミングし、経過時間が sustain_time 以上になると終了します |
| 8 秒のしきい値 | sustain_time パラメーターで設定可能(1~8 秒、デフォルトは 8 秒) |
| レイテンシ — 10 サンプル、最小値 | measure_latency(samples=10) が min_latency を報告します |
| ジッター — 変動 | measure_jitter(samples=5) が平均値からの偏差の平均を報告します |
| PoP を備えた CDN | ダウンロードファイルは Fastly CDN 経由で GitHub から配信され、アップロードには Cloudflare Workers を使用します |
| サンプルファイルサイズ(2 のべき乗) | inventer-dev/speed-test-files(Git LFS)に 128 KB~128 MB を保存します |
| サーバーの自動選択 | CDN が地理的ルーティングを処理し、レスポンスヘッダーから PoP を検出します |
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。
