Simple MCP Client について
Simple MCP Clientは、MCPサーバーをテストし、LLMと対話するためのPython製コマンドラインクライアントです。対話型コマンドやツールの直接実行に加え、ReAct対応のチャットモードを備えています。
主な機能
- 01複数のSSEまたはstdio MCPサーバーへの接続
- 02複数のLLMプロバイダーへの対応
- 03自動補完付きの対話型CLI
- 04ツール実行とリソース・プロンプト管理
- 05ストリーミング応答対応のReActチャット
活用シーン
- 01複数のMCPサーバーのテストと確認
- 02チャットを通じたサーバーツールの実行
- 03CLIからのリソースやプロンプトの取得
MCP 対応
複数のMCPサーバーに接続し、ツール、リソース、プロンプトを検出して呼び出せます。チャットではLLMによるツール実行にも対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
シンプルな MCP クライアント
Python を使用して MCP サーバーをテストするための、シンプルなコマンドライン MCP(Model Context Protocol)クライアントです。さまざまな LLM プロバイダーとのチャットや、複数の MCP サーバーへの接続をサポートしています。
機能
- 複数の MCP サーバーへの接続(SSE および stdio プロトコル)
- さまざまな LLM プロバイダーとの連携(Ollama、DeepSeek、OpenAI、OpenRouter)
- 自動補完機能を備えた対話型コマンドラインインターフェース
- コマンドベースのツール実行
- LLM によるツール実行が可能なチャットモード
- JSON 設定ファイルによる設定
ReAct エージェントとの連携
このブランチでは、チャット機能を強化する ReAct(推論と行動)エージェントを導入しています。
- インテリジェントなツール推論:ReAct エージェントが推論を用いて、使用するツールとそのタイミングを判断し、より優れたツールの連携や複数ステップの問題解決を可能にします
- LangChain MCP 連携:LangChain の MultiServerMCPClient とシームレスに連携し、ツール管理を改善します
- 強化されたチャット体験:エージェントの推論やツール実行のプロセスをわかりやすく表示します
- 設定可能なオプション:エージェントの処理におけるタイムアウトと最大反復回数をカスタマイズできます
flowchart TD
START([START]) --> call_model[Call LLM Model]
call_model --> decision{Should End?}
decision -->|"tools"| tools[Execute Tools]
decision -->|"end"| END([END])
tools --> call_model
Chat コマンド
chat コマンドは、ReAct エージェントとの連携により大幅に改善されました。
chat
chat コマンドの主な強化点は次のとおりです。
- LangGraph を活用した推論:LangGraph の StateGraph を使用して、エージェントの推論とツール実行のフローを管理します
- リアルタイムのツール実行表示:ツール呼び出しと結果を、整形された出力でリアルタイムに表示します
- ストリーミング応答:エージェントの応答がリアルタイムでストリーミングされ、すぐにフィードバックが得られます
- エラーハンドリングの改善:ツール実行中のタイムアウトやエラーをより適切に処理します
- コンテキストを考慮した会話:会話のコンテキストを維持し、一貫性のある複数ターンのやり取りを実現します
- ツールの自動検出:接続されているすべての MCP サーバーからツールを自動的に検出し、利用可能にします
chat コマンドでは、エージェント、接続済みサーバー、利用可能なツールに関する情報をヘッダーに表示するようになりました。
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Enhanced MCP Chat with ReAct Agent ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ ReAct Agent: openai/gpt-4-turbo │
│ Connected Servers: k8s, weather │
│ Available Tools: 15 │
│ Timeout: 60s │
│ │
│ The agent will use ReAct (Reasoning and Acting) to intelligently select and use tools. │
│ Type exit to return to command mode. │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
チャットモード

実行モード

