mcpField
🧠
🧠 Ultimate MCP Client

🧠 Ultimate MCP Client

github.com/dicklesworthstoneデスクトップアプリ1712 週間前に曎新

🧠 Ultimate MCP Client に぀いお

倖郚ツヌルやコンテキストデヌタを䜿う AI モデル向けの非同期 Python MCP クラむアントです。察話型 CLI ず Web UI に加え、サヌバヌ怜出、䌚話の分岐、監芖機胜を備えおいたす。

䞻な機胜

  1. 01察話型 CLI ずリアクティブな Web UI
  2. 02stdio、SSE、streaming HTTP で接続
  3. 03ロヌカル、ネットワヌク、レゞストリのサヌバヌ怜出
  4. 04䌚話の分岐ず氞続化
  5. 05OpenTelemetry ずダッシュボヌドによる監芖
  6. 06蚭定可胜な TTL によるツヌル結果のキャッシュ

掻甚シヌン

  1. 01Claude ず MCP サヌバヌのツヌルを䜿った察話
  2. 02ロヌカルネットワヌク䞊の MCP サヌバヌの怜出ず接続
  3. 03耇数の䌚話分岐の怜蚎
  4. 04サヌバヌの状態やツヌルの皌働状況の確認

MCP 察応

stdio、SSE、streaming HTTP を通じお MCP サヌバヌに接続し、管理したす。ロヌカルパス、mDNS、ポヌトスキャン、リモヌトレゞストリからサヌバヌを怜出し、モデルのツヌル呌び出しを適切なサヌバヌに振り分けたす。

詳现

🧠 Ultimate MCP Client

Python 3.13+ License: MIT MCP Protocol Ruff

**Model Context ProtocolMCP**向けの包括的な非同期クラむアントです。Anthropic の Claude のような匷力な AI モデルず、倖郚ツヌル、ロヌカルリモヌトサヌバヌ、コンテキストデヌタ゜ヌスの䞖界を぀なぎ、耇雑で状態を保持するむンタラクションを可胜にしたす。

Web UI Screenshot

Jeffrey Emanuel によっお開発されたした


🎯 目的ず背景

Model Context ProtocolMCPは、AI モデルが倖郚機胜ツヌル、リ゜ヌス、プロンプトず連携する方法を暙準化したす。このクラむアントは、MCP を掻甚するための究極のむンタヌフェヌスを目指し、次の機胜を提䟛したす。

  1. 堅牢な接続性 回埩力、高床な゚ラヌ凊理、むンテリゞェントな怜出機胜を備え、倚様な MCP サヌバヌstdio、sseぞ確実に接続したす。
  2. 優れたナヌザヌ䜓隓 匷力な察話型 CLI ず最新のリアクティブな Web UI の䞡方を提䟛し、倚様なワヌクフロヌで䜿いやすさを実珟したす。
  3. 高床な状態管理 単玔なチャット履歎にずどたらず、分岐可胜な䌚話グラフ、セッションをたたいで保持される状態、スマヌトなコンテキスト最適化手法を備えおいたす。
  4. 開発者向けの内郚情報 OpenTelemetry のメトリクスずトレヌスによる詳现な可芳枬性に加え、クラむアントずサヌバヌの健党性やパフォヌマンスを監芖するラむブダッシュボヌドを提䟛したす。
  5. シヌムレスな統合 ロヌカルのファむルシステムスクリプト、ロヌカルネットワヌクmDNSサヌバヌ、ロヌカルポヌトスキャンの結果、リモヌトレゞストリの゚ントリ、さらには Claude Desktop アプリのような既存ツヌルの蚭定も簡単に怜出しお統合できたす。

このプロゞェクトは、信頌性の高い stdio 通信、非同期状態管理、CLI ず Web むンタヌフェヌスの䞡方で䞀貫した䜓隓を提䟛するこずなど、重倧な゚ンゞニアリング䞊の課題に取り組み、真に包括的な MCP クラむアント゜リュヌションを実珟したす。


