Terminal-based Chat Client with MCP Server Integration について
Python 製のターミナルチャットクライアントと天気 MCP サーバーのサンプルで、チャットと MCP ツール連携を試す人向けです。クライアントは OpenAI に接続し、サーバーは米国の警報と予報を提供します。
主な機能
- 01非同期ターミナルチャット
- 02OpenAI API 連携
- 03州ごとの気象警報
- 04位置情報による予報
- 05MCP ツールの実行
活用シーン
- 01ターミナルチャットで天気を質問
- 02MCP クライアントとサーバーの例を検証
MCP 対応
クライアントは stdio 経由で MCP サーバーに接続し、ツールを呼び出します。サンプルの天気 MCP サーバーは、警報と予報のツールを MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP サーバー連携機能を備えたターミナルベースのチャットクライアント
このプロジェクトでは、MCP サーバーに接続し、OpenAI の API と連携するターミナルベースのチャットクライアントインターフェースの構築方法を紹介します。MCP の機能の例として、シンプルな天気サービスが含まれています。
前提条件
- Python 3.8 以降
- UV パッケージマネージャー(高速で信頼性の高い Python パッケージインストーラーおよびリゾルバー)
インストール
1. UV のインストール
UV は、従来の pip などのツールと比べて大幅にパフォーマンスが向上する、最新の Python パッケージマネージャーです。Rust で書かれており、次の機能を備えています。
- パッケージをより高速にインストール
- 信頼性の高い依存関係の解決
- 仮想環境管理機能を内蔵
- 既存の Python ツールと互換性あり
UV をインストールするには、次のコマンドを実行します。
curl -LsSf https://astral.sh/uv/install.sh | sh
2. プロジェクトのセットアップ
- 新しいプロジェクトを初期化します。
uv init
- 仮想環境を作成して有効化します。
uv venv
source .venv/bin/activate # On Unix/macOS
# or
.venv\Scripts\activate # On Windows
- 必要なパッケージをインストールします。
uv pip install httpx mcp[cli] openai python-dotenv
プロジェクト構成と実装ガイド
このプロジェクトは、チャットクライアント(client.py)と天気サービス(weather.py)の 2 つの主要なコンポーネントで構成されています。それぞれのコンポーネントがどのように構築され、各部分が何をするのかを見ていきましょう。
チャットクライアントの構築(client.py)
チャットクライアントは、MCP サーバーと OpenAI の API の両方に接続する非同期 Python アプリケーションとして構築されています。構成は次のとおりです。
-
インポートとセットアップ
import asyncio import os import sys from typing import Optional from contextlib import AsyncExitStack from dotenv import load_dotenv import openai from mcp import ClientSession, StdioServerParameters from mcp.client.stdio import stdio_clientasyncio:非同期プログラミングに使用AsyncExitStack:非同期リソースのクリーンアップを管理dotenv:.env ファイルから環境変数を読み込みmcp:サーバー通信に使用する MCP の中核機能
-
MCPClient クラス メインのクライアントクラスは、次の処理を担います。
- MCP サーバーへの接続
- OpenAI API との連携
- メッセージ処理
- ツールの実行
主なメソッド:
connect_to_server():MCP サーバーへの接続を確立しますprocess_query():ユーザーの問い合わせとツールの実行を処理しますchat_loop():対話型のチャットセッションを管理しますcleanup():リソースを適切にクリーンアップします
-
メイン関数
async def main(): client = MCPClient() try: await client.connect_to_server(sys.argv[1]) await client.chat_loop() finally: await client.cleanup()- クライアントを初期化するエントリーポイント
- 指定されたサーバーに接続
- チャットループを実行
- 適切なクリーンアップを保証
天気サービスの構築(weather.py)
天気サービスは、National Weather Service API を通じて天気情報を提供する MCP サーバーとして構築されています。
-
サービスの初期化
from mcp.server.fastmcp import FastMCP mcp = FastMCP("weather")- 「weather」という名前の MCP サーバーインスタンスを作成
- サーバーのインフラストラクチャをセットアップ
-
API 連携
NWS_API_BASE = "https://api.weather.gov" USER_AGENT = "weather-app/1.0"- National Weather Service API の定数を定義
- API リクエスト用の適切なユーザーエージェントを設定
-
ヘルパー関数
make_nws_request():適切なエラー処理を行いながら API リクエストを処理しますformat_alert():気象警報を読みやすいテキストに整形します
-
MCP ツール 主なツールを 2 つ実装しています。
a.
get_alerts(state):- 米国の州を対象に、有効な気象警報を取得します
- 整形済みの警報情報を返します
b.
get_forecast(latitude, longitude):- 指定した場所の天気予報を取得します
- 詳細な天気予報情報を返します
-
サーバーの実行
if __name__ == "__main__": mcp.run(transport="stdio")- stdio トランスポートを使用して MCP サーバーを実行
- チャットクライアントとの通信を可能にします
使用方法
- OpenAI API キーを記載した
.envファイルを作成します。
OPENAI_API_KEY=your_api_key_here
- MCP サーバーを起動します。
python weather.py
- 別のターミナルで、チャットクライアントを実行します。
python client.py weather.py
- チャットインターフェースを操作します。
- 一般的な質問をして AI とチャットします
- 天気に関する質問をして天気情報を取得します
- 例:「カリフォルニアの天気は?」または「ニューヨークに警報は出ていますか?」
Cursor の Agent モードでの使用
この MCP サーバーは Cursor の Agent モードに直接統合できます(注:Cursor の Ask 機能とは異なり、Agent モードでのみ動作します)。セットアップ方法は次のとおりです。
Cursor への MCP サーバーの追加
- Cursor の設定を開きます
Features>MCPに移動します+ Add New MCP Serverをクリックします- フォームに入力します:
- Type:
stdioを選択します - Name:「Weather Service」(または任意の名前)
- Command:weather サーバーを実行するためのフルパスを入力します:
python /full/path/to/your/weather.py
- Type:
代替方法:プロジェクト固有の設定
.cursor/mcp.json ファイルを作成して、プロジェクト用に MCP サーバーを設定することもできます:
- プロジェクトのルートに
.cursorディレクトリを作成します:
mkdir .cursor
- 以下の内容で
mcp.jsonを作成します:
{
"mcpServers": {
"weather": {
"command": "python",
"args": [
"/full/path/to/your/weather.py"
]
}
}
}
Weather ツールの使用
- Cursor の Composer(エージェントモード)を開きます
- エージェントは、天気情報が必要なときに自動的に検出します
- 質問の例:
- 「サンフランシスコの現在の天気は?」
- 「カリフォルニア州に気象警報は出ていますか?」
- 「ニューヨーク市の天気予報を教えて」
重要な注意事項
- ツールは Cursor のエージェントモード(Composer)でのみ使用でき、Ask モードでは使用できません
- デフォルトでは、Cursor は MCP ツールを使用する前に承認を求めます
- 新しく追加したツールを表示するには、MCP 設定の更新ボタンをクリックする必要がある場合があります
- サーバーはローカルマシンで実行されている必要があります(リモートサーバーには SSE トランスポートが必要です)
機能
- OpenAI と連携したリアルタイムのチャットインターフェース
- 拡張可能な機能を実現する MCP サーバー連携
- 警報と予報に対応した気象サービス
- パフォーマンスを向上させる非同期処理
- 適切なエラー処理とリソースのクリーンアップ
- API キー用の環境変数設定
コントリビューション
問題の報告や機能改善のリクエストをぜひお寄せください!
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。