mcpField
H
http_mcp_headers

http_mcp_headers

github.com/githubセキュリティ5.5k56 回インストール今日更新
リポジトリ

http_mcp_headers について

copilot engineでHTTP MCPヘッダー内のGitHub Actionsシークレットを扱うためのリファレンススキルです。シークレットを環境変数経由で渡し、MCP設定には変数参照を出力する方法を説明します。

主な機能

  1. 01ヘッダー内のシークレット式の抽出
  2. 02シークレットのデフォルト値に対応
  3. 03シークレットを環境変数参照に置換
  4. 04実行ステップへの必要な変数の受け渡し
  5. 05MCP設定へのシークレット記載を回避

活用シーン

  1. 01認証が必要なHTTP MCPヘッダーの設定
  2. 02Copilotワークフロー用MCP設定の生成
  3. 03GitHub ActionsシークレットのMCPサーバーへの受け渡し

MCP 対応

HTTP MCPサーバーのヘッダーでシークレットを扱う方法を説明します。必要な環境変数を渡し、MCP設定には変数参照を出力します。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/github/gh-aw --skill http_mcp_headers

インストール後、Claude Code で/http_mcp_headersを入力して読み込まれたか確認します。

詳細

HTTP MCP ヘッダーシークレットのサポート - 実装の概要

copilot エンジンで HTTP MCP ヘッダーシークレットをサポートする際は、このリファレンスを使用してください。

問題の説明

HTTP MCP ヘッダーに GitHub Actions のシークレットが含まれる場合、mcp-config.json では次の処理が必要です。

  1. ヘッダーからシークレットを抽出する(例:${{ secrets.DD_API_KEY }})
  2. 実行ステップでそれらの環境変数を宣言する
  3. MCP 設定の「env」セクションで、それらの変数をパススルーするよう設定する
  4. ヘッダーセクションで渡された変数を使用する

ワークフローの例

on:
  workflow_dispatch:
permissions:
  contents: read
engine: copilot
mcp-servers:
  datadog:
    type: http
    url: "https://mcp.datadoghq.com/api/unstable/mcp-server/mcp"
    headers:
      DD_API_KEY: "${{ secrets.DD_API_KEY }}"
      DD_APPLICATION_KEY: "${{ secrets.DD_APPLICATION_KEY }}"
      DD_SITE: "${{ secrets.DD_SITE || 'datadoghq.com' }}"
    allowed:
      - search_datadog_dashboards
      - search_datadog_slos
      - search_datadog_metrics
      - get_datadog_metric

# Datadog Dashboard Search

Search for Datadog dashboards and provide a summary.

生成される出力

1. MCP 設定(mcp-config.json)
{
  "mcpServers": {
    "datadog": {
      "type": "http",
      "url": "https://mcp.datadoghq.com/api/unstable/mcp-server/mcp",
      "headers": {
        "DD_API_KEY": "${DD_API_KEY}",
        "DD_APPLICATION_KEY": "${DD_APPLICATION_KEY}",
        "DD_SITE": "${DD_SITE}"
      },
      "tools": [
        "search_datadog_dashboards",
        "search_datadog_slos",
        "search_datadog_metrics",
        "get_datadog_metric"
      ],
      "env": {
        "DD_API_KEY": "\\${DD_API_KEY}",
        "DD_APPLICATION_KEY": "\\${DD_APPLICATION_KEY}",
        "DD_SITE": "\\${DD_SITE}"
      }
    }
  }
}
2. 実行ステップの環境変数
env:
  DD_API_KEY: ${{ secrets.DD_API_KEY }}
  DD_APPLICATION_KEY: ${{ secrets.DD_APPLICATION_KEY }}
  DD_SITE: ${{ secrets.DD_SITE || 'datadoghq.com' }}
  COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }}
  # ... other env vars

GH_AW_MCP_CONFIG は意図的に YAML の env: ブロックに含めていません。実行スクリプトから export GH_AW_MCP_CONFIG="$HOME/.copilot/mcp-config.json" としてエクスポートすることで、$HOME が実行時に解決されます。GitHub Actions は env: の値をシェル展開しないため、HOME が /home/runner ではないセルフホスト型またはコンテナー化されたランナーで正しく動作させるには、export を使ってパスを設定する必要があります。

実装の詳細

主な関数
  1. extractSecretsFromValue(value string) - 文字列からシークレット式を抽出します

    • ${{ secrets.VAR_NAME }} パターンを解析します
    • デフォルト値を処理します:${{ secrets.VAR || 'default' }}
    • 変数名と完全な式のマップを返します
  2. extractSecretsFromHeaders(headers map[string]string) - HTTP ヘッダーからすべてのシークレットを抽出します

    • すべてのヘッダー値を反復処理します
    • 一意なシークレット式をすべて収集します
    • 統合されたシークレットのマップを返します
  3. replaceSecretsWithEnvVars(value string, secrets map[string]string) - シークレット式を環境変数の参照に置き換えます

    • ${{ secrets.DD_API_KEY }} を ${DD_API_KEY} に変換します
    • MCP 設定のヘッダーのレンダリングで使用されます
  4. collectHTTPMCPHeaderSecrets(tools map[string]any) - すべての HTTP MCP ツールからシークレットを収集します

    • すべてのツールをスキャンして、HTTP MCP 設定を探します
    • 各ツールのヘッダーからシークレットを抽出します
    • 実行ステップの環境変数用に統合されたマップを返します
レンダリングロジック
renderSharedMCPConfig(mcp-config.go)内:
  1. copilot エンジン用の HTTP MCP 設定をレンダリングする際にシークレットを抽出します
  2. シークレットが見つかった場合は、プロパティの順序にenv セクションを追加します
  3. シークレット式ではなく環境変数の参照を使ってヘッダーをレンダリングします
  4. パススルー構文(\${VAR_NAME})を使ってenv をレンダリングします
GetExecutionSteps(copilot_engine.go)内:
  1. ワークフローツールからすべての HTTP MCP ヘッダーシークレットを収集します
  2. シークレット式を使って、実行ステップの環境変数マップに追加します

セキュリティ上の利点

  1. MCP 設定にシークレットが表示されません - 環境変数の参照のみが含まれます
  2. GitHub Actions のシークレットを適切に処理します - ${{ secrets.* }} 構文を使用します
  3. 環境を分離します - 各 MCP サーバーには必要なシークレットのみが渡されます
  4. 一貫したパターンです - 既存の GitHub リモート MCP サーバーの実装に準拠しています

テストカバレッジ

ユニットテスト(mcp_http_headers_test.go)
  • extractSecretsFromValue
  • extractSecretsFromHeaders
  • replaceSecretsWithEnvVars
  • collectHTTPMCPHeaderSecrets
  • HTTP ヘッダーを含む renderSharedMCPConfig
統合テスト(copilot_mcp_http_integration_test.go)
  • シークレットを含む単一の HTTP MCP ツール
  • 複数の HTTP MCP ツール
  • シークレットを含まない HTTP MCP
  • プロパティの順序
  • 環境変数のソート

すべてのテストに合格 ✓

コメント