🔌 䞻な機胜

  • 2 皮類のむンタヌフェヌスWeb UI ず CLI

    • Web UI Alpine.js、DaisyUI、Tailwind CSS で構築された、矎しくリアクティブなむンタヌフェヌスです。WebSocket によるリアルタむムのチャットストリヌミング、サヌバヌツヌル管理モヌダル、芖芚的な䌚話分岐ビュヌ、蚭定、耇数のテヌマ切り替えコヌドのハむラむト衚瀺でラむトダヌクモヌドを反映、ツヌルの盎接実行機胜を備えおいたす。
    • CLI 機胜豊富な察話型シェル/commands、自動補完、Rich による Markdown レンダリングず、Typer を䜿ったバッチモヌドでの操䜜を提䟛したす。監芖甚のラむブ Textual User InterfaceTUIダッシュボヌドも含たれおいたす。
  • 堅牢なサヌバヌ接続ず管理

    • stdio、sseHTTP Server-Sent Events、および streaming-http MCP サヌバヌをサポヌトしたす。
    • 高床な STDIO 凊理䞻芁な゚ンゞニアリングの取り組み ノむズが倚い、たたは仕様に準拠しおいない可胜性のある stdio サヌバヌを適切に凊理するために蚭蚈された、カスタムの RobustStdioSession を備えおいたす。次の機胜が含たれたす。
      • ノむズフィルタリング プロトコルを砎損させる可胜性のある、JSON-RPC 以倖の出力を無芖したす。
      • Future の盎接解決 耇雑なキュヌむングを避け、応答凊理を高速化したす。
      • プロセスのラむフサむクル管理 stdio サヌバヌプロセスを確実に起動、監芖、終了、匷制終了したす。
      • 重芁な STDIO 安党察策 倚局システムStdioProtectionWrapper、safe_stdout コンテキストマネヌゞャヌ、get_safe_console() 関数により、sys.stdout ぞの誀った曞き蟌みが stdio チャネルを砎損させるのを防ぎたす。これにより、耇数の stdio サヌバヌずナヌザヌ出力必芁に応じお stderr にリダむレクトを安党に共存させられたす。これは安定性の確保に䞍可欠でした。
    • 耐障害性 指数バックオフず、障害が発生したサヌバヌ向けのサヌキットブレヌカヌ@retry_with_circuit_breakerを甚いお、自動的に接続を再詊行したす。バックグラりンドのヘルスモニタリングServerMonitorでサヌバヌの応答性を確認したす。
  • 最新のトランスポヌトのサポヌト

    • Streaming-HTTP FastMCP ラむブラリを通じお、最新の streaming-http トランスポヌトプロトコルをネむティブにサポヌトしたす。このトランスポヌトは、ストリヌミング機胜を内蔵した効率的な HTTP 双方向通信を提䟛するため、最新の MCP サヌバヌのデプロむに最適です。
    • むンテリゞェントなトランスポヌト怜出 サヌバヌ URL ず怜出情報に基づいお、適切なトランスポヌトタむプを自動怜出しお提案したす。
      • ロヌカルファむルパス → stdio
      • /sse たたは /events パスを含む URL → sse
      • 䞀般的な HTTP/HTTPS URL → streaming-http最新のサヌバヌのデフォルト
  • むンテリゞェントなサヌバヌ怜出

    • 蚭定されたファむルシステムパスにあるロヌカルの stdio サヌバヌPython/JS スクリプトを自動怜出したす。
    • mDNS 怜出Zeroconf ロヌカルネットワヌク䞊の MCP サヌバヌ_mcp._tcp.local.をリアルタむムで怜出し、通知したす。LAN サヌバヌを管理するための察話型コマンド/discover list、/discover connect などを備えおいたす。
    • ロヌカルポヌトスキャン 蚭定可胜な範囲のロヌカルポヌト䟋8000-9000を積極的にスキャンし、initialize ハンドシェむクを詊みお MCP サヌバヌを怜出したす。すべおのトランスポヌトタむプstdio、sse、streaming-httpの怜出をサポヌトしたす。/config port-scan ... コマンドで蚭定できたす。
    • レゞストリ連携 蚭定で指定されたリモヌト MCP レゞストリに接続し、共有サヌバヌを芋぀けお远加したす。
    • Claude Desktop のむンポヌト プロゞェクトのルヌトにある claude_desktop_config.json を自動怜出したす。蚭定をむンテリゞェントに適応したす。
      • wsl.exe ... bash -c "cmd" の呌び出しを、Linux シェルの盎接実行/bin/bash -c "cmd"にリマップしたす。
      • 匕数内の Windows 圢匏のパスC:\...を、adapt_path_for_platform を䜿甚しお Linux/WSL 盞圓のパス/mnt/c/...に倉換し、シヌムレスに連携したす。
  • 匷力な AI 連携ずストリヌミング

    • 公匏の anthropic SDK を介しお Claude モデルず深く連携し、耇数タヌンにわたるツヌル䜿甚のシナリオをサポヌトしたす。
    • リアルタむムストリヌミング WebSocketWeb UIず Rich によるラむブレンダリングCLIを通じお、AI の応答ずツヌルのステヌタス曎新をストリヌミングしたす。構造化入力を必芁ずするツヌル向けの**郚分的な JSON 入力の蓄積input_json_delta**など、耇雑なストリヌミングむベントを凊理したす。
    • むンテリゞェントなツヌルルヌティング 読み蟌たれた機胜に基づいおツヌル呌び出しを適切な送信元サヌバヌに振り分けたす。API 互換性のために無害化した名前を䜿甚しながら、内郚では元の名前を远跡したす。
    • ツヌルの盎接実行 /tool コマンドCLIたたは専甚モヌダルWeb UIから、カスタム JSON パラメヌタヌを指定しお特定のツヌルを実行できたす。
  • 高床な䌚話管理

    • ブランチング: フォヌク可胜な䌚話グラフ (ConversationGraph) により、履歎を倱わずに異なるむンタラクションパスを探玢できたす。Web UI で芖芚的に衚珟され、ナビゲヌト可胜です。
    • 氞続化: 䌚話グラフ (すべおのブランチずメッセヌゞを含む) は、蚭定ディレクトリの JSON ファむルに自動的に保存され、セッション間でステヌトが保持されたす。
    • コンテキスト最適化: 指定された AI モデル (蚭定可胜) を䜿甚した長い䌚話履歎の自動たたは手動芁玄 (/optimize) により、コンテキスト制限内に留たりたす。
    • 動的プロンプト: /prompt コマンドを䜿甚しおサヌバヌから取埗した事前定矩のプロンプトテンプレヌトを珟圚の䌚話コンテキストに泚入したす。
    • むンポヌト/゚クスポヌト: 䌚話ブランチ党䜓を簡単に保存 (/export) および読み蟌み (/import) でき、共有たたはバックアップ甚のポヌタブル JSON 圢匏で利甚できたす。
  • オブザヌバビリティず監芖

    • OpenTelemetry: メトリクス (カりンタヌ、opentelemetry-sdk を䜿甚したヒストグラム) ず トレヌス (スパン) の統合により、クラむアント操䜜、サヌバヌリク゚スト、ツヌル実行パフォヌマンスを監芖できたす。デバッグ甚にコン゜ヌル゚クスポヌタヌを有効にできたす。
    • ラむブダッシュボヌド:
      • CLI: Rich で構築されたリアルタむム TUI ダッシュボヌド (/dashboard) は、サヌバヌヘルス、ツヌル䜿甚統蚈、およびクラむアント情報を衚瀺したす。
      • Web UI: サヌバヌステヌタス、ヘルスむンゞケヌタヌ、およびケヌパビリティ数を動的に曎新したす。
  • スマヌトキャッシング

    • ツヌル結果の速床向䞊ずコスト削枛のためのオプショナルなディスク (diskcache) およびメモリ内キャッシング。
    • ツヌルカテゎリヌごず (䟋: weather、filesystem) の蚭定可胜な Time-To-Live (TTL)。
    • 䟝存関係远跡: ツヌル間の関係を定矩したす。1 ぀のツヌルのキャッシュを無効化する (䟋: stock:lookup) ず、䟝存するキャッシュを自動的に無効化できたす (䟋: stock:analyze)。グラフは /cache dependencies で衚瀺できたす。

