mcpField
S
Simple MCP Client

Simple MCP Client

ローカル
github.com/guolisen開発ツール565 週間前に更新

Simple MCP Client について

Simple MCP Clientは、MCPサーバーをテストし、LLMと対話するためのPython製コマンドラインクライアントです。対話型コマンドやツールの直接実行に加え、ReAct対応のチャットモードを備えています。

主な機能

  1. 01複数のSSEまたはstdio MCPサーバーへの接続
  2. 02複数のLLMプロバイダーへの対応
  3. 03自動補完付きの対話型CLI
  4. 04ツール実行とリソース・プロンプト管理
  5. 05ストリーミング応答対応のReActチャット

活用シーン

  1. 01複数のMCPサーバーのテストと確認
  2. 02チャットを通じたサーバーツールの実行
  3. 03CLIからのリソースやプロンプトの取得

MCP 対応

複数のMCPサーバーに接続し、ツール、リソース、プロンプトを検出して呼び出せます。チャットではLLMによるツール実行にも対応します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Python 3.12+ MCP Enabled MCP Client MCP Dev テスト

シンプルな 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

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。