1. 主要ページへ移動
  2. メニューへ移動
  3. ページ下へ移動

QES ブログ

記事公開日

【GitHub Copilot CLI】正式リリースされたGitHub Copliot CLIでMCPサーバーを動かしてみた

  • このエントリーをはてなブックマークに追加

こんにちは!DXソリューション営業本部の近藤です。

今回は、正式にリリースされた「GitHub Copilot CLI」を使って、「MCP(Model Context Protocol)サーバー」を実際に動かしてみたので、その手順や感想を皆さんにご紹介します!


GitHub Copilot CLIとは?

GitHub Copilot CLIは、普段お使いのコマンドプロンプトやターミナル上で、GitHub Copilotを直接利用できる機能です。
2026年2月26日に、すべてのGitHub Copilot有料プラン向けに一般提供(GA)が開始されました。

単なるチャットでの質問対応だけでなく、タスクの計画からファイルの編集、テストの実行まで、ターミナル画面から離れることなく自律的に作業をこなしてくれる強力な「AIエージェント」です。用途に合わせて、OpenAIやAnthropic、Googleなどの最新モデルから好みのAIモデルを選択して利用できます。


MCP(Model Context Protocol)とは?

MCP(モデルコンテキストプロトコル)は、AIアプリケーションと外部のシステムを連携させるためのオープンな標準規格です。
MCPサーバーをGitHub Copilot CLIに接続することで、Copilotが外部の最新情報やツール、データベースなどに安全にアクセスできるようになり、より高度な回答をしてくれるようになります。


MCPサーバー追加手順の比較(プレビュー版とGA版の違い)

今回一般提供(GA)が開始されたGitHub Copilot CLIでは、パブリックプレビュー版の頃と比べて、MCPサーバーの追加や管理の手順が圧倒的に簡単になりました。
具体的な進化のポイントを以下の表にまとめました。

項目 プレビュー版(Public Preview) 一般提供版(GA)
主な設定方法 設定ファイル(YAML等)の直接編集 /mcp コマンドによる対話型設定
追加手順 手動でパスや環境変数を記述 /mcp add でウィザード形式入力
管理コマンド 特になし(ファイル編集のみ) /mcp list, /mcp remove 等で管理可能
ディレクトリ単位の個別設定 ユーザー全体の設定が基本で、個別設定が難しかった プロジェクトのルートディレクトリに設定ファイルを置いたり、.github/配下にルールを配置することで、そのプロジェクト(リポジトリ)専用の設定をAIに自動適用される
プラグインの一括導入 MCPサーバー等を個別に手作業でセットアップ /plugin install owner/repoコマンドを使用し、外部のMCPサーバーやAIスキルがセットになった拡張機能(プラグイン)をGitHubから直接一括でインストールできる

このように、プレビュー版では設定ファイルを直接編集する手間がありましたが、GA版では対話形式で誰でも直感的に設定できるようになっています!また、プロジェクト単位での自動読み込み機能やプラグインのサポートなど、拡張性も大幅に強化されました。


1. MCPサーバー(Weather API)の構築

今回は、Pythonを使って簡単な「天気予報(Weather)」のMCPサーバーを作成しました。
開発環境は以下の通りです。

  • OS: Windows 11
  • Python: 3.13.7
  • GitHub Copilot CLI: v1.0.11

