PN

project-numina/lean-lsp-mcp

Developer tools
21 stars 0 forks 품질 90 트렌드 90

MCP server that allows agentic interaction with the Lean theorem prover via the Language Server Protocol using leanclient.

개요

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. * : Access diagnostics, goal states, term information, hover documentation and more. * : Use LeanSearch, Loogle, Lean Finder, Lean Hammer and Lean State Search to find relevant theorems and definitions. * : Simple configuration for various clients, including VSCode, Cursor and Claude Code. 1. Install uv, a Python package manager. 2. Make sure your Lean project builds quickly by running lake build manually. 3. Configure your IDE/Setup 4. (Optional, highly recommended) Install ripgrep (rg) to reduce hallucinations using local search. Install uv for your system. On Linux/MacOS: curl -LsSf https://astral.sh/uv/install.sh | sh lean-lsp-mcp will run lake serve in the project root to use the language server (for most tools). Some clients (e.g.

README

lean-lsp-mcp

Lean Theorem Prover MCP

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 Hammer and Lean State Search to find relevant theorems and definitions.
  • Easy Setup: Simple configuration for various clients, including VSCode, Cursor and Claude Code.

Setup

Overview

  1. Install uv, a Python package manager.
  2. Make sure your Lean project builds quickly by running lake build manually.
  3. Configure your IDE/Setup
  4. (Optional, highly recommended) Install ripgrep (rg) to reduce hallucinations using local search.

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

Claude Skill: Lean4 Theorem Proving

If you are using Claude Desktop or Claude Code, you can also install the Lean4 Theorem Proving Skill. This skill provides additional prompts and templates for interacting with Lean4 projects and includes a section on interacting with the lean-lsp-mcp server.

For the local search tool lean_local_search, install ripgrep (rg) and make sure it is available in your PATH.

MCP Tools

File interactions (LSP)

lean_file_outline

Get a concise outline of a Lean file showing imports and declarations with type signatures (theorems, definitions, classes, structures).

lean_file_contents (DEPRECATED)

Get the contents of a Lean file, optionally with line number annotations.

lean_diagnostic_messages

Get all diagnostic messages for a Lean file. This includes infos, warnings and errors.

lean_goal

Get the proof goal at a specific location (line or line & column) in a Lean file.

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).

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.

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.

Local Search Tools

lean_local_search

Search for Lean definitions and theorems in the local Lean project and stdlib. This is useful to confirm declarations actually exist and prevent hallucinating APIs.

This tool requires ripgrep (rg) to be installed and available in your PATH.

External Search Tools

Currently most external tools are separately rate limited to 3 requests per 30 seconds. Please don’t ruin the fun for everyone by overusing these amazing free services!

Please cite the original authors of these tools if you use them!

lean_leansearch

Search for theorems in Mathlib using leansearch.net (natural language search).

Github Repository | Arxiv Paper

  • Supports natural language, mixed queries, concepts, identifiers, and Lean terms.
  • Example: bijective map from injective, n + 1 <= m if n < m, Cauchy Schwarz, List.sum, {f : A → B} (hf : Injective f) : ∃ h, Bijective h

leansearch_leandex

lean_loogle

Search for Lean definitions and theorems using loogle.lean-lang.org.

Github Repository

  • Supports queries by constant, lemma name, subexpression, type, or conclusion.
  • Example: Real.sin, "differ", _ * (_ ^ _), (?a -> ?b) -> List ?a -> List ?b, |- tsum _ = _ * tsum _

lean_leanfinder

Semantic search for Mathlib theorems using Lean Finder.

Arxiv Paper

  • Supports informal descriptions, user questions, proof states, and statement fragments.
  • Examples: algebraic elements x,y over K with same minimal polynomial, Does y being a root of minpoly(x) imply minpoly(x)=minpoly(y)?, ⊢ |re z| ≤ ‖z‖ + transform to squared norm inequality, theorem restrict Ioi: restrict Ioi e = restrict Ici e

lean_state_search

Search for applicable theorems for the current proof goal using premise-search.com.

Github Repository | Arxiv Paper

A self-hosted version is available and encouraged. You can set an environment variable LEAN_STATE_SEARCH_URL to point to your self-hosted instance. It defaults to https://premise-search.com.

Uses the first goal at a given line and column. Returns a list of relevant theorems.

lean_hammer_premise

Search for relevant premises based on the current proof state using the Lean Hammer Premise Search.

Github Repository | Arxiv Paper

A self-hosted version is available and encouraged. You can set an environment variable LEAN_HAMMER_URL to point to your self-hosted instance. It defaults to http://leanpremise.net.

Uses the first goal at a given line and column. Returns a list of relevant premises (theorems) that can be used to prove the goal.

Note: We use a simplified version, LeanHammer might have better premise search results.

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).

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_PROJECT_PATH: Path to your Lean project root. Set this if the server cannot automatically detect your project.
  • LEAN_LSP_MCP_TOKEN: Secret token for bearer authentication when using streamable-http or sse transport.
  • 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.

You can also often set these environment variables in your MCP client configuration:

Transport Methods

The Lean LSP MCP server supports the following transport methods:

  • stdio: Standard input/output (default)
  • streamable-http: HTTP streaming
  • sse: Server-sent events (MCP legacy, use streamable-http if possible)

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

Bearer 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.

Example Linux/MacOS setup:

export LEAN_LSP_MCP_TOKEN="your_secret_token"
uvx lean-lsp-mcp --transport streamable-http

Clients should then include the token in the Authorization header.

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 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.

Development

MCP Inspector

npx @modelcontextprotocol/inspector uvx --with-editable path/to/lean-lsp-mcp python -m lean_lsp_mcp.server

Run Tests

uv sync --all-extras
uv run pytest tests

Publications using lean-lsp-mcp

  • Ax-Prover: A Deep Reasoning Agentic Framework for Theorem Proving in Mathematics and Quantum Physics arxiv

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}
}
View this README on GitHub

설치

uvx lean-lsp-mcp

설정

{ "mcpServers": { "lean-lsp": { "command": "uvx", "args": ["lean-lsp-mcp"] } } }