Skip to main content
Glama
AryanBansal-launch

observer-launch-mcp

observer-launch-mcp

Observe のデータについてClaudeに質問できます。最近のエラー、よくある障害、ポッドごとのログ量など、OPALを手書きせずに確認できます。これは、ClaudeにObserveテナントへの直接のライブアクセスを提供するMCPサーバーです。

セットアップ(2ステップ)

1. セットアップウィザードを実行します。 Observeの認証情報とデータセットエイリアスを尋ねられ、自動的にClaude Codeに登録されます。

npx @aryanbansal-launch/observer-launch-mcp init

次の項目を尋ねられます。

  • ObserveカスタマーID -- 数字で、ObserveのURLに含まれています。

  • Observe APIキー -- アカウント管理 → マイAPIトークン で作成します。(インジェスト/データストリームトークンではありません。似ていますが、ここでは機能しません。)

  • クラスター -- 例: eu-1。デフォルトのUSテナントの場合は空白のままにします。

  • データセットエイリアス(任意) -- よく質問するデータセットの分かりやすい名前。例: launch-management → 41249178。IDはObserve UIで確認できます。データセットを開くと、URLに含まれています。これをスキップして生のデータセットIDを使用するか、後でエイリアスを追加することもできます。

2. Claude Codeを再起動(または新しいセッションを開始)して、新しいサーバーを認識させます。動作を確認します。

Is the Observe connection working?

これで完了です。以下の他のツールがチャットで利用可能になります。

claude mcp add observe -s user \
  -e OBSERVE_CUSTOMER_ID=<your id> \
  -e OBSERVE_API_KEY=<your token> \
  -e OBSERVE_CLUSTER=eu-1 \
  -e OBSERVE_DATASETS='{"launch-management":"41249178"}' \
  -- node <path to installed server.js>

絶対パスだけが必要な場合は、最初に npx @aryanbansal-launch/observer-launch-mcp init を一度実行してください。実行する直前に、実行する正確なコマンドを表示します。最終エントリとしては npx <package> ではなく、直接 node <path> コマンドを使用してください。Claude Codeは登録されたサーバーを素の環境(PATHなし)で起動するため、npx のshebangはnodeを見つけるためにPATHが必要です。そのため、npxをコマンドとして使用すると、静かに「Failed to connect」と表示されます。ウィザードはこれを回避します。

Related MCP server: Fathom AI MCP Server

質問できること

セットアップが完了したら、自然にClaudeに話しかけるだけです。

  • 「Observe接続は機能していますか?」

  • 「設定されているサービス/データセットエイリアスは何ですか?」

  • 「過去1時間のlaunch-managementの最近のエラーを表示して」

  • 「今週のlaunch-nginxで最も一般的なエラーは何ですか?」

  • 「現在、launch-management-bgで最もログを出力しているポッドはどれですか?」

  • 「launch-nginxは過去6時間でどれだけのstderr出力を生成していますか?」

  • 「過去1時間のlaunch-telemetryのポッドごとのログ行数を数えて」

  • 「launch-logs-bg-exporterから最後の20行の生ログを取得して」

特定の質問形式でカバーされていないものについては、やりたいことを説明するだけで、Claudeが一般的なクエリツールを使用してOPALパイプラインを書いてくれます。

ツールリファレンス

ツール

用途

observe_health_check

「接続は機能していますか?」

list_known_services

「設定されているデータセット/エイリアスは何ですか?」

get_service_errors

1つのサービスの最近の生エラー(新しい順)

get_error_summary

件数でランク付けされた上位の繰り返しエラー -- 数日/数週間にわたっても高速

get_log_stats

ポッド/ノード/コンテナ/ストリーム/名前空間でグループ化されたログ数

run_opal_query

その他すべて -- 任意のデータセットに対する任意のOPALパイプライン

get_error_summary と get_log_stats はサーバー側で集約するため、時間枠に関係なく高速です。get_service_errors と run_opal_query は、集約なしで6時間以上のウィンドウをクエリすると警告を追加します。広いウィンドウでの生の行ダンプは、Observeの10万行の上限のリスクがあるためです。

ログ形式

1つのテナント内のデータセットが同じログスキーマを共有することはほとんどないため、get_service_errors と get_error_summary はデータセットごとに形式を検出し(プロセスごとに1回)、一致するクエリを構築します。