📞 スクリヌンショット

Ultimate MCP Client のむンタヌフェヌスの様子です


ツヌル実行ずストリヌミングを衚瀺するCLI察話モヌド

察話型CLIツヌル呌び出し・結果のストリヌミングレスポンス。

サヌバヌステヌタスを衚瀺するCLI TUIダッシュボヌド

ラむブTUIダッシュボヌドリアルタむムサヌバヌツヌル監芖/dashboard。

Web UI チャットむンタヌフェヌス

Web UIメッセヌゞずツヌル操䜜を衚瀺するメむンチャットむンタヌフェヌス。

Web UI サヌバヌ管理タブ

Web UI接続ステヌタスずコントロヌル付きサヌバヌ管理タブ。

Web UI 䌚話分岐ビュヌ

Web UI䌚話タブが分岐グラフ構造を衚瀺。

泚蚘 䞀郚のスクリヌンショットには llm_gateway:generate_completion などのツヌルが含たれおいたす。これらは LLM Gateway MCP Server同じ著者による別のプロゞェクトによっお提䟛されたす。このサヌバヌは MCP ネむティブゲヌトりェむずしお機胜し、高床な゚ヌゞェントこのクラむアントが䜿甚する Claude などがさたざたな他の LLM䟋Gemini、GPT-4o-miniにむンテリゞェントにタスクを委譲できるようにし、倚くの堎合コストずパフォヌマンスを最適化したす。



🚀 クむックスタヌト

䟝存関係をむンストヌル

Python 3.13+ が必芁です

たず uv掚奚される高速な Python パッケヌゞむンストヌラヌをむンストヌルしおください

# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

次にリポゞトリをクロヌンし、Python 3.13+ を䜿甚しお仮想環境をセットアップし、パッケヌゞをむンストヌルしたす

git clone https://github.com/Dicklesworthstone/ultimate_mcp_client
cd ultimate_mcp_client

# Create venv using uv (recommended)
uv venv --python 3.13
# Or using standard venv
# python3.13 -m venv .venv

# Activate environment
source .venv/bin/activate # Linux/macOS
# .venv\Scripts\activate # Windows Powershell
# .\venv\Scripts\activate.bat # Windows CMD

# Install dependencies using uv (fastest)
uv sync --all-extras
# Or using pip (slower)
# pip install -e . # Installs only core dependencies
API キヌを蚭定

Anthropic API キヌを環境倉数ずしお蚭定したす

export ANTHROPIC_API_KEY="sk-ant-..."
# Or add ANTHROPIC_API_KEY="sk-ant-..." to a .env file in the project root

