Skip to main content

Isabelle-MCP

PyPI Python CI License: LGPL-2.1-or-later

MCP server that lets AI agents (Claude Code, Codex, …) drive the Isabelle theorem prover through its LSP/PIDE commands — fully autonomously, with no human in the loop.

Purpose

This MCP server exists so that Claude / Codex can issue Isabelle LSP commands without any human mediation. The entire Isabelle process is encapsulated behind the MCP tools — it exposes no UI to the user. The agent works by editing .thy/.ML files on disk and calling the tools to evaluate them and query proof states; nobody watches or steers the prover interactively.

This server is not designed for human–AI collaboration (there is no jEdit/VSCode front-end in the picture). It implements a single AI ↔ Isabelle, no-human-in-the-loop model.

⚠️ One agent per server instance. This server holds a single Isabelle session with global mutable state — one set of open documents, one perspective, and one evaluation in flight at a time. It is single-threaded and not concurrency-safe: pointing multiple agents at one instance, or interleaving concurrent requests, corrupts the evaluation and document state with catastrophic, hard-to-debug results. The server runs over stdio, so each agent already gets its own dedicated server process (and its own isabelle mcp_server) — just don't share one or drive it concurrently.

Quick Start

pip install isabelle-mcp      # or: uv tool install isabelle-mcp

# register into Claude Code / Codex (auto-detects whichever is installed):
isabelle-mcp install

For Claude Desktop, register manually instead (~/.config/claude/claude_desktop_config.json):

{
  "mcpServers": {
    "isabelle": {
      "command": "isabelle-mcp"
    }
  }
}

Tools

Tool Description
isabelle_launch Start (or restart) the prover with the session/logic that fits the work (bare Main is only a minimal fallback); call this first
isabelle_terminate Terminate the running prover (the MCP server stays up; you can relaunch)
isabelle_evaluate_to Evaluate the theory up to a line; returns a per-file snapshot of errors / sorry / running command lines
isabelle_evaluation_status Poll progress of a running evaluation (same snapshot)
isabelle_cancel_evaluation Cancel a running evaluation
isabelle_hover Type info and documentation at position
isabelle_definition Jump to symbol definition
isabelle_local_occurrences In-file occurrences (definition + uses) of a local entity
isabelle_goal Proof goals — omit after_text for before/after diff
isabelle_find_theorems Search the theorem database in the context at a position (Isabelle's find_theorems): by name, pattern, intro/elim/dest, solves, simp
isabelle_command_output Prover output messages
isabelle_command_status What state the command(s) covering each of several lines are in
isabelle_session_info Current session info

With isabelle_launch(session, debug=true) the ML debugger tools come alive (eleven more tools): set/delete/list breakpoints on compiled Isabelle/ML code (isabelle_set_breakpoint, isabelle_del_breakpoints, isabelle_list_breakpoints, isabelle_list_breakable_sites), arm and disarm them in bulk (isabelle_enable_all_breakpoints, isabelle_disable_all_breakpoints), and work with hits — threads stopped at a breakpoint: inspect (isabelle_debug_state), evaluate ML in a stack frame's scope (isabelle_eval_at_breakpoint), print a frame's locals (isabelle_locals_at_breakpoint), resume (isabelle_continue_breakpoint) and single-step (isabelle_step_at_breakpoint). A hit pauses the evaluation: the isabelle_evaluate_to result leads with a hit report (position, call stack, frame-0 locals), and asynchronous events arrive as one-line debugger notices on the next tool result. The full design lives in docs/archive/DEBUGGER_DESIGN.md.

All positions are 1-indexed. File paths must be absolute.

Every query tool names a file and a line, and the prover answers about the command there without moving its caret — so a query can run while an evaluation is in progress, and it may only be refused for the position it asked about, not because the session is busy. A query that cannot produce a result says why ("this command is not a proof operation", "it has not finished evaluating"); nothing is concluded from a timeout.

Development

pip install -e ".[dev]"             # editable install from a checkout
pytest                              # unit tests
pytest -m integration               # requires running Isabelle
python -m mypy src/                 # type checking

Architecture

server.py         FastMCP entry point — tool registration, lifespan
lsp_client.py     JSON-RPC 2.0 client for isabelle mcp_server
tools/            Tool implementations (one file per tool)
utils/            Position conversion, URI handling, HTML parsing
models.py         Pydantic output models

License

Copyright © 2024-2026 Qiyuan Xu.

This project is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 2.1 of the License, or (at your option) any later version. See LICENSE for the full text.

Metadata

Release files for isabelle-mcp 0.7.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for isabelle-mcp 0.7.0
File Size Uploaded Provenance Actions
isabelle_mcp-0.7.0.tar.gz 1.1 MB With provenance Details for isabelle_mcp-0.7.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for isabelle-mcp 0.7.0
File Interpreter ABI Platform Actions
isabelle_mcp-0.7.0-py3-none-any.whl Python 3 none any Details for isabelle_mcp-0.7.0-py3-none-any.whl

Total release size: 2.0 MB

Release files / isabelle_mcp-0.7.0.tar.gz

Download URL isabelle_mcp-0.7.0.tar.gz
Size 1.1 MB
Tags Source
SHA-256 checksum
How to use checksums
aae55f9392b06acbaa4f5d2d865eafa4a390099db1636a8c5eba482cde1e733d
BLAKE2b-256 checksum
How to use checksums
42b11a3ac4318d19f962847ebaff8bca2f4c79132644703a21f9c5e89f9071fa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.

Transparency log

Release files / isabelle_mcp-0.7.0-py3-none-any.whl

Download URL isabelle_mcp-0.7.0-py3-none-any.whl
Size 972.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e1a7c3273f8fe1a930072c4a5a0220e988b8e87da74ce4366953683176fd3ad4
BLAKE2b-256 checksum
How to use checksums
9719e497168636b12012dcc8cfb12c9a4bc7b0a4df7de1880e2891c4944d5f03
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.

Transparency log

Security for isabelle-mcp 0.7.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for isabelle_mcp-0.7.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page