Home
Login

強力なモデルコンテキストプロトコル (MCP) コマンドラインインターフェースツール

NOASSERTIONPython 1.4kchrishayukmcp-cli Last Updated: 2025-07-02

MCP-CLI:モデルコンテキストプロトコル コマンドラインインターフェースツール

プロジェクト概要

MCP-CLIは、モデルコンテキストプロトコル(Model Context Protocol、MCP)サーバーと対話するために特化された、強力で機能豊富なコマンドラインインターフェースツールです。このツールは、CHUK-MCPプロトコルライブラリを統合することで、ユーザーに大規模言語モデル(LLM)とのシームレスな通信機能を提供します。

このクライアントは、ツール使用、会話管理、および複数の操作モードをサポートしており、コアプロトコルの実装は独立したパッケージに移行されています。これにより、CLIは豊富なユーザーエクスペリエンスの提供に集中し、プロトコルライブラリが通信層を処理します。

主要機能

🔄 複数の操作モード

  • チャットモード(Chat Mode):直接LLMとの対話と自動ツール使用をサポートする会話型インターフェース
  • インタラクティブモード(Interactive Mode):直接サーバー操作のためのコマンド駆動型インターフェース
  • コマンドモード(Command Mode):スクリプトによる自動化とパイプライン操作をサポートするUnixフレンドリーなモード
  • 直接コマンド(Direct Commands):インタラクティブモードに入ることなく単一のコマンドを実行

🌐 複数のプロバイダーをサポート

  • OpenAI連携gpt-4o-minigpt-4ogpt-4-turboなどのモデルをサポート
  • Ollama連携llama3.2qwen2.5-coderなどのローカルモデルをサポート
  • 拡張可能なアーキテクチャ:他のプロバイダーの追加をサポート

🛠️ 強力なツールシステム

  • サーバーが提供するツールを自動検出
  • サーバー認識型ツール実行
  • ツール呼び出し履歴の追跡と分析
  • 複雑な多段階ツールチェーンをサポート

💬 高度な会話管理

  • 完全な会話履歴追跡
  • 特定のメッセージ範囲のフィルタリングと表示をサポート
  • デバッグまたは分析用のJSONエクスポート機能
  • トークン使用量を削減する会話圧縮機能

🎨 豊富なユーザーエクスペリエンス

  • コンテキスト認識型コマンド自動補完
  • カラーフォーマットされたコンソール出力
  • 長時間実行操作の進捗インジケーター
  • 詳細なヘルプとドキュメント

🔧 信頼性の高いリソース管理

  • 適切な非同期I/Oリソースのクリーンアップ
  • 洗練されたエラー処理
  • クリーンなターミナル復元
  • 複数の同時サーバー接続をサポート

