Quack MCP Server について
Quackは、PythonコードのLintと静的型解析を非同期で行うMCPサーバーです。解析ジョブの送信、状態確認、結果取得を必要とする開発者やコーディングエージェントを対象としています。
主な機能
- 01pylintによるLint
- 02mypyによる型チェック
- 03解析ジョブの非同期処理
- 04ジョブの追跡と結果取得
- 05stdioとSSEのトランスポート
活用シーン
- 01Pythonコードのスタイルと品質の確認
- 02静的な型エラーの検出
- 03複数の解析ジョブの送信
- 04ジョブの状態と結果の取得
MCP 対応
PythonコードのLintと静的解析を送信するツールに加え、ジョブ一覧と結果取得のツールを提供します。stdioとSSEに対応しています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Quack MCP サーバー
Quack は、Python コードのコード分析とテストを自動化する MCP サーバーとして構築された継続的インテグレーションサーバーです。Python コードのリンティングと静的型分析を行うツールを提供します。
機能
- リンティング:pylint を使用して、Python コードのスタイル、フォーマット、コード品質に関する問題を分析します。
- 静的解析:mypy を使用して静的型チェックを実行し、型エラーを特定します。
- 非同期処理:ジョブは非同期で処理されるため、複数のコード送信を同時に分析できます。
- ジョブ管理:送信したジョブの結果を追跡、取得できます。
インストール
- リポジトリをクローンします:
git clone https://github.com/yourusername/quack.git
cd quack
- 依存関係をインストールします:
pip install -r requirements.txt
Quack サーバーには、以下の依存関係が必要です:
mcp[cli]
pylint
mypy
pytest
pytest-asyncio
使用方法
サーバーの起動
stdio トランスポート(デフォルト)で Quack サーバーを起動するには:
python3 quack.py
デバッグログを有効にするには:
python3 quack.py --debug
HTTP 通信に SSE(Server-Sent Events)トランスポートを使用してサーバーを起動するには:
python3 quack.py --sse --host=0.0.0.0 --port=8000
または、付属のシェルスクリプトを使用できます:
# For stdio transport (default)
./run_quack.sh
# For SSE transport
./run_quack.sh --sse --host=0.0.0.0 --port=8000
Docker コンテナ
Quack サーバーは Docker コンテナで実行できます。この場合、SSE トランスポートが自動的に使用されます:
# Build the Docker image
docker build -t quack-mcp-server .
# Run the container, exposing port 8000
docker run -p 8000:8000 quack-mcp-server
Docker コンテナで実行すると、サーバーはポート 8000 で SSE モードとして自動的に起動します。
MCP ツールの使用
Quack は以下の MCP ツールを公開します:
submit_code:リンティングと静的解析の両方を行うコードを送信します。submit_code_for_linting:リンティングのみを行うコードを送信します。submit_code_for_static_analysis:静的解析のみを行うコードを送信します。get_job_results:送信したジョブの結果を取得します。list_jobs:すべてのジョブとそのステータスを一覧表示します。
テストアーキテクチャ
Quack には、異なる 2 つのテスト概念があります:
-
Quack 自体のテスト:
tests/ディレクトリのテストでは、Quack サーバー、ジョブマネージャー、プロセッサが正しく動作することを確認します。新しいプロセッサを追加するときは、そのプロセッサが正しく動作することを確認するテストをここに追加してください。 -
Quack によるテスト:Quack が送信されたコードに対して実行する分析です。リンティングプロセッサと静的解析プロセッサは、Python コードの問題を分析します。新しいプロセッサも、個別に送信されたコードに対して同様の分析を行います。
ディレクトリ構成
tests/
├── server/ # Tests OF the server functionality
│ ├── test_server_direct.py # Direct testing of job manager
│ ├── test_server_auto.py # Auto-starts and stops the server
│ └── test_server_client.py # Tests the MCP client interface
├── processors/ # Tests OF the processors
│ ├── test_lint_processor.py # Tests for lint processor
│ └── test_static_analysis_processor.py # Tests for static analysis
└── examples/ # Example submissions for testing BY the server
└── example_code.py # Contains intentional issues for testing
新しいプロセッサ(例:テストカバレッジプロセッサ)を実装するときは:
quack/processors/にプロセッサを作成しますtests/processors/にプロセッサのテストを追加します- プロセッサが分析する内容のテストには、
tests/examples/のコードを使用します
テストの実行
リポジトリには、tests ディレクトリに包括的なテストスイートが含まれています。すべてのテストは pytest を使用して管理されます。
- すべてのテストを実行します:
python -m pytest tests/ --asyncio-mode=auto
- 特定のテストファイルを実行します:
python -m pytest tests/server/test_server_direct.py -v --asyncio-mode=auto
- 特定のプロセッサのテストを実行します:
python -m pytest tests/processors/test_lint_processor.py -v
- 詳細な出力を表示し、テストの進行状況を確認しながらテストを実行します:
python -m pytest tests/ -v --asyncio-mode=auto
- 最初の失敗で停止してテストを実行します:
python -m pytest tests/ -x --asyncio-mode=auto
サーバーの自動管理
多くのテストでは必要に応じて Quack サーバーが自動的に起動、停止するため、テスト中にサーバープロセスを手動で管理する必要はありません。これは conftest.py ファイルの pytest フィクスチャによって処理されます。
tests/server/test_server_auto.py のサーバーテストでは、テスト用にサーバーを自動的に起動、停止する方法を示しています。これらのテストでは、以下を確認します:
- サーバーが正しく起動する
- サーバーがジョブを処理できる
- サーバーが正しくシャットダウンする
Cline で Quack をセットアップする
Quack を Cline と統合すると、Cline インターフェースから直接コード分析機能を利用できます。
設定手順
-
Cline の MCP 設定を構成します
Quack サーバーは、以下の場所にある Cline の MCP 設定ファイルで構成できます:
~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.jsonローカルの Stdio モード(デフォルト)の場合
{ "mcpServers": { "quack": { "command": "python3", "args": ["/path/to/your/quack.py", "--debug"], "env": {}, "disabled": false, "autoApprove": [] } } }SSE を使用する Docker コンテナの場合
サーバーを Docker コンテナで実行する場合は、HTTP/SSE 経由で接続するよう Cline を構成します:
{ "mcpServers": { "quack": { "url": "http://localhost:8000/sse", "disabled": false, "autoApprove": [] } } }注:Docker コンテナを別のポートにマッピングした場合は、
localhost:8000を適切なホストとポートに置き換えてください。
Cline で Quack を使う
設定が完了すると、Cline を使って Quack サーバーで Python コードを分析できます。プロンプトの例を以下に示します。
-
リントの問題についてコードを分析する:
Analyze this Python code for linting issues: [paste your code here] -
コードに型エラーがないか確認する:
Check this Python code for type errors: [paste your code here] -
包括的なフィードバックを取得する:
What's wrong with this Python function? [paste your function here]
テスト用のサンプルコード
意図的に問題を含めた以下のサンプルコードを使って、Quack サーバーをテストできます。
# Linting issues
unused_var = 42 # Unused variable
x = 10 # Single-letter variable name
# Type issues
def add(a: int, b: int) -> int:
return a + b
# Function with both linting and type issues
def calculate_average(numbers): # Missing type annotations
total = 0
for num in numbers:
total += num
unused_result = total * 2 # Unused variable
return total / len(numbers)
# Call with wrong type
result = add("5", 10) # Type error: str + int
仕組み
- Cline に Python コードの分析を依頼すると、Cline は Quack MCP サーバーを使用します
- Quack サーバーは、リントツールと静的解析ツールを使ってコードを処理します
- 結果が Cline に返され、読みやすい形式で表示されます
トラブルシューティング
Cline が Quack サーバーを使用していないように見える場合は、次の点を確認してください。
- MCP 設定ファイルで Quack サーバーが正しく設定されていることを確認します
- quack.py ファイルへのパスが正しいことを確認します(stdio モードの場合)
- URL が正しく、サーバーが稼働していることを確認します(SSE モードの場合)
- すべての依存関係がインストールされていることを確認します
- VSCode を再起動して、MCP 設定を再読み込みします
Docker 固有の問題
Docker で実行する場合:
-
ポートマッピング:コンテナのポート 8000 がホストポートに正しくマッピングされていることを確認します。
docker run -p 8000:8000 quack-mcp-server -
ネットワークアクセス:複雑なネットワーク環境で Docker を実行している場合は、ホストからコンテナのポートにアクセスできることを確認します。
-
コンテナログ:起動時の問題がないか、コンテナのログを確認します。
docker logs <container_id> -
接続のテスト:SSE エンドポイントにアクセスできるかテストできます。
curl http://localhost:8000ルートエンドポイントがないため 404 レスポンスが返されますが、これによりサーバーが稼働していることを確認できます。
アーキテクチャ
Quack は Model Context Protocol(MCP)を使用して構築されており、次のコンポーネントで構成されています。
- サーバー:クライアント接続とツールの呼び出しを処理するメインの MCP サーバーです。
- ジョブマネージャー:ジョブの送信、処理、結果の取得など、ジョブのライフサイクルを管理します。
- プロセッサー:コード分析を実行する専用コンポーネントです。
- リントプロセッサー:pylint を使って、コードのスタイルと品質を分析します。
- 静的解析プロセッサー:mypy を使って静的型チェックを実行します。
開発
新しいプロセッサーの追加
新しいプロセッサーを追加するには:
quack/processorsディレクトリに新しいプロセッサークラスを作成します。- 分析を実行する
processメソッドを実装します。 - サーバーにプロセッサーを登録します。
tests/processors/にプロセッサーのテストを追加します。
例:テストカバレッジプロセッサーの追加
- プロセッサーの実装を記述した
quack/processors/coverage.pyを作成します quack/server.pyでプロセッサーをサーバーに追加しますtests/processors/test_coverage_processor.pyにテストを作成しますtests/examples/のサンプルコードを使ってプロセッサーをテストします
デバッグ
--debug フラグを付けてサーバーを実行すると、詳細なログを有効にできます。
python3 quack.py --debug
ログはコンソールと logs/quack.log の両方に書き込まれます。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。