evaluate_smalltalk_with_neo_consoleLABSCO SUMMARY
Reflection is where the value is, not evaluation.
Evaluating an expression is the obvious use and the shallow one. What makes this useful on a real Smalltalk codebase is that classes, selectors and method source come out of the live image — which in Pharo is the actual system, not a serialised copy of it — so an assistant answering a question about existing code is reading what is loaded rather than guessing from a repository checkout. The flip side is the setup: the image and NeoConsole have to be there first, and the server assumes it can find them.
What it is
A local MCP server that talks to a running Pharo Smalltalk image through NeoConsole. Two things follow from that: expressions are evaluated in the real image rather than a parser, and the image's own reflection — classes, selectors, method source, live metrics — is readable the same way.
What you get
- Expression evaluation through NeoConsole, taking the expression and the command to run it under —
evaluate_smalltalk_with_neo_console - A lighter evaluation path that goes through Pharo's own simple option, for when the console round trip is more than the question needs —
evaluate_simple_smalltalk - Live system metrics from the image by name, such as
system.statusfor overall state ormemory.free—get_pharo_metric - Class-level reflection: the class comment and the class definition, read from the image rather than from a file on disk —
get_class_comment,get_class_definition - Method-level reflection: every selector on a class, and the source of one method by class and selector —
get_method_list,get_method_source
Requirements
A Pharo installation with NeoConsole installed, and NeoConsole.image present in the Pharo directory. PHARO_DIR points at that directory and defaults to ~/pharo. Python 3.10 or later and the uv package manager. The project is pharo-nc-mcp-server (version 0.1.0): clone, uv sync --dev, then launch with uv run pharo-nc-mcp-server — the client config uses uv with --directory set to your checkout.
Setup effort
Build from source — git clone https://github.com/mumez/pharo-nc-mcp-server
USE CASES
Understanding an unfamiliar class
Read the class comment and definition out of the image, then list its selectors to see what it actually responds to.
Reading one method without opening a browser
Fetch the source for a class and selector pair directly, so a question about behaviour is answered from the code rather than described.
Trying an expression and seeing the real result
Evaluate it against the running image and get the value back, instead of reasoning about what Smalltalk would probably return.
Checking the health of the image you are working in
Read system status and free memory by metric name while a long-running experiment is in progress.
7 tools
Listed in project docs. Your client may show a different list.
evaluate_simple_smalltalkget_pharo_metricget_class_commentget_class_definitionget_method_listget_method_sourceBEFORE YOU INSTALL
What to know first
Tools you get
7 tools named in the project's documentation.
Requires
Python 3.10 or later
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
You clone this one yourself.
Server setup
Install Pharo and NeoConsole; set PHARO_DIR to your Pharo installation directory (default: ~/pharo) and ensure NeoConsole.image is available there
git clone https://github.com/mumez/pharo-nc-mcp-server
cd pharo-nc-mcp-server
uv sync --dev
uv run pharo-nc-mcp-serverAdd the mcpServers block below to your MCP client's configuration (the README shows it as Cursor's MCP settings), where <YOUR_PATH_TO_PHARO_NC_MCP_SERVER> is the absolute path to your clone
MCP Clients
Any MCP client
{
"mcpServers": {
"pharo-nc-mcp-server": {
"command": "uv",
"args": [
"--directory",
"<YOUR_PATH_TO_PHARO_NC_MCP_SERVER>",
"run",
"pharo-nc-mcp-server"
]
}
}
}