Pharo Smalltalk Interop Mcp Server について
Pharo Smalltalk image を扱う開発者向けのローカル MCP サーバーです。コード実行、image の調査、パッケージやテストの操作、UI デバッグに対応し、このリポジトリは現在、履歴参照用です。
主な機能
- 01Smalltalk 式の実行
- 02クラスとメソッドのソース調査
- 03クラス、メソッド、参照の検索
- 04Tonel パッケージのインポートとエクスポート
- 05プロジェクトのインストールとテスト実行
- 06UI の調査とサーバー設定の変更
活用シーン
- 01ローカルの Pharo image で式を実行
- 02実装や参照箇所の検索
- 03パッケージ管理とテストスイートの実行
- 04デバッグ時の Pharo UI 状態の確認
MCP 対応
PharoSmalltalkInteropServer を介してローカルの Pharo image を操作する 22 個のツールを MCP クライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
pharo-smalltalk-interop-mcp-server
⚠️ このプロジェクトは移転しました。 v4.0.0 以降、開発は smalltalk-interop-mcp-server に移行しました。この新しいプロジェクトでは、Pharo に加えて Squeak の SIS サーバーもサポートしています。最新の機能や更新を利用するには、新しいリポジトリをお使いください。このリポジトリは、履歴を参照する目的でのみ残されています。
ローカルの Pharo Smalltalk イメージと通信するためのローカル MCP サーバーです。 以下をサポートしています。
- コード評価:Smalltalk 式を実行して結果を返します
- コードイントロスペクション:クラスやメソッドのソースコード、コメント、メタデータを取得します
- 検索と探索:クラス、トレイト、メソッド、参照、実装先を検索します
- パッケージ管理:Tonel 形式でパッケージをエクスポートおよびインポートします
- プロジェクトのインストール:Metacello を使用してプロジェクトをインストールします
- テスト実行:パッケージまたはクラス単位でテストスイートを実行します
- UI デバッグ:World morph、Spec presenter、Roassal visualization のスクリーンショットを撮影し、UI 構造を調査します
- サーバー設定:サーバー設定を動的に取得および変更します
前提条件
- Python 3.10 以降
- uv パッケージマネージャー
- PharoSmalltalkInteropServer をインストールした Pharo
インストール
クイックスタート(uvx を使用)
リポジトリをクローンせずにサーバーを実行する最も簡単な方法です。
uvx --from git+https://github.com/mumez/pharo-smalltalk-interop-mcp-server.git pharo-smalltalk-interop-mcp-server
開発用インストール
開発環境をセットアップするには、次の手順を実行します。
- リポジトリをクローンします。
git clone https://github.com/mumez/pharo-smalltalk-interop-mcp-server.git
- uv を使用して依存関係をインストールします。
cd pharo-smalltalk-interop-mcp-server
uv sync --dev
使用方法
MCP サーバーの実行
uvx を使用する場合(インストール不要):
uvx --from git+https://github.com/mumez/pharo-smalltalk-interop-mcp-server.git pharo-smalltalk-interop-mcp-server
uv を使用する場合(リポジトリのクローン後):
uv run pharo-smalltalk-interop-mcp-server
環境変数
環境変数を使用してサーバーを設定できます。
PHARO_SIS_PORT:PharoSmalltalkInteropServer のポート番号(デフォルト:8086)
例:
uvx を使用する場合:
PHARO_SIS_PORT=8086 uvx --from git+https://github.com/mumez/pharo-smalltalk-interop-mcp-server.git pharo-smalltalk-interop-mcp-server
uv を使用する場合:
PHARO_SIS_PORT=9999 uv run pharo-smalltalk-interop-mcp-server
Cursor MCP の設定
uvx を使用する場合(推奨):
{
"mcpServers": {
"smalltalk-interop": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/mumez/pharo-smalltalk-interop-mcp-server.git",
"pharo-smalltalk-interop-mcp-server"
],
"env": {
"PHARO_SIS_PORT": "8086"
}
}
}
}
uv を使用する場合(クローン後):
{
"mcpServers": {
"smalltalk-interop": {
"command": "uv",
"args": [
"--directory",
"/your-path/to/pharo-smalltalk-interop-mcp-server",
"run",
"pharo-smalltalk-interop-mcp-server"
],
"env": {
"PHARO_SIS_PORT": "8086"
}
}
}
}
注:env セクションは省略可能で、MCP サーバーの環境変数を設定するために使用できます。
Claude Code の設定
uvx を使用する場合(推奨):
claude mcp add -s user smalltalk-interop -- uvx --from git+https://github.com/mumez/pharo-smalltalk-interop-mcp-server.git pharo-smalltalk-interop-mcp-server
uv を使用する場合(クローン後):
claude mcp add -s user smalltalk-interop -- uv --directory /path/to/pharo-smalltalk-interop-mcp-server run pharo-smalltalk-interop-mcp-server
利用可能な MCP ツール
このサーバーは、PharoSmalltalkInteropServer のすべての API に対応する 22 個の MCP ツールを提供します。
コード評価
eval:Smalltalk 式を実行して結果を返します
コードイントロスペクション
get_class_source:クラスのソースコードを取得しますget_method_source:特定のメソッドのソースコードを取得しますget_class_comment:クラスのコメントやドキュメントを取得します
検索と探索
search_classes_like:パターンに一致するクラスを検索しますsearch_methods_like:パターンに一致するメソッドを検索しますsearch_traits_like:パターンに一致するトレイトを検索しますsearch_implementors:メソッドセレクターのすべての実装先を検索しますsearch_references:メソッドセレクターへのすべての参照を検索しますsearch_references_to_class:クラスへのすべての参照を検索します
パッケージ管理
list_packages:イメージ内のすべてのパッケージを一覧表示しますlist_classes:特定のパッケージ内のクラスを一覧表示しますlist_extended_classes:パッケージ内の拡張クラスを一覧表示しますlist_methods:パッケージ内のメソッドを一覧表示しますexport_package:パッケージを Tonel 形式でエクスポートしますimport_package:指定したパスからパッケージをインポートします
プロジェクトのインストール
install_project:省略可能なロードグループを指定して、Metacello を使用してプロジェクトをインストールします
テスト実行
run_package_test:パッケージのテストスイートを実行しますrun_class_test:特定のクラスのテストスイートを実行します
UI のデバッグ
read_screen:スクリーンショットと構造の抽出によって Pharo インターフェースをデバッグする UI スクリーンリーダー
サーバー設定
get_settings:現在のサーバー設定を取得しますapply_settings:サーバー設定を動的に変更します
read_screen ツール
read_screen ツールは、スクリーンショットを取得し、Pharo UI の問題をデバッグするために UI の構造を抽出します。
パラメーター:
target_type(文字列、デフォルト:'world'):検査する UI の種類(モーフには 'world'、ウィンドウには 'spec'、ビジュアライゼーションには 'roassal')capture_screenshot(ブール値、デフォルト:true):レスポンスに PNG スクリーンショットを含めます
**戻り値:**スクリーンショットと人が読める概要を含む UI 構造
使用例:
# Inspect all morphs in World
read_screen(target_type='world')
# Inspect Spec presenter windows
read_screen(target_type='spec', capture_screenshot=false)
# Inspect Roassal visualizations without screenshot (faster)
read_screen(target_type='roassal', capture_screenshot=false)
抽出されるデータ:
World(モーフ):
- クラス名と種類の識別情報
- 境界(x、y、幅、高さの座標)
- 可視状態
- 背景色
- オーナークラス
- サブモーフの数
- テキスト内容(取得可能な場合)
出力例:
{
"totalMorphs": 12,
"displayedMorphCount": 1,
"morphs": [
{
"class": "MenubarMorph",
"visible": true,
"bounds": {"x": 0, "y": 0, "width": 976, "height": 18},
"backgroundColor": "(Color r: 0.883... alpha: 0.8)",
"owner": "WorldMorph",
"submorphCount": 8
}
]
}
Spec(プレゼンター):
- ウィンドウのタイトルとクラス名
- ジオメトリ(サイズ、位置)
- ウィンドウの状態(最大化、最小化、サイズ変更可能かどうか)
- 装飾(メニュー、ツールバー、ステータスバーの有無)
- プレゼンターの階層(最大 3 階層まで再帰的に表示)
- プレゼンターのクラス名、子の数、コンテンツのプロパティ(ラベル、テキスト、値など)
- 有効状態と可視状態
出力例:
{
"windowCount": 1,
"presenters": [
{
"class": "SpWindowPresenter",
"title": "Welcome",
"extent": "(700@550)",
"hasMenu": false,
"presenter": {
"class": "StWelcomeBrowser",
"childCount": 2,
"isVisible": true,
"children": []
}
}
]
}
Roassal(ビジュアライゼーション):
- キャンバスの境界と可視状態
- キャンバスクラスの識別情報
- 背景色とズームレベル
- 図形の詳細(色、位置、サイズ、ラベル、テキスト)
- エッジの詳細(ソース、ターゲット、色、ラベル)
- ノードとエッジの数
出力例:
{
"canvasCount": 1,
"canvases": [
{
"class": "RSAthensMorph",
"canvasClass": "RSCanvas",
"bounds": {"x": 203, "y": 145, "width": 490, "height": 467},
"backgroundColor": "Color blue",
"zoomLevel": "1.0",
"shapeCount": 5,
"shapes": [
{
"class": "RSCircle",
"color": "(Color r: 1.0 g: 0.0 b: 0.0 alpha: 0.2)",
"position": "([email protected])",
"extent": "([email protected])"
}
],
"edgeCount": 0,
"edges": [],
"nodeCount": 0
}
]
}
サーバー設定ツール
get_settings ツールと apply_settings ツールを使用して、サーバー設定を動的に管理できます。
get_settings
現在のサーバー設定を取得します。
パラメーター: なし
**戻り値:**現在のサーバー設定を含む辞書
使用例:
# Get current settings
get_settings()
# Returns: {"stackSize": 100, "customKey": "customValue"}
レスポンス形式:
{
"success": true,
"result": {
"stackSize": 100,
"customKey": "customValue"
}
}
apply_settings
サーバー設定を動的に変更します。設定は現在のセッション中に直ちに反映されます。
パラメーター:
settings(辞書):変更する設定を含む辞書
**戻り値:**成功を確認するメッセージ
使用例:
# Apply new settings
apply_settings(settings={"stackSize": 200, "customKey": "customValue"})
# Returns: "Settings applied successfully"
一般的な設定:
| 設定 | 型 | デフォルト | 説明 |
|---|---|---|---|
stackSize | 整数 | 100 | エラー報告におけるスタックトレースの最大深度 |
**注:**サーバーは、ドキュメントに記載された設定以外の任意のキーと値のペアも受け付けるため、カスタム設定オプションを使用できます。
開発
テストの実行
このプロジェクトには、稼働中の Pharo インスタンスを必要としないモックベースのテストを用いた、包括的な単体テストが含まれています。
# Run all tests
uv run pytest
# Run tests with verbose output
uv run pytest -v
# Run specific test file
uv run pytest tests/test_core.py -v
コード品質
# Run linting
uv run ruff check
# Run formatting
uv run ruff format
# Run all pre-commit hooks
uv run pre-commit run --all-files
プロジェクト構成
pharo-smalltalk-interop-mcp-server/
├── pharo_smalltalk_interop_mcp_server/
│ ├── __init__.py
│ ├── core.py # HTTP client and core functions
│ └── server.py # FastMCP server with tool definitions
├── tests/
│ ├── __init__.py
│ ├── test_core.py # Tests for core HTTP client functionality
│ └── test_server.py # Tests for MCP server integration
├── pyproject.toml # Project configuration
├── pytest.ini # Test configuration
└── README.md
テスト戦略
テストスイートでは、以下を確実にするためにモックベースのテストを使用します。
- 外部依存なし:稼働中の Pharo インスタンスを必要とせずにテストを実行できます
- 包括的なカバレッジ:22 個すべてのエンドポイントとエラーシナリオをテストします
- 高速実行:テストは 1 秒未満で完了します
- 信頼できる結果:テストは決定論的で、外部状態に依存しません
テストカバレッジには以下が含まれます。
- HTTP クライアントの機能(
PharoClientクラス) - 22 個すべての Pharo 相互運用操作
- エラー処理(接続エラー、HTTP エラー、JSON 解析エラー)
- MCP サーバーの初期化とツールの登録
- コア関数と MCP ツールの連携
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。