形式

見た目

エラーは

level

{"level":"error","message":...,"context":...} — アプリサービス

level が error/fatal/critical/panic/…

http

{"http.status":"500","http.method":...} — nginx/アクセスログ

http.status 5xx(4xxも含めるには minStatus=400 を渡す)

text

非構造化のもの

生の行に対するキーワード一致

すべての結果で、検出された形式が示されます。プローブをスキップするには、データセット設定で宣言します。

{ "launch-nginx": { "id": "41250854", "shape": "http" } }

プレーンな "alias": "id" エントリも機能し、自動検出されます。

カバレッジは報告され、隠されません。 level データセットでは、一部の行に解析可能な level フィールドがありません(スタックトレース、裸の文字列、非JSON出力)。重大度フィルタはそれらを認識できません。その割合が1%を超えると、ツールはそれを示します。

Note: 529 of 2136 rows (24.8%) have no parseable "level" field and were not
scanned. Pass includeUnparsed=true to keyword-match those too.

includeUnparsed=true はそれらの行をキーワードスキャンします。これはオプトインです。キーワードマッチングは「error」という単語を含む info 行もフラグするためです。

設定リファレンス

変数

必須

説明

OBSERVE_CUSTOMER_ID

はい

ObserveカスタマーID(数値)。

OBSERVE_API_KEY

はい

アカウント管理 → マイAPIトークン からのベアラートークン(長期使用にはサービスアカウントトークンも可)。

OBSERVE_CLUSTER

いいえ

例: eu-1。デフォルト(US)テナントの場合は未設定のままにします。

OBSERVE_BASE_URL

いいえ

テナントが {id}.{cluster}.observeinc.com パターンに従わない場合の完全な上書き。

OBSERVE_LOOKUP_TIMEOUT_SEC

いいえ

クエリのタイムアウト(秒)(デフォルト300)。

OBSERVE_DATASETS

いいえ

エイリアス → データセットIDのインラインJSONマッピング。例: {"logs":"41001999"}。エントリは {"id":"...","shape":"level|http|text"} として形式検出をスキップできます。

OBSERVE_DATASETS_FILE

いいえ

同じ形状のJSONファイルへのパス。大規模な設定用。

OBSERVE_MAX_RESPONSE_BYTES

いいえ

単一のツール応答の上限(デフォルト200000)。それを超えると、行は破棄され、応答にその旨が示されます。

OBSERVE_KEEP_INTERNAL_COLS

いいえ

デフォルトで削除される link_*、containerId、clusterUid 列を保持するには 1 に設定します。

データセットIDはテナント固有であり、このパッケージには意図的に含まれていません。設定がない場合、エイリアスルックアップはフォールスルーし、生の数値データセットIDを任意のツールに直接渡すことができます。

トラブルシューティング

  • ヘルスチェックが失敗する → APIキーがインジェスト/データストリームトークンである可能性があります。アカウント管理 → マイAPIトークン からのものではありません。再生成してください。

  • 手動登録したエントリで claude mcp list が「Failed to connect」と表示される → コマンドが node <path> であり、npx <package> ではないことを確認してください(上記の注記を参照)。

  • ツールが「Unknown service/dataset」を返す → list_known_services を実行して設定を確認するか、代わりに生の数値データセットIDを渡してください。

  • get_service_errors/get_error_summary が有用なものを返さない → 結果の「検出されたログ形式」の注記を確認してください。誤って推測された場合は、{"alias": {"id": "...", "shape": "http"}} で形式を明示的に固定してください(ログ形式 を参照)。text と表示された場合、ログに重大度フィールドがなく、マッチングはキーワードベースです。

  • Observe UIで確認できるエラーが結果に含まれていない → カバレッジの注記を探してください。解析可能な level のない行はデフォルトでスキップされます。includeUnparsed=true を渡してください。

貢献

npm install
npm run build   # tsc, then chmod +x on the bin entry
npm publish      # only if you intend to ship a new version

src/run-server.ts の get_error_summary/get_log_stats パターンをコピーして、他の繰り返し発生するOPALクエリ(例: サービス別コスト、レイテンシ百分位数)に使用してください。ツールに説明的な名前/説明を付けて、適切な場合にClaudeが run_opal_query よりもそれを選択するようにしてください。

Related MCP Connectors

Related MCP Servers