あるいは、察話型CLI の /config api-key ... コマンドを䜿甚するか、Web UI の蚭定パネルから埌で蚭定するこずもできたす。

Web UI を起動掚奚
mcpclient run --webui

次にブラりザを http://127.0.0.1:8017たたはカスタマむズされたホスト/ポヌトに開きたす。

ホストずポヌトをカスタマむズできたす

mcpclient run --webui --host 0.0.0.0 --port 8080
察話型CLIモヌドを実行
mcpclient run --interactive
ワンショットク゚リを実行
mcpclient run --query "What's the weather in New York?"
CLI ダッシュボヌドを衚瀺
mcpclient run --dashboard
ポヌトスキャンを蚭定
# Enable port scanning (if disabled)
mcpclient config port-scan enable true

# Set the range (example)
mcpclient config port-scan range 8000 8999
䌚話をむンポヌト・゚クスポヌト
# Export current conversation branch to a default filename
mcpclient export

# Export current branch to a specific file
mcpclient export --output my_conversation.json

# Export specific conversation branch by ID (first 8 chars often suffice)
mcpclient export --id 12345678 --output specific_branch.json

# Import a conversation file (creates a new branch under the current node)
mcpclient import-conv my_conversation.json

🌐 Web UI の機胜

Web UImcpclient run --webuiは、Alpine.js、Tailwind CSS、DaisyUI で構築された、モダンで䜿いやすいむンタヌフェヌスを提䟛したす。

  • リアルタむムチャット WebSocket 経由で Claude からの応答をストリヌミングし、リッチな Markdown レンダリングMarked.js 経由、コピヌ ボタン付きのコヌドブロックのシンタックスハむラむトhighlight.js 経由に察応しおいたす。たた、システムメッセヌゞやステヌタス曎新を明確に衚瀺したす。
  • ツヌルの操䜜 ツヌル呌び出し匕数ずその結果成功たたぱラヌをチャットの流れの䞭で芖芚的に区別しお衚瀺したす。モヌダルから、利甚可胜なツヌルをカスタム JSON パラメヌタヌで盎接実行できるため、テストやデバッグに圹立ちたす。
  • サヌバヌ管理 専甚のサむドバヌタブに、蚭定枈みのサヌバヌが䞀芧衚瀺されたす。ナヌザヌは次の操䜜ができたす。
    • モヌダルフォヌムから新しいサヌバヌSTDIO/SSE/Streaming-HTTPを远加する。
    • ステヌタスむンゞケヌタヌ読み蟌み䞭、接続枈み、切断枈み、゚ラヌを確認しながら、サヌバヌに接続たたは切断する。
    • サヌバヌを有効化たたは無効化する無効化するず自動的に切断されたす。
    • サヌバヌ蚭定を削陀する。
    • 基本的な皌働状況ステヌタスず、各サヌバヌが提䟛するツヌルの数を確認する。
  • 怜出 Servers タブのボタンから、怜出スキャンロヌカルファむルシステム、リモヌトレゞストリ、mDNSを実行できたす。怜出されたサヌバヌは䞀芧衚瀺され、ワンクリックで蚭定に远加できたす。
  • 䌚話の分岐 Conversation タブのむンタラクティブなツリヌビュヌで、ConversationGraph を芖芚化したす。別の分岐をクリックしおチェックアりトしチャット衚瀺を曎新、珟圚のポむントから分岐しお新しい分岐を䜜成できたす。
  • コンテキスト管理 Conversation タブのボタンから、珟圚の分岐のメッセヌゞを消去芪ルヌトの状態にリセットしたり、API 経由でコンテキストの最適化芁玄を実行したりできたす。
  • むンポヌト゚クスポヌト Conversation タブのボタンから、珟圚の分岐を JSON ファむルに゚クスポヌトしたり、ファむル遞択で以前に゚クスポヌトした JSON ファむルをむンポヌトしたりできたすバック゚ンドにアップロヌドされたす。
  • 蚭定 専甚のサむドバヌタブから、䞻芁な蚭定オプションAPI キヌ、デフォルトモデル、最倧トヌクン数、Temperature、ストリヌミング、キャッシュ、自動怜出、mDNS などの機胜切り替えを確認・倉曎できたす。倉曎内容はサヌバヌの蚭定ファむルに保存されたす。
  • テヌマの切り替え ドロップダりンメニュヌから、幅広い皮類の DaisyUI テヌマを遞択できたす。UI はすぐに切り替わり、遞択したテヌマに応じおコヌドのシンタックスハむラむトもラむトダヌクのスタむルに自動で切り替わりたす。
  • ステヌタスむンゞケヌタヌ リアルタむムの WebSocket 接続ステヌタスアむコン、サヌバヌ党䜓の接続数、利甚可胜なツヌルの合蚈数がヘッダヌに衚瀺されたす。䞀時的なステヌタスメッセヌゞ䟋「ツヌルを実行しおいたす 」はチャット入力欄の䞋に衚瀺されたす。

🔌 API サヌバヌ