インストール
クライアントをインストールする方法はいくつかあります。
pip を使用
pip install simple-mcp-client
UV を使用(推奨)
UV をインストール
curl -LsSf https://astral.sh/uv/install.sh | sh
uv venv
source .venv/bin/activate
python -m build
requirements.txt を使用して pip でインストール
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
pip install -e .
pip で直接インストール
pip install -e .
pyproject.toml を使用して pip でインストール
pip install .
設定
クライアントでは、LLM プロバイダーと MCP サーバーを定義するために設定ファイルを使用します。設定ファイルは、プラットフォームに応じた場所に保存されます。
- Windows:
%APPDATA%\simple_mcp_client\config.json - Linux/macOS:
~/.config/simple_mcp_client/config.json
ユーザーのディレクトリに設定ファイルが存在しない場合、クライアントはパッケージの default_config.json ファイルから既定の設定をコピーし、適切な場所に保存します。
設定例:
{
"llm": {
"provider": "openai",
"model": "claude-3-7-sonnet-20250219",
"api_url": "https://api.gptoai.top/v1",
"api_key": "",
"other_params": {
"temperature": 0.7,
"max_tokens": 4096
}
},
"mcpServers": {
"k8s": {
"type": "sse",
"url": "http://192.168.182.128:8000/sse",
"command": null,
"args": [],
"env": {}
}
},
"default_server": "k8s"
}
使用方法
クライアントを起動します。
simple-mcp-client
または、直接実行します。
python -m simple_mcp_client.main
利用可能なコマンド
help:ヘルプメッセージを表示しますconnect <server_name>:MCP サーバーに接続しますdisconnect <server_name>:MCP サーバーから切断しますservers:利用可能な MCP サーバーを一覧表示しますtools [server_name]:利用可能なツールを一覧表示します。特定のサーバーを指定することもできますresources [server_name]:利用可能なリソースを一覧表示します。特定のサーバーを指定することもできますprompts [server_name]:利用可能なプロンプトを一覧表示します。特定のサーバーを指定することもできますformats [server_name]:利用可能なプロンプト形式を一覧表示します。特定のサーバーを指定することもできますexecute <server_name> <tool_name> [arg1=val1 ...]:引数を指定して特定のツールを実行しますget-resource [server_name] <resource_uri>:MCP サーバーからリソースを取得しますget-prompt [server_name] <prompt_name> [format=<format_name>] [arg1=val1 ...]:MCP サーバーからプロンプトを取得しますchat:設定済みの LLM と有効な MCP ツールを使ってチャットセッションを開始しますconfig show:現在の設定を表示しますconfig llm <provider> [model=<model>] [api_url=<url>] [api_key=<key>] [param=value ...]:LLM プロバイダーを設定しますreload:ファイルから設定を再読み込みしますexit:プログラムを終了します
コマンド例
Execute コマンド
execute コマンドは、指定した引数を使って MCP サーバーの特定のツールを実行します。ReAct エージェントとの連携により、チャットモードでツールをインテリジェントに選択し、推論する機能が強化されます。
特定のサーバーのツールを実行します:
execute k8s get_pod namespace=default name=my-pod
複数の引数を指定してツールを実行します:
execute weather get_forecast city="San Francisco" days=5
JSON 引数を使ってツールを実行します:
execute github create_issue owner=octocat repo=hello-world title="Found a bug" body="I'm having a problem with this." labels=["bug","help wanted"]
help パラメーターを使って、特定のツールのヘルプ情報を取得します:
execute tavily tavily-extract help
ヘルプの出力例:
╭─────────────────────────────────────────────────────────────────────────────── Tool Help ───────────────────────────────────────────────────────────────────────────────╮
│ Server │ tavily │
│ Tool │ tavily-extract │
│ Description │ A powerful web content extraction tool that retrieves and processes raw content from specified URLs, ideal for data collection, content analysis, │
│ │ and research tasks. │
│ │ ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────… │
│ Parameters │ │
│ │ Parameter Type Required Description │
│ │ ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── │
│ │ urls array Yes List of URLs to extract content from │
│ │ extract_depth string No Depth of extraction - 'basic' or 'advanced', if usrls are linkedin use 'advanced' or if explicitly told to use │
│ │ advanced │
│ │ include_images boolean No Include a list of images extracted from the urls in the response │
│ │ ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────… │
│ Example Usage │ │
│ │ execute tavily tavily-extract urls=item1 extract_depth=basic include_images=true │
│ │ ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────… │
│ Note │ │
│ │ For string parameters with spaces, enclose the value in quotes: │
│ │ param="value with spaces" │
│ │ │
│ │ Example: query="latest news about AI" │
╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
出力は整形され、ツール名、引数、結果が表示されます。
Resources コマンド
resources コマンドは、接続中の MCP サーバーで利用可能なリソースとリソーステンプレートを一覧表示します。
接続中のすべてのサーバーのリソースを一覧表示します:
resources
特定のサーバーのリソースを一覧表示します:
resources k8s
出力例:
Resources from k8s - Direct Resources
┏━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓
┃ URI ┃ Name ┃ MIME Type ┃
┡━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩
│ k8s://namespaces │ Kubernetes Namespaces │ application/json │
│ k8s://resources │ Kubernetes Resources │ application/json │
└──────────────────┴───────────────────────┴──────────────────┘
Resources from k8s - Resource Templates
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ URI Template ┃ Name ┃ MIME Type ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ k8s:///{namespace} │ Namespace Overview │ Not specified │
│ k8s:///{resource_type} │ Cluster-Scoped Resources │ Not specified │
│ k8s:///{resource_type}/{name} │ Cluster-Scoped Resource │ Not specified │
│ k8s://{namespace}/{resource_type} │ Resources by Type in Namespace │ Not specified │
│ k8s://{namespace}/{resource_type}/{name} │ Namespaced Resource │ Not specified │
└──────────────────────────────────────────┴────────────────────────────────┴───────────────┘
Prompts コマンド
prompts コマンドは、接続中の MCP サーバーで利用可能なプロンプトを一覧表示します。
接続中のすべてのサーバーのプロンプトを一覧表示します:
prompts
特定のサーバーのプロンプトを一覧表示します:
prompts k8s
出力例:
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ All Available Prompts ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ Name │ Description │
│ k8s-describe │ Describe Kubernetes resources │
│ k8s-troubleshoot │ Troubleshoot Kubernetes issues │
└────────────────────┴─────────────────────────────────┘
Get-Resource コマンド
get-resource コマンドは、MCP サーバーからリソースを取得します。
リソースを持つ任意のサーバーからリソースを取得します:
get-resource k8s://pods/default
特定のサーバーからリソースを取得します:
get-resource k8s k8s://pods/default
Get-Prompt コマンド
get-prompt コマンドは、オプションで形式と引数を指定して、MCP サーバーからプロンプトを取得します。
プロンプトを持つ任意のサーバーからプロンプトを取得します:
get-prompt k8s-describe
特定のサーバーからプロンプトを取得します:
get-prompt k8s k8s-describe
特定の形式でプロンプトを取得します:
get-prompt k8s-describe format=markdown
引数を指定してプロンプトを取得します:
get-prompt k8s k8s-describe namespace=default resource=pod name=my-pod
環境変数
MCP_LOG_LEVEL:ログレベルを設定します(デフォルト:INFO)OPENAI_API_KEY:OpenAI API キー(OpenAI プロバイダー、または OpenAI モデルでの LiteLLM 用)DEEPSEEK_API_KEY:DeepSeek API キー(DeepSeek プロバイダー用)OPENROUTER_API_KEY:OpenRouter API キー(OpenRouter プロバイダー用)ANTHROPIC_API_KEY:Anthropic API キー(Anthropic モデルでの LiteLLM 用)GOOGLE_API_KEY:Google API キー(Google モデルでの LiteLLM 用)MISTRAL_API_KEY:Mistral API キー(Mistral モデルでの LiteLLM 用)COHERE_API_KEY:Cohere API キー(Cohere モデルでの LiteLLM 用)AZURE_API_KEY:Azure API キー(Azure モデルでの LiteLLM 用)
推奨モデル
Qwen3、Grok3、Grok4 など、MCP 呼び出しに対応した大規模モデルの使用をおすすめします。
LLM プロバイダー
クライアントは以下の LLM プロバイダーに対応しています。
- Ollama:オープンソースモデルをローカルで実行するためのローカル LLM プロバイダー
- OpenAI:OpenAI のモデルにアクセスするための API ベースの LLM プロバイダー
- DeepSeek:DeepSeek のモデルにアクセスするための API ベースの LLM プロバイダー
- OpenRouter:複数の LLM バックエンドにリクエストを振り分け、統一 API を通じてさまざまなプロバイダーの幅広いモデルにアクセスできる API ベースの LLM プロバイダー
- LiteLLM:フォールバックモデル、負荷分散などに対応した、さまざまな LLM プロバイダー(OpenAI、Anthropic、Google、Azure など)向けの統一 API
プロバイダー固有の設定
DeepSeek
DeepSeek では API キーが必要です。API キーは設定ファイルまたは環境変数(DEEPSEEK_API_KEY)で指定できます。デフォルトの API URL は https://api.deepseek.com/v1 です。
OpenRouter
OpenRouter では API キーが必要です。API キーは設定ファイルまたは環境変数(OPENROUTER_API_KEY)で指定できます。デフォルトの API URL は https://openrouter.ai/api/v1 です。
OpenRouter は、次のような追加パラメーターに対応しています。
http_referer:リクエスト時に使用する HTTP リファラー(デフォルト:"https://github.com/simple_mcp_client")app_name:リクエスト時に使用するアプリケーション名(デフォルト:"Simple MCP Client")
LiteLLM
LiteLLM は、さまざまな LLM プロバイダーに対応する統一インターフェースを提供します。OpenAI、Anthropic、Google、Azure、Mistral、Cohere などのモデルに対応しています。モデル名は、プロバイダーの形式で指定します。必要に応じてプロバイダーのプレフィックスを付けることもできます。
設定例:
{
"llm": {
"provider": "litellm",
"model": "anthropic/claude-3-opus-20240229",
"api_key": "YOUR_ANTHROPIC_API_KEY",
"other_params": {
"temperature": 0.7,
"max_tokens": 4096,
"request_timeout": 60.0
}
}
}
OpenAI モデルの場合:
{
"llm": {
"provider": "litellm",
"model": "gpt-4-turbo",
"api_key": "YOUR_OPENAI_API_KEY",
"other_params": {
"temperature": 0.7
}
}
}
LiteLLM は、モデル名で指定されたプロバイダーに基づいて、環境変数から適切な API キーを自動的に探します。
OPENAI_API_KEY:OpenAI モデル用ANTHROPIC_API_KEY:Anthropic モデル用GOOGLE_API_KEY:Google モデル用MISTRAL_API_KEY:Mistral モデル用COHERE_API_KEY:Cohere モデル用AZURE_API_KEY:Azure モデル用
API キーを設定に直接指定することもできます。
LiteLLM は、次のような追加パラメーターに対応しています。
request_timeout:API リクエストのタイムアウト(秒)fallbacks:プライマリモデルが失敗した場合に試すフォールバックモデルのリストcache:レスポンスのキャッシュを有効にします
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。