こちらのコードは、Model Context Protocolの公式チュートリアル(Build an MCP serverのものを引用して構築しています。
Python専用の「FastMCP」というモジュールを使用すると、型のヒントやドキュメント文字列から自動的にAI向けのツール定義を生成してくれるため、非常に簡単に構築できます。
チュートリアル通りに、アメリカ国立気象局のAPIから気象警報(get_alerts)と天気予報(get_forecast)の情報を取得するツールを実装しました。

weather.py のコードは以下の通りです。

from typing import Any
import httpx
from mcp.server.fastmcp import FastMCP

# Initialize FastMCP server
mcp = FastMCP("weather")

# Constants
NWS_API_BASE = "https://api.weather.gov"
USER_AGENT = "weather-app/1.0"

async def make_nws_request(url: str) -> dict[str, Any] | None:
    """Make a request to the NWS API with proper error handling."""
    headers = {
        "User-Agent": USER_AGENT,
        "Accept": "application/geo+json"
    }
    async with httpx.AsyncClient() as client:
        try:
            response = await client.get(url, headers=headers, timeout=30.0)
            response.raise_for_status()
            return response.json()
        except Exception:
            return None

def format_alert(feature: dict) -> str:
    """Format an alert feature into a readable string."""
    props = feature.get("properties", {})
    return f"Event: {props.get('event', 'Unknown')}\nArea: {props.get('areaDesc', 'Unknown')}\nSeverity: {props.get('severity', 'Unknown')}\nDescription: {props.get('description', 'No description available')}\nInstructions: {props.get('instruction', 'No specific instructions provided')}"

@mcp.tool()
async def get_alerts(state: str) -> str:
    """Get weather alerts for a US state.

    Args:
        state: Two-letter US state abbreviation (e.g. CA, NY)
    """
    url = f"{NWS_API_BASE}/alerts/active/area/{state}"
    data = await make_nws_request(url)

    if not data or "features" not in data:
        return f"Unable to fetch alerts for state: {state}"

    if not data["features"]:
        return "No active alerts for this state."

    alerts = [format_alert(feature) for feature in data["features"]]
    return "\n---\n".join(alerts)

@mcp.tool()
async def get_forecast(latitude: float, longitude: float) -> str:
    """Get weather forecast for a location.

    Args:
        latitude: Latitude of the location
        longitude: Longitude of the location
    """
    # First, get the grid point
    points_url = f"{NWS_API_BASE}/points/{latitude},{longitude}"
    points_data = await make_nws_request(points_url)

    if not points_data:
        return f"Unable to fetch grid point data for coordinates: {latitude}, {longitude}. This API only supports US locations."

    # Get forecast from grid point
    forecast_url = points_data.get("properties", {}).get("forecast")
    if not forecast_url:
        return "Unable to get forecast URL from grid point data"

    forecast_data = await make_nws_request(forecast_url)
    if not forecast_data:
        return "Unable to fetch forecast data"

    periods = forecast_data.get("properties", {}).get("periods", [])
    if not periods:
        return "No forecast periods available"

    # Format the first 5 periods
    formatted_forecast = []
    for period in periods[:5]:
        name = period.get("name", "Unknown")
        temp = f"{period.get('temperature', 'Unknown')}°{period.get('temperatureUnit', 'F')}"
        wind = f"{period.get('windSpeed', 'Unknown')} {period.get('windDirection', '')}"
        details = period.get("detailedForecast", "No details available")
        
        formatted_forecast.append(
            f"{name}:\nTemperature: {temp}\nWind: {wind}\nForecast: {details}"
        )

    return "\n---\n".join(formatted_forecast)

if __name__ == "__main__":
    # Initialize and run the server
    mcp.run(transport='stdio')

2. GitHub Copilot CLIにMCPサーバーを追加する

次に、作成したMCPサーバーをCopilot CLIに登録します。
まず、コマンドプロンプトで以下のコマンドを入力してCLIを起動します。

$ copilot

CLIの対話モードが立ち上がったら、続けて /mcp add コマンドを入力して設定フォームを開きます。

> /mcp add

設定フォームは以下の画像のようになっていてます。
Server Typeなどの項目は分かりやすい選択肢が表示される対話型のUIになっています。


設定フォームが表示されたら、Tabキーを使って以下の情報を順番に入力していきます。パスの部分はご自身の環境に合わせて変更してください。

Server Name: weather_tool
Server Type: STDIO
Command: python "C:\Users\your_username\weather\weather.py"
Environment Variables: (空欄のままEnter)
Tools: *

各入力項目には、それぞれ以下のような意味があります。

  • Server Name(サーバー名): Copilotがサーバーを識別するための独自の名前です。今回は weather_tool としました。
  • Server Type(サーバーの種類): サーバーの通信方式を番号で選択します。今回は自分のPC上でプログラムを直接起動してやり取りする 2(STDIO) を選びます(外部のネットワークサーバーと通信する場合は HTTP や SSE を選びます)。
  • Command(コマンド): サーバーを起動するための実行コマンドと、ファイルの絶対パスを指定します。
  • Environment Variables(環境変数): APIキーやトークンが必要な場合にJSON形式(例:{"API_KEY": "..."})で入力します。今回の天気予報APIはキーが不要なため、空欄のままで進めます。
  • Tools(ツール): AIに使用を許可するツールを指定します。すべて許可するため * と入力します。

入力後、ctrl+s を押して構成を保存します。
「MCP configuration saved successfully!」と表示され、stdio として登録されれば成功です。これで再起動なしですぐに使用可能になります。


3. 実際に天気を質問してみる

設定が完了したので、GitHub Copilot CLIで実際にプロンプトを入力してみます。
今回は「ニューヨーク(NY)で今出ている気象警報を教えて。あと、今後の予報もお願い。」と質問してみました。


すると、Copilotが質問内容を分析し、先ほど作成したMCPサーバーのツールである get_alertsget_forecast を自動的に呼び出そうとします。
実行の許可(Do you want to use this tool?)が求められるので、「1. Yes」を選択して承認します。


ツールから無事にニューヨークの天気データが取得でき、気象警報の有無に加えて、今後の天気予報が気温や天気、風の強さが表形式で出力されました。
「木曜日の昼間は過ごしやすい陽気ですが、夜から金曜にかけてまとまった雨に…」といったポイントまで、整理して回答してくれました!


まとめ

今回、正式リリースされたGitHub Copilot CLIでMCPサーバーを動かしてみましたが、「こんなにも簡単に自分のツールをAIに組み込めるんだ!」というのが正直な感想です。
複雑な設定ファイルの編集作業がなくなり、/mcp add コマンドの対話形式でサクサクと追加できるのは素晴らしいものでした。また、自然言語で指示するだけで、AIが勝手にツールを選択して実行してくれる仕組みにとても感動しました。
この基本構造さえあれば、社内の独自データベースや他のAPIと連携させるなど、機能をさらに追加して拡張できそうです。
皆さんもぜひ、GitHub Copilot CLIとMCPを活用して、自分だけの環境を構築してみてください!


QUICK E-Solutionsでは、AIサービスを利用したシステム導入のお手伝いをしております。
それ以外でも様々なアプリケーションの開発・導入を行っております。提供するサービス・ソリューションにつきましては こちら に掲載しております。
システム開発・構築でお困りの問題や弊社が提供するサービス・ソリューションにご興味をお持ちいただけましたら、お気軽にお問い合わせください。

  • このエントリーをはてなブックマークに追加

お問い合わせ

Contact

ご質問やご相談、サービスに関する詳細など、何でもお気軽にご連絡ください。下記のお問い合わせフォームよりお気軽に送信ください。

お問い合わせ

資料ダウンロード

Download

当社のサービスに関する詳細情報を掲載した資料を、下記のページよりダウンロードいただけます。より深く理解していただける内容となっております。ぜひご活用ください。

資料ダウンロード