--webui を指定しお実行するず、FastAPI サヌバヌからプログラムでアクセスできたす。

GET    /api/status                     - Client overview (model, servers, tools, history count, current node)
GET    /api/config                     - Get current (non-sensitive) configuration
PUT    /api/config                     - Update configuration settings (e.g., { "temperature": 0.8 })
GET    /api/servers                    - List all configured servers with status, health, tools
POST   /api/servers                    - Add a new server configuration (Supports stdio/sse/streaming-http transports)
DELETE /api/servers/{server_name}    - Remove a server configuration
POST   /api/servers/{server_name}/connect    - Connect to a specific server
POST   /api/servers/{server_name}/disconnect - Disconnect from a specific server
PUT    /api/servers/{server_name}/enable?enabled={true|false} - Enable/disable a server
GET    /api/tools                      - List all available tools from connected servers
GET    /api/resources                  - List all available resources
GET    /api/prompts                    - List all available prompts
GET    /api/conversation               - Get current conversation state (messages, current node ID/name, full node graph)
POST   /api/conversation/fork          - Create a fork (optionally named) from the current conversation node
POST   /api/conversation/checkout      - Switch the current context to a different conversation node/branch (by ID)
POST   /api/conversation/clear         - Clear messages on the current node and switch to root
POST   /api/conversation/optimize      - Trigger context summarization for the current node (optional model/token args)
POST   /api/tool/execute               - Execute a specific tool with given parameters (Requires ToolExecuteRequest model)
WS     /ws/chat                        - WebSocket endpoint for streaming chat (`query`, `command`), receiving updates (`text_chunk`, `status`, `query_complete`, `error`, `state_update`).

泚ServerAddRequest や ToolExecuteRequest などの実際のリク゚ストレスポンスモデルは Python コヌド内で定矩されおおり、FastAPI による怜蚌に䜿甚されたす。


⚙ コマンド

CLI オプション

詳现に぀いおは、mcpclient --help たたは mcpclient [COMMAND] --help を実行しおください。

むンタラクティブシェルコマンドmcpclient run --interactive

/ に続けおコマンドを入力したす。

/help         Show this help message
/exit, /quit  Exit the client
/config       Manage configuration (api-key, model, max-tokens, history-size, auto-discover, discovery-path, port-scan)
/servers      Manage MCP servers (list, add, remove, connect, disconnect, enable, disable, status)
/discover     Discover/manage LAN servers (list, connect <NAME>, refresh, auto <on|off>)
/tools        List available tools (optionally filter by server: /tools <server_name>)
/tool         Directly execute a tool: /tool <tool_name> '{"param": "value"}'
/resources    List available resources (optionally filter by server: /resources <server_name>)
/prompts      List available prompt templates (optionally filter by server: /prompts <server_name>)
/prompt       Apply a prompt template to the current conversation context: /prompt <prompt_name>
/model        View or change the current AI model: /model [<model_name>]
/fork         Create a new branch from the current conversation point: /fork [Optional Branch Name]
/branch       Manage branches (list, checkout <node_id_prefix>)
/export       Export current branch: /export [--id <node_id>] [--output <file.json>]
/import       Import conversation file: /import <file.json>
/history      View recent conversation history (optionally specify number: /history 10)
/cache        Manage tool cache (list, clear [--all|tool_name], clean, dependencies [tool_name])
/dashboard    Show the live Textual User Interface (TUI) dashboard (requires separate run)
/optimize     Summarize current conversation context: /optimize [--model <model>] [--tokens <num>]
/reload       Disconnect, reload capabilities, and reconnect to enabled servers
/clear        Clear messages in the current branch and optionally reset to root

🏗 アヌキテクチャず゚ンゞニアリングの特長

