pharo-smalltalk-interop-mcp-server
This server provides a local MCP interface to interact with a Pharo Smalltalk image, offering 22 tools for code evaluation, introspection, search, package management, project installation, test execution, UI debugging, and server configuration.
Code Evaluation: Execute arbitrary Smalltalk expressions via
eval.Code Introspection: Retrieve source code for classes (
get_class_source), methods (get_method_source), and class comments (get_class_comment).Search & Discovery: Find classes (
search_classes_like), methods (search_methods_like), traits (search_traits_like), implementors (search_implementors), references to methods or symbols (search_references), and references to classes (search_references_to_class).Package Management: List packages (
list_packages), classes in a package (list_classes), extended classes (list_extended_classes), and methods in a package (list_methods); export (export_package) and import (import_package) packages in Tonel format.Project Installation: Install projects via Metacello with optional load groups (
install_project).Test Execution: Run test suites at package (
run_package_test) or class (run_class_test) level.UI Debugging: Capture screenshots and inspect UI structure for World morphs, Spec presenters, and Roassal visualizations using
read_screen, with options to specify target type and screenshot capture.Server Configuration: Retrieve (
get_settings) and dynamically modify (apply_settings) server settings, includingstackSizeand custom key-value pairs.
pharo-smalltalk-interop-mcp-server
⚠️ This project has moved. Starting with v4.0.0, development has moved to smalltalk-interop-mcp-server, which adds support for Squeak's SIS server in addition to Pharo. Please use the new repository for the latest features and updates; this repository is kept for historical reference only.
A local MCP server to communicate local Pharo Smalltalk image. It supports:
Code Evaluation: Execute Smalltalk expressions and return results
Code Introspection: Retrieve source code, comments, and metadata for classes and methods
Search & Discovery: Find classes, traits, methods, references, and implementors
Package Management: Export and import packages in Tonel format
Project Installation: Install projects using Metacello
Test Execution: Run test suites at package or class level
UI Debugging: Capture screenshots and inspect UI structure for World morphs, Spec presenters, and Roassal visualizations
Server Configuration: Retrieve and modify server settings dynamically
Prerequisites
Python 3.10 or later
uv package manager
Pharo with PharoSmalltalkInteropServer installed
Related MCP server: mcp-server-code-runner
Installation
Quick Start (using uvx)
The easiest way to run the server without cloning the repository:
uvx --from git+https://github.com/mumez/pharo-smalltalk-interop-mcp-server.git pharo-smalltalk-interop-mcp-serverDevelopment Installation
To set up for development:
Clone the repository:
git clone https://github.com/mumez/pharo-smalltalk-interop-mcp-server.gitInstall dependencies using uv:
cd pharo-smalltalk-interop-mcp-server
uv sync --devUsage
Running the MCP Server
Using uvx (no installation required):
uvx --from git+https://github.com/mumez/pharo-smalltalk-interop-mcp-server.git pharo-smalltalk-interop-mcp-serverUsing uv (after cloning the repository):
uv run pharo-smalltalk-interop-mcp-serverEnvironment Variables
You can configure the server using environment variables:
PHARO_SIS_PORT: Port number for PharoSmalltalkInteropServer (default: 8086)
Examples:
Using uvx:
PHARO_SIS_PORT=8086 uvx --from git+https://github.com/mumez/pharo-smalltalk-interop-mcp-server.git pharo-smalltalk-interop-mcp-serverUsing uv:
PHARO_SIS_PORT=9999 uv run pharo-smalltalk-interop-mcp-serverCursor MCP settings
Using uvx (recommended):
{
"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"
}
}
}
}Using uv (after cloning):
{
"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"
}
}
}
}Note: The env section is optional and can be used to set environment variables for the MCP server.
Claude Code Configuration
Using uvx (recommended):
claude mcp add -s user smalltalk-interop -- uvx --from git+https://github.com/mumez/pharo-smalltalk-interop-mcp-server.git pharo-smalltalk-interop-mcp-serverUsing uv (after cloning):
claude mcp add -s user smalltalk-interop -- uv --directory /path/to/pharo-smalltalk-interop-mcp-server run pharo-smalltalk-interop-mcp-serverMCP Tools Available
This server provides 22 MCP tools that map to all PharoSmalltalkInteropServer APIs:
Code Evaluation
eval: Execute Smalltalk expressions and return results
Code Introspection
get_class_source: Retrieve source code of a classget_method_source: Retrieve source code of a specific methodget_class_comment: Retrieve comment/documentation of a class
Search & Discovery
search_classes_like: Find classes matching a patternsearch_methods_like: Find methods matching a patternsearch_traits_like: Find traits matching a patternsearch_implementors: Find all implementors of a method selectorsearch_references: Find all references to a method selectorsearch_references_to_class: Find all references to a class
Package Management
list_packages: List all packages in the imagelist_classes: List classes in a specific packagelist_extended_classes: List extended classes in a packagelist_methods: List methods in a packageexport_package: Export a package in Tonel formatimport_package: Import a package from specified path
Project Installation
install_project: Install a project using Metacello with optional load groups
Test Execution
run_package_test: Run test suites for a packagerun_class_test: Run test suites for a specific class
UI Debugging
read_screen: UI screen reader for debugging Pharo interfaces with screenshot and structure extraction
Server Configuration
get_settings: Retrieve current server configurationapply_settings: Modify server configuration dynamically
read_screen Tool
The read_screen tool captures screenshots and extracts UI structure for debugging Pharo UI issues.
Parameters:
target_type(string, default: 'world'): UI type to inspect ('world' for morphs, 'spec' for windows, 'roassal' for visualizations)capture_screenshot(boolean, default: true): Include PNG screenshot in response
Returns: UI structure with screenshot and human-readable summary
Usage Examples:
# 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)Extracted Data Includes:
World (morphs):
Class name and type identification
Bounds (x, y, width, height coordinates)
Visibility state
Background color
Owner class
Submorph count
Text content (if available)
Example output:
{
"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 (presenters):
Window title and class name
Geometry (extent, position)
Window state (maximized, minimized, resizable)
Decorations (menu, toolbar, statusbar presence)
Presenter hierarchy (recursive with max depth of 3 levels)
Presenter class name, child count, and content properties (label, text, value, etc.)
Enablement and visibility state
Example output:
{
"windowCount": 1,
"presenters": [
{
"class": "SpWindowPresenter",
"title": "Welcome",
"extent": "(700@550)",
"hasMenu": false,
"presenter": {
"class": "StWelcomeBrowser",
"childCount": 2,
"isVisible": true,
"children": []
}
}
]
}Roassal (visualizations):
Canvas bounds and visibility state
Canvas class identification
Background color and zoom level
Shape details (color, position, extent, label, text)
Edge details (source, target, color, label)
Node and edge counts
Example output:
{
"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": "(0.0@0.0)",
"extent": "(5.0@5.0)"
}
],
"edgeCount": 0,
"edges": [],
"nodeCount": 0
}
]
}Server Configuration Tools
The get_settings and apply_settings tools provide dynamic server configuration management.
get_settings
Retrieve the current server configuration.
Parameters: None
Returns: Dictionary containing current server settings
Usage Example:
# Get current settings
get_settings()
# Returns: {"stackSize": 100, "customKey": "customValue"}Response Format:
{
"success": true,
"result": {
"stackSize": 100,
"customKey": "customValue"
}
}apply_settings
Modify server configuration dynamically. Settings take effect immediately during the current session.
Parameters:
settings(dict): Dictionary containing settings to modify
Returns: Success confirmation message
Usage Example:
# Apply new settings
apply_settings(settings={"stackSize": 200, "customKey": "customValue"})
# Returns: "Settings applied successfully"Common Settings:
Setting | Type | Default | Description |
| integer | 100 | Maximum stack trace depth for error reporting |
Note: The server accepts arbitrary key-value pairs beyond documented settings, allowing custom configuration options.
Development
Running Tests
The project includes comprehensive unit tests with mock-based testing to avoid requiring a live Pharo instance:
# 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 -vCode Quality
# Run linting
uv run ruff check
# Run formatting
uv run ruff format
# Run all pre-commit hooks
uv run pre-commit run --all-filesProject Structure
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.mdTesting Strategy
The test suite uses mock-based testing to ensure:
No external dependencies: Tests run without requiring a live Pharo instance
Comprehensive coverage: All 22 endpoints and error scenarios are tested
Fast execution: Tests complete in under 1 second
Reliable results: Tests are deterministic and don't depend on external state
Test coverage includes:
HTTP client functionality (
PharoClientclass)All 22 Pharo interop operations
Error handling (connection errors, HTTP errors, JSON parsing errors)
MCP server initialization and tool registration
Integration between core functions and MCP tools
Available Tools
22 toolsapply_settingsB
Modify server configuration dynamically.
Args: settings: Dictionary containing server settings to modify
Returns: dict: API response with success/error and result - Success: {"success": True, "result": str} - result contains confirmation message - Error: {"success": False, "error": str} - error contains error message
| Name | Required | Description | Default |
|---|---|---|---|
| settings | Yes | Settings dictionary to apply to the server |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It details the return format (success/error dict), which is useful, but does not disclose potential side effects, permissions, or state changes beyond the mutation implied by 'Modify'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and to the point. The docstring with Args and Returns provides structured detail without unnecessary words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple one-parameter input and presence of an output schema, the description adequately explains the operation and return values. However, it lacks guidance on valid settings keys or constraints, which could be important for correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter 'settings'. The description adds 'Dictionary containing server settings to modify', which closely mirrors the schema's 'Settings dictionary to apply to the server'. Little additional meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Modify server configuration dynamically' with a specific verb and resource. It distinguishes from read-only sibling 'get_settings' implicitly, but no explicit differentiation is provided.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'get_settings' or other sibling tools. No exclusions or prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evalB
Evaluate a Pharo Smalltalk expression with PharoSmalltalkInteropServer.
Args: code: The Smalltalk code to evaluate
Returns: dict: API response with success/error and result - Success: {"success": True, "result": any} - result contains the evaluation result - Error: {"success": False, "error": str} - error contains error message
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The Smalltalk code to evaluate |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It only describes the return format (success/error dict) but does not warn about potential side effects, risks of arbitrary code execution, or required permissions. This is a significant gap for an evaluation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with 'Args' and 'Returns' sections, but includes redundant formatting (e.g., 'Returns:' block) that could be more concise. It is not overly long but could be streamlined.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that this is an arbitrary code execution tool with no annotations, the description lacks crucial information about side effects, safety considerations, error behavior, and prerequisites. It mentions the return format but omits important context for safe usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single 'code' parameter described. The description repeats the same text as the schema's description, adding no additional meaning beyond what is already in the input schema. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Evaluate a Pharo Smalltalk expression' with a specific verb and resource. It distinguishes from sibling tools that perform different operations like export, import, reading, or searching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose is implied by the tool name and description, but there is no explicit guidance on when to use this tool versus alternatives or any exclusions. Sibling tools cover different domains, but no when-not advice is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_packageB
Export a package in Tonel format.
Args: package_name: The name of the package to export path: The path where to export the package (default: /tmp)
Returns: dict: API response with success/error and result - Success: {"success": True, "result": str} - result contains export success message with path - Error: {"success": False, "error": str} - error contains error message
| Name | Required | Description | Default |
|---|---|---|---|
| package_name | Yes | The name of the package to export | |
| path | No | The path where to export the package | /tmp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains the return format but omits behavioral traits such as side effects (file creation), permissions needed, or error conditions beyond a generic error dict.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description follows a clear docstring structure with Args and Returns sections, front-loading the purpose. It is concise but could be more succinct.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers return values adequately with the output schema-like dict. However, lacks usage context and behavioral details, making it incomplete for a tool with no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%. The description adds the default path value but otherwise restates parameter names. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Export a package') and the format ('Tonel format'), distinguishing it from sibling 'import_package'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. No context about prerequisites or conditions for exporting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_class_commentA
Get the comment of a Smalltalk class.
Args: class_name: The name of the class to retrieve comment for
Returns: dict: API response with success/error and result - Success: {"success": True, "result": str} - result contains the class comment - Error: {"success": False, "error": str} - error contains error message
| Name | Required | Description | Default |
|---|---|---|---|
| class_name | Yes | The name of the class to retrieve comment for |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses the return format (dict with success/error keys and result string or error message). However, it does not explicitly state that this is a read-only operation with no side effects, though that is inferred from the name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise and well-structured with Args and Returns sections. Every sentence adds value and is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (single parameter, no nested objects, output schema implied by return format description), the description is fully complete. It covers purpose, parameter, and return format without gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description repeats the schema description verbatim ('The name of the class to retrieve comment for'). No additional meaning or constraints are added beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Get the comment of a Smalltalk class' with a specific verb and resource. It clearly distinguishes from siblings like get_class_source (source code) and get_method_source (method source).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when needing a class comment, but no explicit when-to-use or when-not-to-use guidance is provided, nor are alternatives mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_class_sourceA
Get the source code of a Smalltalk class.
Args: class_name: The name of the class to retrieve source for
Returns: dict: API response with success/error and result - Success: {"success": True, "result": str} - result contains the class source code - Error: {"success": False, "error": str} - error contains error message
| Name | Required | Description | Default |
|---|---|---|---|
| class_name | Yes | The name of the class to retrieve source for |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It discloses the return format (dict with success/error keys and string result), providing reasonable transparency for a read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, with the main purpose stated upfront followed by clear parameter and return value sections. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single parameter and the inclusion of a detailed return schema (dict with success/error structure), the description is complete. It fully informs the agent about input and output expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description essentially restates the schema parameter description ('The name of the class to retrieve source for'), adding no new meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get the source code of a Smalltalk class', specifying the verb and resource. It distinguishes from sibling tools like get_class_comment and get_method_source by focusing on source code retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving class source code but lacks explicit guidance on when to use this tool versus alternatives. No when-not or situational context is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_method_sourceB
Get the source code of a specific method in a class.
Args: class_name: The name of the class containing the method method_name: The name of the method to retrieve source for is_class_method: True for class-side methods, False for instance methods (default: False)
Returns: dict: API response with success/error and result - Success: {"success": True, "result": str} - result contains the method source code - Error: {"success": False, "error": str} - error contains error message
| Name | Required | Description | Default |
|---|---|---|---|
| class_name | Yes | The name of the class containing the method | |
| method_name | Yes | The name of the method to retrieve source for | |
| is_class_method | No | Set to True for class-side methods, False for instance methods (default: False) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description fails to disclose behavioral traits such as idempotency, authorization needs, or side effects. It only describes the return format, not operational behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Clear structure with Args/Returns sections and front-loaded purpose. However, it redundantly restates schema descriptions, which could be trimmed for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple retrieval tool with 3 parameters and an output schema described in text, the description fully covers what the tool does, its parameters, and return format, leaving no ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description repeats parameter descriptions verbatim, adding no new meaning beyond what the schema already provides (e.g., defaults and types are already in schema).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get the source code of a specific method in a class' uses a specific verb and resource, clearly distinguishing it from siblings like get_class_source (whole class) or list_methods (listing names).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like get_class_source or list_methods. The description only lists parameters without contextual usage advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_settingsA
Retrieve current server configuration.
Returns: dict: API response with success/error and result - Success: {"success": True, "result": dict} - result contains current server settings - Error: {"success": False, "error": str} - error contains error message
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the return format (success/error dictionary) and implies a read-only operation via 'retrieve'. With no annotations provided, this is adequate behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: one sentence defining the action followed by the return format. No wasted words, and the main point is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and an output schema that likely details the return structure, the description is complete. It explains what the tool does and what it returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so the description adds value by explaining the tool's purpose and return format. Baseline for 0 parameters is 4, and the description meets that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Retrieve current server configuration.' with a specific verb and resource, distinguishing it from sibling tools like 'apply_settings' which modify settings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use or not use this tool. While its purpose is clear, it lacks context about alternatives or exclusions, such as recommending use before modifying settings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_packageA
Import a package from specified path.
Args: package_name: The name of the package to import path: The path to the package file to import (default: /tmp)
Returns: dict: API response with success/error and result - Success: {"success": True, "result": str} - result contains import success message - Error: {"success": False, "error": str} - error contains error message
| Name | Required | Description | Default |
|---|---|---|---|
| package_name | Yes | The name of the package to import | |
| path | No | The path to the package file to import | /tmp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description provides basic behavioral info (imports package, returns success/error dict) but does not disclose side effects, permissions, or limitations (e.g., overwrite behavior).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with Args/Returns sections and is relatively concise, though it repeats schema information slightly, which could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core functionality and return format, but for a state-modifying tool, it lacks details on edge cases (e.g., path requirements, existing package conflicts).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description restates parameter names and descriptions, adding minimal new semantic value beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'import' and the resource 'a package from specified path', distinguishing it from siblings like 'export_package' and 'list_packages'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (when importing a package) but does not explicitly state when to use it over alternatives or any prerequisites. Lacks direct guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
install_projectA
Install a project using Metacello.
Args: project_name: The name of the project to install repository_url: The repository URL for the project load_groups: Comma-separated list of groups to load (optional)
Returns: dict: API response with success/error and result - Success: {"success": True, "result": str} - result contains installation success message - Error: {"success": False, "error": str} - error contains error message
| Name | Required | Description | Default |
|---|---|---|---|
| project_name | Yes | The name of the project to install | |
| repository_url | Yes | The repository URL for the project | |
| load_groups | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the return format and that the tool installs a project, but it does not mention potential side effects or requirements (e.g., network access, dependencies). Basic transparency is present but could be richer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with 'Args' and 'Returns' sections. The first sentence clearly states the purpose. It is concise but could be slightly more compact without the docstring format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (3 parameters, output schema present), the description is complete enough. It covers parameters and return values, though it could mention prerequisites like Metacello availability.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%, and the description repeats the parameter semantics from the schema. It adds the return structure, which is helpful, but does not significantly enhance understanding of parameters beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Install a project using Metacello.' with a specific verb and resource. No sibling tool has a similar purpose, so it is well distinguished.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear context for using the tool but does not explicitly state when not to use it or mention alternatives. However, the task is straightforward and the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_classesA
Get list of classes in a package.
Args: package_name: The name of the package
Returns: dict: API response with success/error and result - Success: {"success": True, "result": list[str]} - result contains list of class names in package - Error: {"success": False, "error": str} - error contains error message
| Name | Required | Description | Default |
|---|---|---|---|
| package_name | Yes | The name of the package |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses that the tool returns a dictionary with success/error and a list of class names. However, it does not mention any behavioral traits like authentication requirements, rate limits, or side effects, which is acceptable for a simple read-only tool but not fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise, uses a clear docstring format with Args and Returns sections, and front-loads the main purpose. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity, high schema coverage, and presence of an output schema, the description is complete: it covers purpose, the single parameter, and return format in sufficient detail for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage for the single parameter 'package_name'. The description repeats this parameter with no added meaning beyond the schema, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Get list of classes in a package' with a specific verb and resource. It distinguishes from sibling tools like 'list_extended_classes' by focusing on basic class listing within a package and requiring a package name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives such as 'list_extended_classes', 'list_methods', or 'search_classes_like'. The description simply states the function without usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_extended_classesA
Get list of extended classes in a package.
Args: package_name: The name of the package
Returns: dict: API response with success/error and result - Success: {"success": True, "result": list[str]} - result contains list of extended class names - Error: {"success": False, "error": str} - error contains error message
| Name | Required | Description | Default |
|---|---|---|---|
| package_name | Yes | The name of the package |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries burden. It details return format (success/error dict) but does not mention side effects, permissions, or specific failure modes. Basic behavioral info is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured with Args and Returns sections, no fluff. However, it redundantly describes package_name which is already in the schema. Still efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one parameter and an output schema described in text, the description covers essential aspects. It could be more complete with usage examples or comparisons to siblings, but it is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description repeats the parameter info from schema without adding additional meaning or context beyond what is already in the input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it 'Get list of extended classes in a package', specifying the action, resource, and scope, distinguishing from sibling like 'list_classes'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives (e.g., list_classes, search_classes_like). Only the parameter is described, but no usage context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_methodsA
Get list of methods in a package.
Args: package_name: The name of the package
Returns: dict: API response with success/error and result - Success: {"success": True, "result": list[str]} - result contains list of method signatures Each method: "ClassName>>#methodName" - Error: {"success": False, "error": str} - error contains error message
| Name | Required | Description | Default |
|---|---|---|---|
| package_name | Yes | The name of the package |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the return format (dict with success/error) and result structure (list of method signatures), including error behavior. However, it does not mention if the operation is read-only or any permissions needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with Args and Returns sections, but it is somewhat verbose (e.g., the full success/error structure). It front-loads the purpose and is efficient overall, though could be slightly more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For this simple one-parameter, list-returning tool, the description covers input, output format, error handling, and return value structure. No missing information given the complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (one parameter with description). The description repeats the parameter name and purpose in an Args section but adds no additional meaning, format constraints, or examples beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it 'Get[s] list of methods in a package', using a specific verb and resource. It distinguishes from sibling tools like list_classes (classes) and list_packages (packages) by focusing on methods.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool over alternatives or when not to use it. Usage is implied by the name and purpose, but no exclusions or alternative tool names are mentioned, leaving an agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_packagesA
Get list of all packages.
Returns: dict: API response with success/error and result - Success: {"success": True, "result": list[str]} - result contains list of all package names - Error: {"success": False, "error": str} - error contains error message
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the return format with success/error structure, covering read-only behavior. Without annotations, it provides good transparency by explicitly stating the output shape. However, it does not discuss potential side effects (none expected) or authentication requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with no extraneous text. It uses a clear docstring format with a Returns section, making it easy to parse. Every sentence provides value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity (no parameters, output schema exists), the description fully covers the essential information: what the tool does and its return format. No additional details are needed for complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, and the input schema is fully covered (100%). The description adds no parameter-specific information but explains the return structure, which is beyond the schema. Baseline is 3 for high schema_coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get list' and the resource 'all packages', making the purpose unambiguous. It differentiates from sibling tools by focusing exclusively on package listing, which is distinct from other tools like 'export_package' or 'list_classes'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as 'export_package' or 'import_package'. The description lacks any context about prerequisites, limitations, or scenarios where this tool is preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_screenA
Comprehensive UI screen reader for debugging Pharo interfaces.
Captures screenshot and extracts complete UI structure for World morphs, Spec presenters, and Roassal visualizations.
Args: target_type: 'world' for morphs, 'spec' for Spec windows, 'roassal' for visualizations capture_screenshot: Include PNG screenshot in response (default: true)
Returns: dict: UI structure and metrics - screenshot: Path to PNG file in /tmp/ (if capture_screenshot=true) - target_type: Which UI type was inspected - structure: Complete UI hierarchy data - summary: Human-readable description
| Name | Required | Description | Default |
|---|---|---|---|
| target_type | No | UI type to inspect: 'world' (morphs), 'spec' (windows), or 'roassal' (visualizations) | world |
| capture_screenshot | No | Include PNG screenshot in response |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must cover behavior. It states that a screenshot and UI structure are captured, and optionally saves a PNG. However, it does not disclose potential side effects (e.g., whether it modifies the UI) or prerequisites (e.g., requires a running Pharo instance). This is adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a purpose statement, parameter breakdown, and return fields. It is concise but could be slightly more streamlined. No unnecessary repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, output schema present), the description covers inputs and outputs adequately. It lacks error handling or edge cases, but is sufficient for a debugging tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by mapping target_type values to specific UI elements (morphs, windows, visualizations) and clarifying the screenshot return behavior, exceeding the schema details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a 'comprehensive UI screen reader' for debugging Pharo interfaces, with specific target types (World morphs, Spec presenters, Roassal visualizations). This distinguishes it from sibling tools like eval or list_classes, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for UI debugging and lists three target types, giving clear context. However, it does not explicitly state when not to use this tool or provide alternatives, though no direct sibling overlaps exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_class_testB
Run tests for a class.
Args: class_name: The class name to run tests for
Returns: dict: API response with success/error and result - Success: {"success": True, "result": str} - result contains test results summary - Error: {"success": False, "error": str} - error contains error message
| Name | Required | Description | Default |
|---|---|---|---|
| class_name | Yes | The class name to run tests for |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description accurately describes the return format (success/error dict). However, it does not disclose potential side effects (e.g., test execution side effects), permission requirements, or other behavioral traits beyond the interface.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with Args/Returns sections, but it is slightly verbose for a simple one-parameter tool. Still efficiently communicates purpose and output.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single parameter and the presence of an output schema in the description, the tool definition is fairly complete. It explains input and output clearly, though lacks error handling details and contextual cues for complex usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter, and the description repeats the same information from the schema ('The class name to run tests for'), adding no extra semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Run tests' and the resource 'for a class'. It is specific and distinguishable from the sibling 'run_package_test' by the class scope, though not explicitly differentiating them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like 'run_package_test'. No when-not conditions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_package_testB
Run tests for a package.
Args: package_name: The package name to run tests for
Returns: dict: API response with success/error and result - Success: {"success": True, "result": str} - result contains test results summary - Error: {"success": False, "error": str} - error contains error message
| Name | Required | Description | Default |
|---|---|---|---|
| package_name | Yes | The package name to run tests for |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description only mentions success/error return format, omitting side effects, permissions, or safety implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Brief structured doc with Args and Returns sections, no wasted content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers input/output but lacks behavioral context (e.g., side effects on environment). Adequate for a simple tool with annotations missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%. Description repeats parameter info without adding extra meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Run tests for a package.' Differentiates from sibling 'run_class_test' by specifying package-level testing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like run_class_test. No prerequisites or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_classes_likeA
Find classes matching a pattern.
Args: class_name_query: The pattern to search for in class names
Returns: dict: API response with success/error and result - Success: {"success": True, "result": list[str]} - result contains list of matching class names - Error: {"success": False, "error": str} - error contains error message
| Name | Required | Description | Default |
|---|---|---|---|
| class_name_query | Yes | The pattern to search for in class names |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description discloses the return format (success/error with list of strings) but does not mention safety (e.g., read-only nature), side effects, or prerequisites, which would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a clear purpose and organized arg/return section, though the return documentation could be slightly more compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and output schema, the description adequately explains purpose, parameter, and return format. Annotations are missing but the description covers essential context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter, and the description repeats the schema's description without adding new meaning, so baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Find classes matching a pattern' clearly states the verb (Find), resource (classes), and pattern-matching aspect, distinguishing it from siblings like list_classes and search_methods_like.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for pattern-based class search but does not explicitly state when to use this tool vs alternatives like list_classes or search_methods_like, nor when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_implementorsA
Get all implementors of a method selector.
Args: method_name: The method name to find implementors for
Returns: dict: API response with success/error and result - Success: {"success": True, "result": list[dict]} - result contains list of implementors Each implementor: {"class": str, "method": str, "package": str} - Error: {"success": False, "error": str} - error contains error message
| Name | Required | Description | Default |
|---|---|---|---|
| method_name | Yes | The method name to find implementors for |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for behavioral disclosure. It explains the return format (success/error with result structure) and implies it's a read operation, but does not explicitly state side effects, authentication, or other behavioral traits beyond the basic query.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear first sentence defining purpose, followed by a detailed Args/Returns section. While verbose due to the return structure details, it remains readable and front-loaded, earning its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, single-parameter tool with no output schema, the description provides a complete explanation of both input and expected output, including error handling. It lacks examples or definition of 'method selector', but overall adequately covers the tool's behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for the single parameter, with a description matching the one in the tool description. The description adds no additional meaning or format details beyond the schema, so it meets but does not exceed the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get all implementors') and the resource ('of a method selector'), making the tool's purpose immediately understandable. It is distinct from sibling tools like search_references which search for references, not implementations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives like search_references or search_methods_like. While the purpose is clear, no when-not or preferred contexts are mentioned, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_methods_likeA
Find methods matching a pattern.
Args: method_name_query: The pattern to search for in method names
Returns: dict: API response with success/error and result - Success: {"success": True, "result": list[str]} - result contains list of matching method names - Error: {"success": False, "error": str} - error contains error message
| Name | Required | Description | Default |
|---|---|---|---|
| method_name_query | Yes | The pattern to search for in method names |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It describes the return format (dict with success/error/result) and indicates a read-only operation. However, it could disclose the pattern matching syntax (e.g., SQL LIKE or regex) for better transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose. The Args/Returns structure is clear but slightly verbose for a single parameter; it could be more streamlined.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple search tool with one parameter and a detailed return format in the description, completeness is adequate. However, adding pattern syntax details would improve it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description repeats the parameter info with no added meaning. Baseline is 3. No examples or additional context for the parameter beyond the schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Find methods matching a pattern' clearly states the tool's action (find), resource (methods), and operation (matching a pattern). This distinguishes it from sibling tools like search_classes_like or search_traits_like.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives. Usage is implied by the purpose, but no exclusions or context are given for when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_referencesA
Get all references to a method selector or a symbol.
Args: method_name_or_symbol: The method name to find references for
Returns: dict: API response with success/error and result - Success: {"success": True, "result": list[dict]} - result contains list of references Each reference: {"class": str, "method": str, "package": str} - Error: {"success": False, "error": str} - error contains error message
| Name | Required | Description | Default |
|---|---|---|---|
| method_name_or_symbol | Yes | The method name or symbol to find references for |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description discloses the return format in detail (success/error structure with result list containing class, method, package). It does not mention side effects, but as a read-only operation this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a one-line summary followed by structured Args and Returns sections. Every sentence is necessary and well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the input, output, and purpose completely for a simple search tool. However, it lacks differentiation context from sibling tools, which could be included to enhance completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The parameter description in the schema ('The method name or symbol to find references for') is identical to the Args in the description. Since schema coverage is 100%, the description adds no additional semantic value beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get all references to a method selector or a symbol', which is a specific verb and resource. It distinguishes from siblings like search_references_to_class which targets class references.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives like search_references_to_class or search_implementors. It only describes the function, leaving the agent to infer usage from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_references_to_classA
Find references to a class.
Args: class_name: The name of the class to find references for
Returns: dict: API response with success/error and result - Success: {"success": True, "result": list[dict]} - result contains list of class references Each reference: {"package": str, "class": str, "method": str} - Error: {"success": False, "error": str} - error contains error message
| Name | Required | Description | Default |
|---|---|---|---|
| class_name | Yes | The name of the class to find references for |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description explicitly details return format (success/error with nested structure). Implies a read-only operation; no contradictory hints. Missing potential rate limits or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Structured Args/Returns format is clear but somewhat verbose; could be more concise. Each sentence contributes, but the return explanation is lengthy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given single parameter, full schema coverage, and presence of output schema (though not shown), description sufficiently covers purpose and output. Lacks only minor behavioral details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so description adds no new meaning beyond what schema already provides for the class_name parameter. Baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Find references to a class' with specific parameter and return details. Distinguishes from sibling tools like search_references (general) and search_implementors (finds implementors).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. Does not mention that broader search_references may be more appropriate for non-class references, or any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_traits_likeA
Find traits matching a pattern.
Args: trait_name_query: The pattern to search for in trait names
Returns: dict: API response with success/error and result - Success: {"success": True, "result": list[str]} - result contains list of matching trait names - Error: {"success": False, "error": str} - error contains error message
| Name | Required | Description | Default |
|---|---|---|---|
| trait_name_query | Yes | The pattern to search for in trait names |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool returns a dict with success/error and a list of matching traits, but does not mention side effects, authorization needs, or that it is read-only. The return format is described beyond the schema, which adds some value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a single sentence plus structured Args/Returns. No extraneous information, though it could be more tightly formatted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description adequately covers the tool's operation, parameter, and return structure. However, it does not specify the pattern syntax (e.g., SQL LIKE vs regex), which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description's Args section simply restates the schema description without adding new meaning. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Find traits matching a pattern', which is a specific verb+resource combination. It distinguishes from sibling tools like search_classes_like and search_methods_like by specifying 'traits'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like search_classes_like or search_references. No when-not or explicit context is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
22 tool updates
v3.0.0- First observed
apply_settings - First observed
eval - First observed
export_package - First observed
get_class_comment - First observed
get_class_source - First observed
get_method_source - First observed
get_settings - First observed
import_package - First observed
install_project - First observed
list_classes - First observed
list_extended_classes - First observed
list_methods - First observed
list_packages - First observed
read_screen - First observed
run_class_test - First observed
run_package_test - First observed
search_classes_like - First observed
search_implementors - First observed
search_methods_like - First observed
search_references - First observed
search_references_to_class - First observed
search_traits_like
TDQS
Scored across 22 tools
Each tool targets a distinct operation: settings management, code evaluation, package operations, code browsing, searching, testing, and UI reading. No two tools have overlapping purposes.
All tools follow a consistent verb_noun pattern (e.g., get_class_source, list_packages, search_methods_like) with clear and predictable naming.
22 tools is on the higher side but still reasonable for a comprehensive Smalltalk interop server covering many aspects; each tool serves a distinct purpose.
Covers many areas (evaluation, browsing, searching, testing, package management, UI reading) but lacks write operations for code (no create/update/delete for classes or methods), which is a notable gap for a development tool.
Maintenance
Related MCP Connectors
MCP server for Speech-to-Text
MCP Server for Slima - AI Writing IDE for Novel Authors with AI Beta Reader.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server to list and launch applications on MacOS7 npm19MIT
- AlicenseBqualityFmaintenanceMCP Server for running code snippet and show the result.1520 npm246MIT
- AlicenseNot gradedqualityDmaintenanceMCP Server around https://expr-lang.org1MIT
- AlicenseBqualityDmaintenanceA local MCP server that enables users to evaluate Pharo Smalltalk expressions and retrieve system information via NeoConsole. It provides comprehensive tools for inspecting class definitions, method sources, and system metrics within a Pharo environment.112MIT