All notable changes to this project are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.3.0 — 2026-06-29
Changed
:atp_clientdependency bumped from Hex~> 0.3to~> 0.4. AtpMcp's public surface is unchanged; the upgrade pulls in upstream correctness fixes that flow through transparently:- Isabelle multi-lemma jobs no longer mis-bucket Sledgehammer / Nitpick
output across message boundaries (e.g.
Nitpick found a modelnext toNitpick found no counterexampleno longer collapses to:csat;by <tactic>failing on aFalsegoal is no longer reported as:thm). Per-lemma verdicts are now classified message-by-message against body-line ranges supplied by the newAtpClient.Isabelle.lemma_specs/1. pos.filefiltering drops phantom lemma rows from the bundledTPTP.thyand other transitively imported theories.- Sledgehammer / Nitpick verdicts carry the lemma name from the source
body instead of surfacing as
name: nil.
- Isabelle multi-lemma jobs no longer mis-bucket Sledgehammer / Nitpick
output across message boundaries (e.g.
0.2.0 — 2026-06-26
Added
- Multi-backend support via the unified
AtpClient.Backendcontract. Three cross-backend tools that work against any registered backend:list_backends— enumerate registered backends with their labels.verify_backend— probe a backend's configuration and reachability.query_backend— submit a TPTP problem to any backend (sotptp,isabelle,local_exec,starexec) and get a normalized SZS result.
prove_isabelletool for hand-written Isabelle/HOL theories, wrappingAtpClient.Isabelle.query/3.lint_problemtool exposingAtpClient.Lint.analyze/2. Defaults to both the in-process structural checker and TPTP4X; selectable viabackends: ["local"]/["tptp4x"].AtpMcp.Runtime— GenServer driving the MCP protocol loop. Owns stdout, runs eachtools/callin its own monitored Task, and serves as the single point where new asynchronous behaviour is added.- Cancellation support via
notifications/cancelled. The runtime kills the in-flight Task; each backend tears down its upstream work in response:- LocalExec —
Portclosure SIGKILLs the prover binary. - StarExec — cancel-guard issues
DELETEagainst the remote job. - Isabelle — session is dropped, aborting any in-flight
use_theories. - SystemOnTPTP — local connection closes; remote prover continues to
its
:time_limit_sec(SOTPTP has no remote-cancel endpoint).
- LocalExec —
- Progress notifications when
_meta.progressTokenis set. Heartbeat every:heartbeat_ms(default 5000ms) while a call is in flight; configurable viaconfig :atp_mcp, heartbeat_ms: ….
Changed
- MCP protocol revision bumped from
2024-11-05to2025-11-25. :atp_clientdependency bumped from Hex~> 0.2to~> 0.3for the unified backend contract and cancellation API.- Minimum Elixir version raised to
~> 1.20. - Test mock surface split per backend:
AtpMcp.Backends.{SystemOnTptp, Isabelle, LocalExec, StarExec, Lint}replace the singleAtpMcp.AtpBehaviour. - Internal restructure:
dispatch/1replaced by pureclassify/1+execute_tool/2. The synchronoushandle_rpc/1path is retained for tests; the asynchronousAtpMcp.Runtime.deliver/1path drives the escript at runtime.
Documentation
- Forward note in module and README about the experimental MCP Tasks primitive and how it maps onto long-running ATP invocations.
- Per-backend cancellation semantics documented honestly (including SystemOnTPTP's lack of remote cancellation).
0.1.1 — 2026-05-19
Added
- Initial MCP stdio server wrapping
AtpClient.SystemOnTptponly. - Three tools:
list_provers,run_prover,compare_provers. - JSON-RPC 2.0 framing with
initialize,ping,tools/list,tools/call, and silent acknowledgement ofnotifications/initialized. - Declared MCP protocol revision
2024-11-05.