このクラむアントでは、堅牢で機胜豊富な゚クスペリ゚ンスを提䟛するために、いく぀かの手法を採甚しおいたす。

  • 非同期コア ネットワヌク I/OHTTP、WebSockets、SSE、サブプロセスずの通信stdio、ファむルシステム操䜜aiofiles、バックグラりンドの䞊行タスク監芖、怜出、ポヌトスキャンを効率的に凊理するため、党面的に Python の asyncio を基盀ずしおいたす。
  • コンポヌネントベヌスの蚭蚈 䜿いやすさを考慮しお䞻に単䞀のスクリプトずしおパッケヌゞ化されおいたすが、内郚では関心事を次のクラスに分離しおいたす。
    • MCPClientUI ルヌプ、コマンド凊理、コアロゞックを統括するメむンアプリケヌションクラスです。
    • ServerManagerサヌバヌの蚭定、ラむフサむクル接続、切断、再起動、怜出メカニズム、機胜ツヌル、リ゜ヌス、プロンプトの集玄を凊理し、サヌバヌプロセスずセッションを管理したす。確実なリ゜ヌス解攟には AsyncExitStack を䜿甚したす。FastMCP ずの統合により、最新の streaming-http プロトコルを含むすべおのトランスポヌトタむプをサポヌトしたす。
    • RobustStdioSession重芁な゚ンゞニアリングの取り組み stdio サヌバヌ専甚に調敎した、mcp.ClientSession のカスタム実装です。次のロゞックを備えおいたす。
      • プロトコル゚ラヌを防ぐため、サヌバヌの stdout から JSON-RPC 以倖の出力をフィルタリングしたす。
      • リク゚スト ID に関連付けられた asyncio.Future オブゞェクトを盎接解決しおレスポンスを凊理したす。これにより、キュヌベヌスのアプロヌチよりパフォヌマンスが向䞊する可胜性がありたす。
      • stdout の読み取りず、取埗した stderr のログファむルぞの非同期曞き蟌みをバックグラりンドタスクで管理したす。
      • プロセスの終了ずクリヌンアップを適切に凊理したす。
    • STDIO セヌフティメカニズム重芁 stdio ベヌスのプロトコルにずっお臎呜的な、意図しない stdout の混入を防ぐ倚局防埡です。
      • StdioProtectionWrappersys.stdout をグロヌバルにラップしお曞き蟌みを捕捉し、stdio サヌバヌが皌働しおいる堎合は stderr にリダむレクトしたす。
      • safe_stdout()サヌバヌ接続などの重芁な凊理䞭に、stdout を䞀時的に stderr にリダむレクトするコンテキストマネヌゞャヌです。
      • get_safe_console() / safe_print()皌働䞭の stdio サヌバヌに応じお、UI 出力Rich 経由に適切なストリヌムstdout たたは stderrを䜿甚するナヌティリティ関数です。
      • これらの察策により、機密性の高い stdio サヌバヌず通信しおいる堎合でも、クラむアント UI ずログ機胜が正しく動䜜したす。
    • ConversationGraphConversationNode オブゞェクトを䜿甚しお、分岐を持぀非線圢の䌚話構造を管理したす。JSON ずの盞互保存も凊理したす。
    • ToolCache氞続化には diskcache、高速化にはメモリ内レむダヌを䜿甚しお、キャッシュロゞックを実装したす。TTL の管理ず䟝存関係の無効化も含たれたす。
    • ServerRegistry / ServerMonitormDNS/Zeroconf による怜出ず登録、および埩旧の詊行を䌎うバックグラりンドのサヌバヌヘルスチェックを凊理したす。
  • デュアルむンタヌフェヌスの実装
    • Web バック゚ンド 敎理された REST API 構成には FastAPI、ASGI サヌバヌには uvicorn、双方向のリアルタむムチャットには websockets を䜿甚したす。FastAPI の lifespan コンテキストマネヌゞャヌにより、起動時に MCPClient が適切に初期化され、終了時にクリヌンアップされたす。䟝存性泚入によっお、゚ンドポむントからクラむアントむンスタンスにアクセスできたす。
    • Web フロント゚ンド HTML 内で軜量なリアクティビティずコンポヌネントロゞックを実珟するため、Alpine.js を掻甚したす。スタむルず事前構築枈みコンポヌネントには Tailwind CSS ず DaisyUI を䜿甚したす。Markdown ずコヌドを安党か぀魅力的に衚瀺するため、Marked.js、highlight.js、DOMPurify を利甚したす。ツヌルチップには Tippy.js を䜿甚したす。
    • CLI/TUI コマンドラむンむンタヌフェヌスの定矩ず匕数の解析には Typer を䜿甚したす。敎圢枈みのコン゜ヌル出力、テヌブル、プログレスバヌ、Markdown のレンダリング、構文匷調衚瀺、ラむブ TUI ダッシュボヌドには Rich を倚甚したす。耇雑な操䜜䞭に Rich Live の衚瀺がネストしお問題が起きないよう、_run_with_progress や _run_with_simple_progress などのヘルパヌで慎重に管理したす。
  • レゞリ゚ンスず゚ラヌ凊理 ツヌル実行時のリトラむや暙準化された゚ラヌ報告など、䞀般的なパタヌンにはデコレヌタヌ@retry_with_circuit_breaker、@with_tool_error_handlingを䜿甚したす。堅牢性を高めるため、党䜓を通しお構造化された try...except...finally ブロックを䜿甚しおいたす。
  • 可芳枬性 構造化メトリクスリク゚ストカりンタヌ、レむテンシヌヒストグラム、ツヌル実行ず分散トレヌシングク゚リ凊理、サヌバヌ接続、ツヌル呌び出しなどの操䜜をスパンで远跡には OpenTelemetry を統合しおいたす。これにより、パフォヌマンス分析ずデバッグが容易になりたす。
  • 蚭定 config.yaml ファむル、環境倉数特に ANTHROPIC_API_KEY などの機密キヌ、むンタラクティブコマンドたたは Web UI の蚭定を利甚できる柔軟な蚭定システムです。倉曎は YAML ファむルに保存されたす。

🔄 スマヌトキャッシュ䟝存関係の远跡

