- Explore MCP Servers
- lean-lsp-mcp
Lean Lsp Mcp
What is Lean Lsp Mcp
lean-lsp-mcp is a Language Server Protocol (LSP) implementation for the Lean theorem prover, enabling interactive and agentic communication between users and the Lean environment through the leanclient.
Use cases
Use cases for lean-lsp-mcp include developing formal proofs in academic research, enhancing software reliability through formal verification, and providing educational tools for learning theorem proving.
How to use
To use lean-lsp-mcp, install the uv package manager, add the necessary JSON configuration to your IDE, and set the environment variable LEAN_PROJECT_PATH to your Lean project directory.
Key features
Key features of lean-lsp-mcp include integration with the Lean theorem prover, support for agentic interaction, and compatibility with IDEs like VSCode Insiders, which allows for advanced features such as agent mode.
Where to use
lean-lsp-mcp can be used in fields such as formal verification, mathematical proofs, and software development where theorem proving is essential.
Clients Supporting MCP
The following are the main client software that supports the Model Context Protocol. Click the link to visit the official website for more information.
Overview
What is Lean Lsp Mcp
lean-lsp-mcp is a Language Server Protocol (LSP) implementation for the Lean theorem prover, enabling interactive and agentic communication between users and the Lean environment through the leanclient.
Use cases
Use cases for lean-lsp-mcp include developing formal proofs in academic research, enhancing software reliability through formal verification, and providing educational tools for learning theorem proving.
How to use
To use lean-lsp-mcp, install the uv package manager, add the necessary JSON configuration to your IDE, and set the environment variable LEAN_PROJECT_PATH to your Lean project directory.
Key features
Key features of lean-lsp-mcp include integration with the Lean theorem prover, support for agentic interaction, and compatibility with IDEs like VSCode Insiders, which allows for advanced features such as agent mode.
Where to use
lean-lsp-mcp can be used in fields such as formal verification, mathematical proofs, and software development where theorem proving is essential.
Clients Supporting MCP
The following are the main client software that supports the Model Context Protocol. Click the link to visit the official website for more information.
Content
lean-lsp-mcp
Lean Theorem Prover MCP
MCP that allows agentic interaction with the Lean theorem prover via the Language Server Protocol using leanclient. This server provides a range of tools for LLM agents to understand, analyze and interact with Lean projects.
Currently beta testing: Please help us by submitting bug reports and feature requests!
Key Features
- Rich Lean Interaction: Access diagnostics, goal states, term information, hover documentation and more.
- Agent-Focused Toolset: Includes tools for theorem search (leansearch.net), code completion, and project builds.
- Easy Setup: Simple configuration for various clients, including VSCode, Cursor and Claude Code.
Setup
Overview
- Install uv, a Python package manager.
- Make sure your Lean project builds quickly by running
lake buildmanually. - Configure your IDE/Setup
1. Install uv
Install uv for your system.
E.g. on Linux/MacOS:
curl -LsSf https://astral.sh/uv/install.sh | sh
2. Run lake build
lean-lsp-mcp will run lake build in the project root to use the language server (for most tools). Some clients (e.g. Cursor) might timeout during this process. Therefore, it is recommended to run lake build manually before starting the MCP. This ensures a faster build time and avoids timeouts.
E.g. on Linux/MacOS:
cd /path/to/lean/project
lake build
Note: Your build does not necessarily need to be successful, some errors or warnings (e.g. declaration uses 'sorry') are OK.
3. a) VSCode Setup
VSCode and VSCode Insiders are supporting MCPs in agent mode. For VSCode you might have to enable Chat > Agent: Enable in the settings.
- One-click config setup:
OR manually add config to settings.json (global):
- Click “Start” above server config, open a Lean file, change to agent mode in the chat and run e.g. “auto proof” to get started:
3. b) Cursor Setup
-
Open MCP Settings (File > Preferences > Cursor Settings > MCP)
-
“+ Add a new global MCP Server” > (“Create File”)
-
Paste the server config into
mcp.jsonfile:
3. c) Claude Code
Run one of these commands in the root directory of your Lean project (where lakefile.toml is located):
# Local-scoped MCP server
claude mcp add lean-lsp uvx lean-lsp-mcp
# OR project-scoped MCP server (creates or updates a .mcp.json file in the current directory)
claude mcp add lean-lsp -s project uvx lean-lsp-mcp
# OR If you run into issues with the project path (e.g. the language server directory cannot be found), you can also set it manually e.g.
claude mcp add lean-lsp uvx lean-lsp-mcp -e LEAN_PROJECT_PATH=$PWD
You can find more details about MCP server configuration for Claude Code here.
Other Setups
Other setups, such as Claude Desktop, OpenAI Agent SDK, Windsurf or Goose should work with similar configs.
Tools
Lean LSP MCP currently provides various tools to interact with the Lean theorem prover:
Core interactions
lean_diagnostic_messages
Get all diagnostic messages for a Lean file. This includes infos, warnings and errors.
Example output
l20c42-l20c46, severity: 1
simp made no progress
l21c11-l21c45, severity: 1
function expected at
h_empty
term has type
T ∩ compl T = ∅
…
lean_goal
Get the proof goal at a specific location (line or line & column) in a Lean file.
Example output (line)
Before:S : Type u_1
inst✝¹ : Fintype S
inst✝ : Nonempty S
P : Finset (Set S)
hPP : ∀ T ∈ P, ∀ U ∈ P, T ∩ U ≠ ∅
hPS : ¬∃ T ∉ P, ∀ U ∈ P, T ∩ U ≠ ∅
compl : Set S → Set S := fun T ↦ univ \ T
hcompl : ∀ T ∈ P, compl T ∉ P
all_subsets : Finset (Set S) := Finset.univ
h_comp_in_P : ∀ T ∉ P, compl T ∈ P
h_partition : ∀ (T : Set S), T ∈ P ∨ compl T ∈ P
⊢ P.card = 2 ^ (Fintype.card S - 1)
After:
no goals
lean_term_goal
Get the term goal at a specific position (line & column) in a Lean file.
lean_hover_info
Retrieve hover information (documentation) for symbols, terms, and expressions in a Lean file (at a specific line & column).
Example output (hover info on a `sorry`)
The `sorry` tactic is a temporary placeholder for an incomplete tactic proof,closing the main goal using `exact sorry`.
This is intended for stubbing-out incomplete parts of a proof while still having a syntactically correct proof skeleton.
Lean will give a warning whenever a proof uses sorry, so you aren’t likely to miss it,
but you can double check if a theorem depends on sorry by looking for sorryAx in the output
of the #print axioms my_thm command, the axiom used by the implementation of sorry.
lean_declaration_file
Get the file contents where a symbol or term is declared.
lean_completions
Code auto-completion: Find available identifiers or import suggestions at a specific position (line & column) in a Lean file.
lean_run_code
Run/compile an independent Lean code snippet/file and return the result or error message.
Example output (code snippet: `#eval 5 * 7 + 3`)
l1c1-l1c6, severity: 338
lean_multi_attempt
Attempt multiple lean code snippets on a line and return goal state and diagnostics for each snippet.
This tool is useful to screen different proof attempts before using the most promising one.
Example output (attempting `rw [Nat.pow_sub (Fintype.card_pos_of_nonempty S)]` and `by_contra h_neq`)
rw [Nat.pow_sub (Fintype.card_pos_of_nonempty S)]:S : Type u_1
inst✝¹ : Fintype S
inst✝ : Nonempty S
P : Finset (Set S)
hPP : ∀ T ∈ P, ∀ U ∈ P, T ∩ U ≠ ∅
hPS : ¬∃ T ∉ P, ∀ U ∈ P, T ∩ U ≠ ∅
⊢ P.card = 2 ^ (Fintype.card S - 1)
l14c7-l14c51, severity: 1
unknown constant 'Nat.pow_sub'
by_contra h_neq:
S : Type u_1
inst✝¹ : Fintype S
inst✝ : Nonempty S
P : Finset (Set S)
hPP : ∀ T ∈ P, ∀ U ∈ P, T ∩ U ≠ ∅
hPS : ¬∃ T ∉ P, ∀ U ∈ P, T ∩ U ≠ ∅
h_neq : ¬P.card = 2 ^ (Fintype.card S - 1)
⊢ False
...
lean_leansearch
Search for theorems in Mathlib using leansearch.net (natural language search).
Example output (query by LLM: "finite set, subset, complement, cardinality, half, partition")
{"module_name": ["Mathlib", "Data", "Fintype", "Card"], "kind": "theorem", "name": ["Finset", "card_compl"], "signature": " [DecidableEq \u03b1] [Fintype \u03b1] (s : Finset \u03b1) : #s\u1d9c = Fintype.card \u03b1 - #s", "type": "\u2200 {\u03b1 : Type u_1} [inst : DecidableEq \u03b1] [inst_1 : Fintype \u03b1] (s : Finset \u03b1), s\u1d9c.card = Fintype.card \u03b1 - s.card", "value": ":=\n Finset.card_univ_diff s", "docstring": null, "informal_name": "Cardinality of Complement Set in Finite Type", "informal_description": "For a finite type $\\alpha$ with decidable equality and a finite subset $s \\subseteq \\alpha$, the cardinality of the complement of $s$ equals the difference between the cardinality of $\\alpha$ and the cardinality of $s$, i.e.,\n$$|s^c| = \\text{card}(\\alpha) - |s|.$$"}
…
More answers like above
…
lean_proofs_complete
Check if all proofs in a file are complete. This is currently very simple and will be improved in the future.
lean_file_contents
Get the contents of a Lean file, optionally with line number annotations.
Project-level tools
lean_build
Rebuild the Lean project and restart the Lean LSP server.
Disabling Tools
Many clients allow the user to disable specific tools manually (e.g. lean_build).
VSCode: Click on the Wrench/Screwdriver icon in the chat.
Cursor: In “Cursor Settings” > “MCP” click on the name of a tool to disable it (strikethrough).
Example Uses
Here are a few example prompts and interactions to try. All examples use VSCode (Agent Mode) and Gemini 2.5 Pro (Preview).
Use tools to assist with a proof
After installing the MCP, tools are automatically available to the agent.
E.g. Open a Lean file with a sorry and run the following prompt: “Solve this sorry”
The agent should use various tools such as lean_goal to understand and create a proof.
You can also ask the agent to use tools explicitly, e.g. “Help me write this proof using tools.” or “Use tools to analyze the goal and hover information, then write a proof.”
Analyze a theorem
Open Algebra/Lie/Abelian.lean. Example prompt:
“Analyze commutative_ring_iff_abelian_lie_ring thoroughly using various tools such as goal, term goal, hover info. Explain the key proof steps in english.”.

Design proof approaches
Open an incomplete proof such as putnam 1964 b2. Example prompt:
“First analyze the problem statement by checking the goal, hover info and looking up key declarations. Next use up to three queries to leansearch to design three different approaches to solve this problem. Very concisely present each approach and its key challenge.”

Notes on MCP Security
There are many valid security concerns with the Model Context Protocol (MCP) in general!
This MCP server is meant as a research tool and is currently in beta.
While it does not handle any sensitive data such as passwords or API keys, it still includes various security risks:
- Access to your local file system.
- No rate limiting on tool calls.
- No input or output validation.
Please be aware of these risks. Feel free to audit the code and report security issues!
For more information, you can use Awesome MCP Security as a starting point.
Related Projects
License & Citation
MIT licensed. See LICENSE for more information.
Citing this repository is highly appreciated but not required by the license.
@software{lean-lsp-mcp, author = {Oliver Dressler}, title = {{Lean LSP MCP: Tools for agentic interaction with the Lean theorem prover}}, url = {https://github.com/oOo0oOo/lean-lsp-mcp}, month = {3}, year = {2025} }
Dev Tools Supporting MCP
The following are the main code editors that support the Model Context Protocol. Click the link to visit the official website for more information.










