Lean LSP MCP
This server enables AI agents to interact with Lean theorem prover projects through Language Server Protocol (LSP) tools and external search services.
Core Capabilities:
File Analysis & Navigation: Get file outlines with imports and declarations, retrieve diagnostic messages (errors, warnings, info) with optional filtering, find declaration source files, and access hover information with type signatures and documentation
Proof Development: View proof goals at specific positions (the most important tool), get expected types at positions, attempt multiple tactics without modifying files to compare results, and profile theorems to identify slow tactics with per-line timing data
Code Assistance: Get IDE-style autocompletions for identifiers and imports, and run independent Lean code snippets with diagnostic feedback
Search Capabilities:
Local Search: Fast verification of declarations in local project and stdlib using ripgrep (prevents hallucination)
External Search (rate limited): Natural language search (LeanSearch), type signature/pattern search (Loogle), semantic search by mathematical meaning (Lean Finder), goal-based lemma search (State Search), and premise suggestions for automation tactics (Hammer)
Project Management: Build projects with
lake buildand restart the LSP server
Key Features: REPL-based execution for ~5x faster multi-attempt, local Loogle option to avoid rate limits, multiple transport methods (stdio, streamable-http, SSE), and bearer token authentication for public servers.
Enables searching for theorems in Mathlib using natural language queries through leansearch.net, which is documented in an arXiv paper.
Provides integration with the Lean theorem prover and related tools including leanclient, LeanSearch, Loogle, Lean Finder, Lean Hammer, and Lean State Search hosted on GitHub repositories.
Distributes the lean-lsp-mcp package through PyPI for installation and management of the Lean theorem prover MCP server.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Lean LSP MCPsearch for theorems about natural number addition"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP server 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.
Key Features
Rich Lean Interaction: Access diagnostics, goal states, term information, hover documentation and more.
External Search Tools: Use
LeanSearch,Loogle,Lean Finder,Lean HammerandLean State Searchto find relevant theorems and definitions.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
(Optional, highly recommended) Install ripgrep (
rg) for local search and source scanning (lean_verifywarnings).
1. Install uv
Install uv for your system. On Linux/MacOS: curl -LsSf https://astral.sh/uv/install.sh | sh
2. Run lake build
lean-lsp-mcp will run lake serve 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.
3. Configure your IDE/Setup
OR using the setup wizard:
Ctrl+Shift+P > "MCP: Add Server..." > "Command (stdio)" > "uvx lean-lsp-mcp" > "lean-lsp" (or any name you like) > Global or Workspace
OR manually adding config by opening mcp.json with:
Ctrl+Shift+P > "MCP: Open User Configuration"
and adding the following
{
"servers": {
"lean-lsp": {
"type": "stdio",
"command": "uvx",
"args": [
"lean-lsp-mcp"
]
}
}
}If you installed VSCode on Windows and are using WSL2 as your development environment, you may need to use this config instead:
{
"servers": {
"lean-lsp": {
"type": "stdio",
"command": "wsl.exe",
"args": [
"uvx",
"lean-lsp-mcp"
]
}
}
}If that doesn't work, you can try cloning this repository and replace "lean-lsp-mcp" with "/path/to/cloned/lean-lsp-mcp".
"+ Add a new global MCP Server" > ("Create File")
Paste the server config into
mcp.jsonfile:
{
"mcpServers": {
"lean-lsp": {
"command": "uvx",
"args": ["lean-lsp-mcp"]
}
}
}# 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-mcpYou can find more details about MCP server configuration for Claude Code here.
Edit
~/.vibe/config.toml.Paste the following into the file (e.g. at the end):
[[mcp_servers]]
name = "lean-lsp"
transport = "stdio"
command = "uvx"
args = ["lean-lsp-mcp"]
tool_timeout_sec = 600If there are no existing MCP servers, you may have to remove mcp_servers = [].
4. Install ripgrep (optional but recommended)
For the local search tool lean_local_search, install ripgrep (rg) and make sure it is available in your PATH.
5. Install the Lean 4 skill (optional but recommended)
With any agentic coding platform such as Claude Code or Codex, you can install the Agentic Coding Skill: Lean 4 Theorem Proving. This skill provides additional prompts and templates for interacting with Lean 4 projects, including guidance on using lean-lsp-mcp.
MCP Tools
List of available tools
See Tools documentation for the full list of available tools.
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).
You can also disable tools at server startup:
LEAN_MCP_DISABLED_TOOLS: Comma-separated tool names (for examplelean_run_code,lean_build).LEAN_MCP_INSTRUCTIONS: Replacement server instructions string.LEAN_MCP_TOOL_DESCRIPTIONS: JSON object to override tool descriptions.
Example:
export LEAN_MCP_DISABLED_TOOLS="lean_run_code,lean_build"
export LEAN_MCP_INSTRUCTIONS="Prefer lean_local_search before remote search tools."
export LEAN_MCP_TOOL_DESCRIPTIONS='{"lean_goal":"Primary proof-state inspection tool."}'MCP Configuration
This MCP server works out-of-the-box without any configuration. However, a few optional settings are available.
Environment Variables
LEAN_LOG_LEVEL: Log level for the server. Options are "INFO", "WARNING", "ERROR", "NONE". Defaults to "INFO".LEAN_LOG_FILE_CONFIG: Config file path for logging, with priority overLEAN_LOG_LEVEL. If not set, logs are printed to stdout.LEAN_PROJECT_PATH: Path to your Lean project root. A valid Lean project root must containlean-toolchainand eitherlakefile.leanorlakefile.toml. Relativefile_patharguments resolve against this root. This variable is required forstreamable-httpandsse.LEAN_MCP_DISABLED_TOOLS: Comma-separated list of tool names to remove from MCP tool listing.LEAN_MCP_INSTRUCTIONS: Replacement server instructions string.LEAN_MCP_TOOL_DESCRIPTIONS: JSON object mapping tool names to replacement descriptions.LEAN_REPL: Set totrue,1, oryesto enable fast REPL-basedlean_multi_attemptfor line-based attempts (~5x faster, see REPL Setup).LEAN_REPL_PATH: Path to thereplbinary. Auto-detected from.lake/packages/repl/if not set.LEAN_REPL_TIMEOUT: Per-command timeout in seconds (default: 60).LEAN_REPL_MEM_MB: Max memory per REPL in MB (default: 8192). Only enforced on Linux/macOS.LEAN_LSP_MCP_TOKEN: Secret token for bearer authentication when usingstreamable-httporssetransport. If set, bearer auth is required for every request.LEAN_BUILD_CONCURRENCY: Build concurrency mode forlean_build. Options:allow(default),cancel,share.LEAN_STATE_SEARCH_URL: URL for a self-hosted premise-search.com instance.LEAN_HAMMER_URL: URL for a self-hosted Lean Hammer Premise Search instance.LEAN_LOOGLE_LOCAL: Set totrue,1, oryesto enable local loogle (see Local Loogle section).LEAN_LOOGLE_CACHE_DIR: Override the cache directory for local loogle (default:~/.cache/lean-lsp-mcp/loogle).LOOGLE_URL: URL for a self-hosted Loogle instance (default:https://loogle.lean-lang.org).LOOGLE_HEADERS: JSON object of extra HTTP headers for Loogle requests (e.g.'{"X-API-Key": "..."}').
You can also often set these environment variables in your MCP client configuration:
{
"servers": {
"lean-lsp": {
"type": "stdio",
"command": "uvx",
"args": [
"lean-lsp-mcp"
],
"env": {
"LEAN_PROJECT_PATH": "/path/to/your/lean/project",
"LEAN_LOG_LEVEL": "NONE"
}
}
}
}Transport Methods
The Lean LSP MCP server supports the following transport methods:
stdio: Standard input/output (default)streamable-http: HTTP streamingsse: Server-sent events (MCP legacy, usestreamable-httpif possible)
stdio supports project inference and switching as you move between Lean projects. streamable-http and sse are single-project deployments: they require LEAN_PROJECT_PATH at startup and reject tool-driven project switching.
You can specify the transport method using the --transport argument when running the server. For sse and streamable-http you can also optionally specify the host and port:
uvx lean-lsp-mcp --transport stdio # Default transport
uvx lean-lsp-mcp --transport streamable-http # Available at http://127.0.0.1:8000/mcp
uvx lean-lsp-mcp --transport sse --host localhost --port 12345 # Available at http://localhost:12345/sse
uvx lean-lsp-mcp --version # Print the installed versionBearer Token Authentication
Transport via streamable-http and sse supports bearer token authentication. This allows publicly accessible MCP servers to restrict access to authorized clients.
Set the LEAN_LSP_MCP_TOKEN environment variable (or see section 3 for setting env variables in MCP config) to a secret token before starting the server. If this variable is set, requests without a matching Authorization: Bearer ... header are rejected before tool dispatch.
Example Linux/MacOS setup:
export LEAN_LSP_MCP_TOKEN="your_secret_token"
uvx lean-lsp-mcp --transport streamable-httpClients should then include the token in the Authorization header.
REPL Setup
Enable fast REPL-based lean_multi_attempt for line-based attempts (~5x faster). Uses leanprover-community/repl tactic mode. Exact column-based attempts still use the LSP path.
1. Add REPL to your Lean project's lakefile.toml:
[[require]]
name = "repl"
git = "https://github.com/leanprover-community/repl"
rev = "v4.25.0" # Match your Lean version2. Build it:
lake build repl3. Enable via CLI or environment variable:
uvx lean-lsp-mcp --repl
# Or via environment variable
export LEAN_REPL=trueThe REPL binary is auto-detected from .lake/packages/repl/. Falls back to LSP if not found.
Path Policy
File-based tools only operate on files inside the active Lean project, resolved .lake/packages/* dependencies, and the Lean stdlib source tree. Returned file paths are sanitized to avoid leaking host absolute paths:
Project files are returned relative to the project root, for example
src/MyFile.lean.Dependency files are returned under
.lake/packages/<package>/....Stdlib files are returned under
.lean-stdlib/....
Symlink escapes outside those roots are rejected.
Local Loogle
Run loogle locally to avoid the remote API's rate limit (3 req/30s). First run takes ~5-10 minutes to build; subsequent runs start in seconds.
# Enable via CLI
uvx lean-lsp-mcp --loogle-local
# Or via environment variable
export LEAN_LOOGLE_LOCAL=trueRequirements: git, lake (elan), ~2GB disk space.
Note: Local loogle is currently only supported on Unix systems (Linux/macOS). Windows users should use WSL or the remote API.
Falls back to remote API if local loogle fails.
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.
Powerful local build and analysis capabilities.
External network access for remote search tools unless disabled by the operator.
Please be aware of these risks. Feel free to audit the code and report security issues!
Containerized setup (recommended for stricter isolation)
Build image:
docker build -t lean-lsp-mcp:containerized .Run with a mounted project root (read-only source + writable Lake cache):
docker run --rm -i \
-v "$PWD":/workspace:ro \
-v lean-lsp-mcp-lake-cache:/workspace/.lake \
lean-lsp-mcp:containerizedThe included Docker image defaults to:
LEAN_PROJECT_PATH=/workspaceLEAN_MCP_DISABLED_TOOLS=lean_run_code
Notes:
LEAN_MCP_DISABLED_TOOLSis a startup default and can be overridden bydocker run -e.Using
--network nonecan break tools that require network access (leansearch,loogle,leanfinder,state_search,hammer_premise) and dependency downloads.The entrypoint exits immediately if
LEAN_PROJECT_PATHdoes not exist.
For more information, you can use Awesome MCP Security as a starting point.
Development
MCP Inspector
npx @modelcontextprotocol/inspector uvx --with-editable path/to/lean-lsp-mcp python -m lean_lsp_mcp.serverRun Tests
uv sync --all-extras
uv run pytest testsPublications and Formalization Projects using lean-lsp-mcp
Ax-Prover: A Deep Reasoning Agentic Framework for Theorem Proving in Mathematics and Quantum Physics arxiv
Numina-Lean-Agent: An Open and General Agentic Reasoning System for Formal Mathematics arxiv github
MerLean: An Agentic Framework for Autoformalization in Quantum Computation arxiv
M2F: Automated Formalization of Mathematical Literature at Scale arxiv
A Group-Theoretic Approach to Shannon Capacity of Graphs and a Limit Theorem from Lattice Packings github
Talks
lean-lsp-mcp: Tools for agentic interaction with Lean (Lean Together 2026) youtube
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}
}Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/oOo0oOo/lean-lsp-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server