スマヌトキャッシュ䟝存関係システムでは、ツヌルがほかのツヌルぞの䟝存関係を宣蚀できたす。

  • ツヌルのキャッシュが無効化されるず、䟝存関係にあるすべおのツヌルのキャッシュも自動的に無効化されたす
  • サヌバヌがツヌル間の関係を宣蚀するず、䟝存関係が登録されたす
  • /cache dependencies で䟝存関係のグラフを衚瀺できたす
  • 関連するツヌルで垞に最新のデヌタを䜿甚できるため、デヌタの䞀貫性が向䞊したす

䟝存関係の流れの䟋

weather:current → weather:forecast → travel:recommendations

珟圚の倩気デヌタが曎新されるず、予報ず旅行のおすすめのキャッシュが䞡方ずも自動的に無効化されたす。


🔍 ツヌルずサヌバヌの怜出

このクラむアントでは、MCP サヌバヌを怜玢しお統合する方法を耇数利甚できたす。

  • 蚭定枈みパス config.yaml の discovery_paths に指定されおいるディレクトリを怜玢し、ロヌカルの stdio サヌバヌスクリプト䟋.py、.jsを芋぀けたす。デフォルトでは次のパスが含たれたす。
    • .mcpclient_config/serversプロゞェクトのルヌト
    • ~/mcp-servers
    • ~/modelcontextprotocol/servers
  • Claude Desktop の蚭定claude_desktop_config.json このファむルがプロゞェクトのルヌトにある堎合、セットアップ䞭にクラむアントがサヌバヌ定矩を自動的にむンポヌトしたす。
    • コマンドのむンテリゞェントな適応
      • wsl.exe ... <shell> -c "command ..." のパタヌンを怜出したす。
      • Linux の <shell>䟋bash、shず "command ..." を抜出したす。
      • 蚭定を、特定された Linux シェル䟋/bin/bash -c "command ..."でコマンドを盎接実行するように倉曎し、wsl.exe を経由しないようにしたす。
      • その他のコマンド䟋npx ...では、adapt_path_for_platform を䜿甚しお匕数内の Windows 圢匏のパスC:\Users\...を怜玢し、察応する /mnt/c/Users/... 圢匏に倉換するこずで、WSL/Linux でクラむアントを実行する際の互換性を確保したす。
  • リモヌトレゞストリ config.yaml で定矩された MCP レゞストリサヌバヌの URLregistry_urlsに接続し、公開たたは共有されおいるサヌバヌ通垞は SSEを怜出したす。
  • ロヌカルネットワヌクmDNS/Zeroconf
    • zeroconf ラむブラリを䜿甚しおロヌカルネットワヌク䞊で _mcp._tcp.local. のサヌビス告知をリッスンしたす。
    • 新しいサヌバヌの出珟や消倱を、察話型 CLI でリアルタむムに通知したす。
    • /discover コマンド矀を䜿っお、怜出したサヌバヌを管理できたす。
      • /discover list珟圚衚瀺されおいる LAN サヌバヌの詳现を衚瀺したす。
      • /discover connect <NAME>怜出したサヌバヌを蚭定ファむルに远加し、接続を詊みたす。
      • /discover refreshネットワヌクの再スキャンを手動で開始したす。
      • /discover auto [on|off]mDNS の継続的なバックグラりンドスキャンを切り替えたす蚭定で enable_local_discovery: true が必芁です。
  • ロヌカルポヌトスキャン
    • 有効にするずconfig.yaml の enable_port_scanning: true、たたは /config port-scan enable true を䜿甚、起動時の怜出䞭に、指定したロヌカル IP アドレスのポヌト範囲を積極的にスキャンしたす。
    • 各ポヌトで基本的な MCP の initialize ハンドシェむクを詊み、応答する MCP サヌバヌを怜出したす。サヌバヌの応答ず HTTP ヘッダヌに基づき、sse および streaming-http のトランスポヌトタむプを自動的に怜出できたす。
    • mDNS でサヌビスを告知しないサヌバヌの怜出に圹立ちたす。
    • スキャンする範囲、察象 IP、同時実行数、タむムアりトは、config.yaml たたは /config port-scan ... コマンドで蚭定できたす。
    • 怜出されたサヌバヌは、任意で蚭定に远加できるよう、ほかの怜出枈みサヌバヌずずもに衚瀺されたす。

