Most failures fall into one of three groups: the image is not reachable, the requested tool input is invalid, or the live image state differs from what the caller expected.
For standalone image crashes or stopped servers, the copyable template skill
templates/skills/pharo-mcp-recovery gives agents a recovery workflow for
preserving evidence, restarting or replacing the image, reloading projects, and
recovering change history.
Check the server in the image:
mcp isRunning.
mcp isListening.
mcp localUrlString.Confirm that the client URL uses the same host and port:
http://127.0.0.1:4000
If you changed the port in Pharo, update the MCP client configuration.
MCP currently handles MCP calls over HTTP POST. Unsupported HTTP methods return method-not-allowed instead of hanging.
Run:
mcp refreshToolsList.Then call tools/list again. If you loaded new MCP code into the image, restart
the server:
mcp restart.Each tool validates arguments against its input schema. Call tools/list and
inspect the tool's inputSchema.
Common causes:
- missing required fields for the selected tool
- extra fields rejected by
additionalProperties: false - passing arguments from a different tool
method_rewritewithapply=truebut noexpectedChangeSetHashhistory_entry_applyorhistory_entry_revertwithoutconfirm=true
This is expected for Pharo refactoring warnings. With force=false, the edit
tool stops and returns impact details.
Read:
impactMessages
howToProceed
forceSupported
Rerun with force=true only when the impact is acceptable.
method_compile can return Renraku critiques after compilation. The method exists,
but Pharo found review issues. Inspect the critique rule class, title,
description, and source interval if present.
Use a follow-up method_compile, method_selector_update, test_run, or
method_get call depending on the critique.
MCP reads repository state from Iceberg in the running image. The exported Tonel files, the image's loaded packages, and Iceberg's working-copy state can differ.
Start with:
repository_search
repository_identity_verify
repository_change_list
Use repository_export only when you mean to write image changes to files.
Export updates the Iceberg index but does not stage or commit Git changes.
test_run tells you whether selected tests passed. Use test_coverage_run with
an explicit coverage scope when you need to know whether the edited methods
executed.
Coverage scopes should be narrow: package, class, hierarchy, or method names.
Image-changing tools save the image after successful mutation. If you are using an automation or agent, run it against a copied or disposable image.
Use history_file_list and history_entry_list to inspect
Epicea history. Apply or revert operations stay in history_entry_apply and
history_entry_revert, where they can be previewed first and performed with
confirm=true.
Debugger stateId, frameRef, and variableRef values are scoped to one
debug_state_get snapshot. After a control action, debugger edit, or resume, discard
old references and use the newly returned state.
If a human opened the debugger, attach through the debugging tools and let the
debugger controller own UI actions. Do not drive debugger windows with raw
image_evaluate code.
Exported source files can confirm package layout, class definitions, and docs. They cannot prove that the running image has loaded the latest code or that an MCP tool works over HTTP.
Use Source vs live image to decide which checks are valid for the current work boundary.