mcpField
P
Pharo Smalltalk Interop Mcp Server

Pharo Smalltalk Interop Mcp Server

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

Pharo Smalltalk Interop Mcp Server について

Pharo Smalltalk image を扱う開発者向けのローカル MCP サーバーです。コード実行、image の調査、パッケージやテストの操作、UI デバッグに対応し、このリポジトリは現在、履歴参照用です。

主な機能

  1. 01Smalltalk 式の実行
  2. 02クラスとメソッドのソース調査
  3. 03クラス、メソッド、参照の検索
  4. 04Tonel パッケージのインポートとエクスポート
  5. 05プロジェクトのインストールとテスト実行
  6. 06UI の調査とサーバー設定の変更

活用シーン

  1. 01ローカルの Pharo image で式を実行
  2. 02実装や参照箇所の検索
  3. 03パッケージ管理とテストスイートの実行
  4. 04デバッグ時の Pharo UI 状態の確認

MCP 対応

PharoSmalltalkInteropServer を介してローカルの Pharo image を操作する 22 個のツールを MCP クライアントに提供します。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"pharo-smalltalk-interop": {
"command": "uvx",
"args": [
"git+https://github.com/mumez/pharo-smalltalk-interop-mcp-server.git"
],
"env": {
"PHARO_SIS_PORT": "<PHARO_SIS_PORT>"
}
}
}
}
起動コマンドuvx 'git+https://github.com/mumez/pharo-smalltalk-interop-mcp-server.git'
設定が必要な環境変数
PHARO_SIS_PORT

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypigit+https://github.com/mumez/pharo-smalltalk-interop-mcp-server.git

ツール

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

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

詳細

pharo-smalltalk-interop-mcp-server

CI

⚠️ このプロジェクトは移転しました。 v4.0.0 以降、開発は smalltalk-interop-mcp-server に移行しました。この新しいプロジェクトでは、Pharo に加えて Squeak の SIS サーバーもサポートしています。最新の機能や更新を利用するには、新しいリポジトリをお使いください。このリポジトリは、履歴を参照する目的でのみ残されています。

ローカルの Pharo Smalltalk イメージと通信するためのローカル MCP サーバーです。 以下をサポートしています。

  • コード評価:Smalltalk 式を実行して結果を返します
  • コードイントロスペクション:クラスやメソッドのソースコード、コメント、メタデータを取得します
  • 検索と探索:クラス、トレイト、メソッド、参照、実装先を検索します
  • パッケージ管理:Tonel 形式でパッケージをエクスポートおよびインポートします
  • プロジェクトのインストール:Metacello を使用してプロジェクトをインストールします
  • テスト実行:パッケージまたはクラス単位でテストスイートを実行します
  • UI デバッグ:World morph、Spec presenter、Roassal visualization のスクリーンショットを撮影し、UI 構造を調査します
  • サーバー設定:サーバー設定を動的に取得および変更します

前提条件

インストール

クイックスタート(uvx を使用)

リポジトリをクローンせずにサーバーを実行する最も簡単な方法です。

uvx --from git+https://github.com/mumez/pharo-smalltalk-interop-mcp-server.git pharo-smalltalk-interop-mcp-server
開発用インストール

開発環境をセットアップするには、次の手順を実行します。

  1. リポジトリをクローンします。
git clone https://github.com/mumez/pharo-smalltalk-interop-mcp-server.git
  1. 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 ツールの連携

コメント

MCP は初めてですか?

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

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