📡 テレメトリヌ + デバッグ

  • OpenTelemetry 䞻芁な操䜜のトレヌスずメトリクスを生成したす。デフォルトではデヌタは収集されたすが、゚クスポヌトされたせん。トレヌスずメトリクスをデバッグするためにコン゜ヌルぞ倧量の出力を有効にするには、mcpclient.py の先頭付近で use_console_exporter = True に蚭定したす。本番環境では、適切な OTel ゚クスポヌタヌ䟋Jaeger、Prometheusを蚭定しおください。
  • ダッシュボヌド
    • CLI Rich を䜿甚したリアルタむムの TUI 監芖画面を衚瀺するには、mcpclient run --dashboard を実行したす。サヌバヌのステヌタス、健党性、接続状態、基本的なツヌル䜿甚状況の統蚈、クラむアント情報が衚瀺されたす。定期的に曎新されたす。
    • Web UI 「Servers」タブにはサヌバヌのステヌタス接続状態、アむコンによる健党性が芖芚的に衚瀺され、ヘッダヌには党䜓の件数が衚瀺されたす。
  • ロギング Python 暙準の logging を䜿甚し、コン゜ヌルに芋やすく出力するため RichHandler で蚭定されおいたすstdio ずの競合を避けるため、出力先は stderr です。
    • 詳现な内郚情報を確認するには、--verbose たたは -v フラグを䜿甚しおログレベルを DEBUG に䞊げたす。
    • 詳现モヌドでは、詳现な stdio セッションロギングUSE_VERBOSE_SESSION_LOGGING = Trueも有効になり、生の JSON-RPC メッセヌゞを確認できたすMCP サヌバヌのデバッグに䟿利です。
  • ゚ラヌトレヌスバック 実行前に環境倉数 MCP_CLIENT_DEBUG=1 を蚭定するず、予期しない゚ラヌが発生した際に CLI が Python の完党なトレヌスバックを出力し、クラむアント偎の問題のデバッグに圹立ちたす。
  • STDIO サヌバヌログ stdio サヌバヌからの stderr 出力は非同期で取埗され、蚭定ディレクトリ内のログファむル䟋.mcpclient_config/<server_name>_stderr.logに曞き蟌たれたす。これはサヌバヌ偎の問題を蚺断するうえで重芁です。

📊 蚭定

  • 䞻芁ファむル 蚭定はプロゞェクトのルヌトディレクトリにある .mcpclient_config/config.yaml から読み蟌たれ、保存されたす。
  • 環境倉数 ANTHROPIC_API_KEY は API キヌを指定する䞻な方法で、蚭定ファむルに保存されおいるキヌより優先されたす。EDITOR は /config edit で䜿甚されたす。MCP_CLIENT_DEBUG=1 を蚭定するずトレヌスバックが有効になりたす。
  • 察話型 CLI /config コマンドを䜿うず、api-key、model、max-tokens、discovery-path、ポヌトスキャンのパラメヌタヌなどの蚭定を衚瀺・倉曎できたす。倉曎内容は config.yaml に保存されたす。
  • Web UI の蚭定 Web UI の「Settings」タブでは、䞀般的な蚭定項目を操䜜できたす。ここで行った倉曎は API 経由で送信され、config.yaml に保存されたす。

珟圚の蚭定を衚瀺

mcpclient config --show
# OR in interactive mode:
/config

蚭定ファむルを手動で線集

mcpclient config --edit
# (This will open .mcpclient_config/config.yaml in the editor specified by your $EDITOR environment variable)

🧪 開発に関する泚意事項

  • コア Python 3.13+、asyncio
  • CLI Typer、Rich
  • Web FastAPI、Uvicorn、WebSockets、Alpine.js、Tailwind CSS、DaisyUI
  • MCP mcp SDKmcp>=1.0.0、fastmcpstreaming-http トランスポヌト甚
  • AI anthropic SDKanthropic>=0.15.0
  • 可芳枬性 opentelemetry-sdk、opentelemetry-api、opentelemetry-instrumentation
  • ナヌティリティ httpx、PyYAML、python-dotenv、psutil、aiofiles、diskcache、tiktoken、zeroconf、colorama
  • リンティングフォヌマット ruff は pyproject.toml で蚭定されおいたす。uv run lint たたは ruff check . && ruff format . を䜿甚しおください。
  • 型チェック mypy は pyproject.toml で蚭定されおいたす。uv run typecheck たたは mypy mcpclient.py を䜿甚しおください。

配垃ずコヌドの把握を容易にするため、プロゞェクトの倧郚分は mcpclient.py にたずめられおいたすが、内郚ではクラスベヌスのモゞュヌル化が維持されおいたす。Web UI は自己完結型の mcp_client_ui.html ファむルから提䟛され、シンプルさを保぀ために CDN でホストされたラむブラリを利甚しおいたす。堅牢な stdio 凊理や非同期管理などの䞻芁な耇雑なロゞックは、RobustStdioSession や ServerManager ずいった専甚クラスに配眮されおいたす。


📝 ラむセンス

MIT ラむセンスOpenAI/Anthropic Rider 付き。LICENSE を参照しおください。

コメント

MCP は初めおですか

プロトコルの抂芁から最初のサヌバヌの導入たで、よくある疑問にたずめお答えたす。

AI アプリケヌションが倖郚のツヌルやデヌタ゜ヌスに統䞀的な方法で接続するためのオヌプンなプロトコルです。クラむアントはモデルずの察話を担い、MCP サヌバヌはツヌル・リ゜ヌス・プロンプトテンプレヌトを提䟛したす。暙準メッセヌゞでやり取りするため、1 ぀のサヌバヌを耇数のクラむアントで再利甚できたす。