コンテンツにスキップ

データフローと観測ポイント

Hatago MCP Hubを経由するデータの流れを理解することで、トラブルシューティングとパフォーマンス最適化が容易になります。

観測点取得できる情報典型的なエラーログコマンド
📍1: Hub入力リクエスト内容、タイムスタンプJSON解析エラー、認証失敗--verbose
📍2: サーバー通信転送内容、レスポンス時間タイムアウト、接続拒否--log-level debug
📍3: Hub出力集約結果、エラー内容集約エラー、変換失敗--verbose
Terminal window
hatago serve # デフォルト: info 相当(--verbose/--quiet で調整)
# 表示される情報:
# - サーバー起動/停止
# - 主要なエラー
# - 接続状態の変化

例:

[INFO] Starting server: filesystem-local
[INFO] Hub ready on stdio
[ERROR] Server 'api-server' failed to start: Connection refused
Terminal window
# ログをファイルに出力しながら監視
hatago serve --verbose 2>&1 | tee hatago.log
# 特定のパターンを監視
hatago serve --verbose 2>&1 | grep -E "(ERROR|WARN|timeout)"
# タイムスタンプ付きで記録
hatago serve --verbose 2>&1 | ts '[%Y-%m-%d %H:%M:%S]'
scripts/monitor-hatago.js
const { spawn } = require('child_process');
const readline = require('readline');
const metrics = {
requests: 0,
responses: 0,
errors: 0,
totalTime: 0,
serverStats: {}
};
const hatago = spawn('npx', ['@himorishige/hatago-mcp-hub', 'serve', '--verbose'], {
stdio: ['pipe', 'pipe', 'pipe']
});
const rl = readline.createInterface({
input: hatago.stderr,
crlfDelay: Infinity
});
rl.on('line', (line) => {
// リクエストカウント
if (line.includes('Received request')) {
metrics.requests++;
}
// レスポンスカウント
if (line.includes('Response sent')) {
metrics.responses++;
}
// エラーカウント
if (line.includes('ERROR')) {
metrics.errors++;
}
// レスポンス時間の抽出
const timeMatch = line.match(/\((\d+)ms\)/);
if (timeMatch) {
metrics.totalTime += parseInt(timeMatch[1]);
}
// 定期的に統計を出力
if (metrics.requests % 10 === 0) {
console.log('📊 メトリクス:', {
...metrics,
avgTime: metrics.totalTime / metrics.responses || 0
});
}
});
レイヤーエラー症状診断コマンド一次対応
1. 起動command not foundwhich hatagoPATHを確認、再インストール
2. 設定読込Invalid configcat hatago-config.json | jq .JSON構文を修正
3. 環境変数${VAR} not foundecho $VARexport設定、.envファイル確認
4. サーバー起動spawn ENOENTls -la $(which npx)コマンドパスを絶対パスに
5. ネットワークECONNREFUSEDcurl -I <url>URL確認、ファイアウォール
6. 認証401 Unauthorizedecho $API_TOKENトークン設定、有効期限確認
7. タイムアウトRequest timeouttime curl <url>タイムアウト値を増やす
  1. エラーメッセージの確認

    Terminal window
    hatago serve --verbose 2>&1 | grep -A5 -B5 ERROR
  2. 該当サーバーの個別テスト

    Terminal window
    # 問題のサーバーだけを有効化
    hatago serve --tags problem-server --verbose
  3. 直接実行テスト

    Terminal window
    # Hubを介さず直接実行
    npx @modelcontextprotocol/server-filesystem .
  4. ネットワーク診断

    Terminal window
    # 接続性確認
    nc -zv api.example.com 443
    # DNS解決確認
    nslookup api.example.com
Terminal window
# タイミング情報を抽出
hatago serve --verbose 2>&1 | \
grep -oP '\(\K\d+(?=ms)' | \
awk '{sum+=$1; count++} END {print "平均応答時間: " sum/count "ms"}'
# サーバー別の応答時間
hatago serve --verbose 2>&1 | \
grep -E "Server .+ response" | \
awk '{print $2, $4}' | \
sort | uniq -c

🛠️ トラブルシューティングツール

Section titled “🛠️ トラブルシューティングツール”
scripts/diagnose-hatago.sh
#!/bin/bash
echo "🔍 Hatago診断開始..."
# 1. 環境チェック
echo -e "\n📋 環境情報:"
echo "Node.js: $(node --version)"
echo "npm: $(npm --version)"
echo "Hatago: $(npx @himorishige/hatago-mcp-hub --version 2>/dev/null || echo 'Not installed')"
# 2. 設定ファイルチェック
echo -e "\n📄 設定ファイル:"
if [ -f hatago-config.json ]; then
jq . hatago-config.json >/dev/null 2>&1 && \
echo "✅ Valid JSON" || \
echo "❌ Invalid JSON"
echo "サーバー数: $(jq '.mcpServers | length' hatago-config.json)"
else
echo "❌ hatago-config.json not found"
fi
# 3. 環境変数チェック
echo -e "\n🔐 環境変数:"
for var in NODE_ENV GITHUB_TOKEN OPENAI_API_KEY; do
if [ -z "${!var}" ]; then
echo "⚠️ $var: Not set"
else
echo "$var: Set (${#var} chars)"
fi
done
# 4. 接続テスト
echo -e "\n🌐 接続テスト:"
echo '{"jsonrpc":"2.0","method":"resources/read","id":1,"params":{"uri":"hatago://servers"}}' | \
timeout 5 npx @himorishige/hatago-mcp-hub serve --stdio 2>/dev/null | \
jq -r '.result.contents[0].text' | \
jq -r '.total' | \
grep -Eq '^[0-9]+$' && echo "✅ Hub is responding" || echo "❌ Hub not responding"
echo -e "\n✨ 診断完了"

アーキテクチャ詳細

システム設計の詳細

トラブルシューティング

代表的な失敗と対処法

設定リファレンス

設定項目の詳細