システム要件

  • Python 3.11以降
  • OpenAIの場合:OPENAI_API_KEY環境変数に有効なAPIキーを設定する必要があります
  • Ollamaの場合:ローカルにOllamaがインストールされている必要があります
  • サーバー設定ファイル(デフォルト:server_config.json
  • CHUK-MCPプロトコルライブラリ

インストール方法

標準インストール

# リポジトリをクローン
git clone https://github.com/chrishayuk/mcp-cli
cd mcp-cli

# パッケージと開発依存関係をインストール
pip install -e ".[cli,dev]"

# CLIを実行
mcp-cli --help

UVを使用した依存関係管理

# UVをインストール(未インストールの場合)
pip install uv

# 依存関係をインストール
uv sync --reinstall

# UVを使用して実行
uv run mcp-cli --help

使用ガイド

グローバルオプション

すべてのコマンドは以下のグローバルオプションをサポートしています:

  • --server:接続するサーバーを指定(複数のサーバーはカンマ区切り)
  • --config-file:サーバー設定ファイルのパス(デフォルト:server_config.json
  • --provider:使用するLLMプロバイダー(openaiまたはollama、デフォルト:openai
  • --model:使用する特定のモデル(プロバイダーのデフォルト値に依存)
  • --disable-filesystem:ファイルシステムアクセスを無効にする(デフォルト:true)

チャットモード

チャットモードはLLMとの会話インターフェースを提供し、必要に応じて利用可能なツールを自動的に使用します:

# 基本的なチャットモード
mcp-cli chat --server sqlite

# プロバイダーとモデルを指定
mcp-cli chat --server sqlite --provider openai --model gpt-4o
mcp-cli chat --server sqlite --provider ollama --model llama3.2

チャットモードスラッシュコマンド

チャットモードでは、以下のスラッシュコマンドを使用できます:

ヘルプコマンド:

  • /help:利用可能なコマンドを表示
  • /help <command>:特定のコマンドの詳細ヘルプを表示
  • /quickhelpまたは/qh:よく使うコマンドのクイックリファレンスを表示

ツール関連:

  • /tools:すべての利用可能なツールとそのサーバー情報を表示
  • /tools --all:パラメータを含む詳細なツール情報を表示
  • /tools --raw:生のツール定義を表示
  • /toolhistoryまたは/th:現在のセッションにおけるツール呼び出し履歴を表示

会話管理:

  • /conversationまたは/ch:会話履歴を表示
  • /save <filename>:会話履歴をJSONファイルに保存
  • /compact:会話履歴を要約に圧縮

インターフェース制御:

  • /cls:画面をクリアするが、会話履歴は保持
  • /clear:画面と会話履歴をクリア
  • /verboseまたは/v:詳細モードと簡潔モードのツール表示を切り替え

インタラクティブモード

インタラクティブモードは、スラッシュコマンドを使用してサーバーと直接対話するためのコマンドラインインターフェースを提供します:

mcp-cli interactive --server sqlite

インタラクティブモードコマンド

  • /ping:サーバーが応答しているか確認
  • /prompts:利用可能なプロンプトを一覧表示
  • /tools:利用可能なツールを一覧表示
  • /resources:利用可能なリソースを一覧表示
  • /chat:チャットモードに入る
  • /exitまたは/quit:プログラムを終了

コマンドモード

コマンドモードは、自動化とパイプライン統合のためのUnixフレンドリーなインターフェースを提供します:

mcp-cli cmd --server sqlite [options]

コマンドモードオプション

  • --input:入力ファイルのパス(-は標準入力を意味します)
  • --output:出力ファイルのパス(-は標準出力を意味し、デフォルトです)
  • --prompt:プロンプトテンプレート({{input}}を入力プレースホルダーとして使用)
  • --raw:フォーマットせずに生のテキストを出力
  • --tool:特定のツールを直接呼び出す
  • --tool-args:ツール呼び出しのJSONパラメータ
  • --system-prompt:カスタムシステムプロンプト

コマンドモードの例

# ドキュメントの要約
mcp-cli cmd --server sqlite --input document.md --prompt "Summarize this: {{input}}" --output summary.md

# 標準入力を処理し、標準出力に出力
cat document.md | mcp-cli cmd --server sqlite --input - --prompt "Extract key points: {{input}}"

# ツールを直接呼び出す
mcp-cli cmd --server sqlite --tool list_tables --raw
mcp-cli cmd --server sqlite --tool read_query --tool-args '{"query": "SELECT COUNT(*) FROM users"}'

# バッチ処理
ls *.md | parallel mcp-cli cmd --server sqlite --input {} --output {}.summary.md --prompt "Summarize: {{input}}"

直接コマンド

インタラクティブモードに入ることなく、単一のコマンドを実行できます:

# 利用可能なツールを一覧表示
mcp-cli tools list --server sqlite

# 特定のツールを呼び出す
mcp-cli tools call --server sqlite

# 利用可能なプロンプトを一覧表示
mcp-cli prompts list --server sqlite

# サーバー接続を確認
mcp-cli ping --server sqlite

# 利用可能なリソースを一覧表示
mcp-cli resources list --server sqlite

設定ファイル

サーバーを設定するためにserver_config.jsonファイルを作成します:

{
  "mcpServers": {
    "sqlite": {
      "command": "python",
      "args": ["-m", "mcp_server.sqlite_server"],
      "env": {
        "DATABASE_PATH": "your_database.db"
      }
    },
    "another-server": {
      "command": "python",
      "args": ["-m", "another_server_module"],
      "env": {}
    }
  }
}

プロジェクト構造

src/
├── mcp_cli/
│   ├── chat/                    # チャットモードの実装
│   │   ├── commands/            # チャットスラッシュコマンド
│   │   │   ├── __init__.py      # コマンド登録システム
│   │   │   ├── conversation.py  # 会話管理
│   │   │   ├── help.py          # ヘルプコマンド
│   │   │   ├── tools.py         # ツールコマンド
│   │   │   └── ...
│   │   ├── chat_context.py      # チャットセッション状態管理
│   │   ├── chat_handler.py      # メインチャットループハンドラー
│   │   ├── command_completer.py # コマンド自動補完
│   │   └── ui_manager.py        # ユーザーインターフェース
│   ├── commands/                # CLIコマンド
│   │   ├── chat.py              # チャットコマンド
│   │   ├── cmd.py               # コマンドモード
│   │   ├── interactive.py       # インタラクティブモード
│   │   └── ...
│   ├── llm/                     # LLMクライアントの実装
│   │   ├── providers/           # プロバイダー固有のクライアント
│   │   │   ├── base.py          # 基本LLMクライアント
│   │   │   └── openai_client.py # OpenAIの実装
│   │   └── llm_client.py        # クライアントファクトリ
│   ├── ui/                      # ユーザーインターフェースコンポーネント
│   │   ├── colors.py            # 色の定義
│   │   └── ui_helpers.py        # UIツール
│   ├── main.py                  # メインエントリーポイント
│   └── config.py                # 設定ローダー

使用例

自動ツール実行

チャットモードでは、MCP CLIはサーバーが提供するツールを自動的に実行できます:

You: What tables are available in the database?
Assistant: Let me check for you.
[Tool Call: list_tables]
I found the following tables in the database:
- users
- products  
- orders
- categories

You: How many users do we have?
Assistant: I'll query the database for that information.
[Tool Call: read_query]
There are 873 users in the database.

自動化スクリプト

コマンドモードは強力な自動化スクリプトをサポートします:

#!/bin/bash
# 複数のドキュメントを分析するスクリプトの例

# 現在のディレクトリ内のすべてのMarkdownファイルを処理
for file in *.md; do
    echo "Processing $file..."
    
    # 要約を生成
    mcp-cli cmd --server sqlite --input "$file" \
        --prompt "Summarize this document: {{input}}" \
        --output "${file%.md}.summary.md"
    
    # エンティティを抽出
    mcp-cli cmd --server sqlite --input "$file" \
        --prompt "Extract all company names, people, and locations from this text: {{input}}" \
        --output "${file%.md}.entities.txt" --raw
done

# 統合レポートを作成
echo "Creating final report..."
cat *.entities.txt | mcp-cli cmd --server sqlite --input - \
    --prompt "Analyze these entities and identify the most frequently mentioned:" \
    --output report.md

会話履歴管理

会話履歴の追跡と管理:

> /conversation
Conversation History (12 messages)
# | Role | Content
1 | system | You are an intelligent assistant capable of using t...
2 | user | What tables are available in the database?
3 | assistant | Let me check for you.
4 | assistant | [Tool call: list_tables]
...

> /conversation 4
Message #4 (Role: assistant)
[Tool call: list_tables]
Tool Calls:
1. ID: call_list_tables_12345678, Type: function, Name: list_tables
Arguments: {}

> /save conversation.json
Conversation saved to conversation.json

> /compact
Conversation history compacted with summary.
Summary:
The user asked about database tables, and I listed the available tables (users, products, orders, categories). The user then asked about the number of users, and I queried the database to find there are 873 users.

依存関係管理

CLIはオプションの依存関係グループを使用して構成されています:

  • cli:豊富なターミナルUI、コマンド自動補完、プロバイダー統合
  • dev:開発ツールとテストツール
  • wasm:(将来のWebAssemblyサポートのために予約済み)
  • chuk-mcp:プロトコル実装ライブラリ(コア依存関係)

特定のextrasをインストール:

pip install "mcp-cli[cli]"        # 基本的なCLI機能
pip install "mcp-cli[cli,dev]"    # CLI + 開発ツール

貢献ガイドライン

貢献を歓迎します!以下の手順に従ってください:

  1. リポジトリをフォーク
  2. 機能ブランチを作成 (git checkout -b feature/amazing-feature)
  3. 変更をコミット (git commit -m 'Add some amazing feature')
  4. ブランチにプッシュ (git push origin feature/amazing-feature)
  5. プルリクエストを開く

モデルコンテキストプロトコル(MCP)について

MCPは、アプリケーションがLLMにコンテキストを提供する方法を標準化するオープンプロトコルです。MCPは、AIアプリケーションにおけるUSB-Cポートに例えることができます。USB-Cがデバイスを様々な周辺機器やアクセサリに接続するための標準化された方法を提供したように、MCPはAIモデルを様々なデータソースやツールに接続するための標準化された方法を提供します。

Star History Chart