LeetCode API服务器

一个兼容MCP的服务器,提供与LeetCode API交互的工具集,支持获取题目、生成代码模板、运行和提交解决方案。

  • by AHM215
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 AHM215/LeetCode-MCP

使用说明

LeetCode MCP 服务器

一个兼容MCP的服务器,它提供了一组工具来与LeetCode API进行交互。这使您可以编程获取题目、生成代码模板、运行并提交解决方案。

概述

这个项目提供了一种简单有效的方式来与LeetCode的服务进行交互。它是使用Python构建的,并且 mcp 框架,将功能作为工具暴露出来,这些工具可以轻松集成到其他应用程序中,或用于自动化LeetCode任务。

特点/特性

  • 获取问题详情获取任何LeetCode问题的完整描述、示例和约束条件。
  • 代码模板生成为任意问题生成您偏好的语言的初始代码。
  • 运行代码将你的解决方案与示例测试用例进行对比测试。
  • 提交代码提交您的解决方案以进行全面测试套件的评估。
  • 每日挑战获取当前的每日LeetCode挑战。
  • 搜索问题使用标签、难度和关键词等各种过滤器来搜索问题。

入门指南

先决条件

  • Python 3.12及以上版本
  • Docker(用于容器化部署)
  • Git

配置

要与LeetCode API进行交互,您需要提供您的 LEETCODE_SESSION 和 LEETCODE_CSRFTOKEN cookies(网络术语,可译为“小甜饼”或直接保留原英文,根据上下文决定具体用法)。

  1. 登录 在您的网页浏览器中登录您的LeetCode账户。
  2. 打开开发者工具 (通常通过按下 F12 或者 Ctrl+Shift+I)。
  3. 前往 应用 (或者 存储) 表格(tab. 为表格的英文缩写,意为 "table")。
  4. 找到 Cookies(网络小甜饼/浏览器缓存文件) 选择并选取(或“选定并选择”,根据上下文,“section”在这里可能指的是某个特定的区域或部分,而“select”则是指进行选择的动作) https://leetcode.com。
  5. 找到/定位 LEETCODE_SESSION 和 csrftoken 获取cookie并复制其值。

创建一个 .env 在项目的根目录下创建文件并添加您的凭据:

# .env
LEETCODE_SESSION=your_leetcode_session_cookie
LEETCODE_CSRFTOKEN=your_leetcode_csrftoken

本地安装

  1. 克隆仓库:

    git clone https://github.com/AHM215/leetcode-mcp.git
    cd leetcode-mcp
    
  2. 安装依赖项:

    pip install uv
    uv pip install -e .
    
  3. 运行服务器:

    uv run python run_server.py
    

    服务器将启动,您可以使用MCP客户端与其进行交互。

Docker 使用方法

从 Docker Hub 拉取

你可以从Docker Hub拉取预构建的Docker镜像。

docker pull ahm215/leetcode-mcp-server:latest

使用 Docker 运行

要使用Docker运行服务器,您需要将您的LeetCode凭据作为环境变量传递。

docker run -d \
  -p 8000:8000 \
  --name leetcode-mcp-server \
  -e LEETCODE_SESSION="your_leetcode_session_cookie" \
  -e LEETCODE_CSRFTOKEN="your_leetcode_csrftoken" \
  ahm215/leetcode-mcp-server:latest

从源代码构建

你也可以从源代码构建Docker镜像。

  1. 克隆仓库 (如果你还没做的话)。
  2. 构建镜像:
    docker build -t leetcode-mcp-server .
    
  3. 运行容器 如“使用 Docker 运行”部分所示,使用 leetcode-mcp-server 作为图像名称。

Claude桌面版使用

如果你想在Claude桌面环境中将此服务器作为工具运行,可以使用以下JSON配置。该配置定义了一个工具,用于运行Docker容器并传递必要的凭据。

注: 你必须替换占位符值为 --leetcode-session 并且 --csrftoken 使用你实际的LeetCode登录信息(或cookie)。

"docker-leetcode-mcp-server": {
  "type": "stdio",
  "command": "docker",
  "args": [
    "run",
    "-i",
    "--rm",
    "ahm215/leetcode-mcp-server:v1.0.0",
    "--leetcode-session",
    "your_leetcode_session_cookie",
    "--csrftoken",
    "your_leetcode_csrftoken"
  ]
}

可用工具(API)

服务器提供了以下工具:


fetch_problem_plain_text

根据给定的LeetCode问题URL,获取该问题的纯文本内容。

  • 参数:
    • link (str): LeetCode 问题的完整 URL。
  • 返回值: (str) 问题的纯文本描述。

generate_template

为给定的LeetCode问题生成特定语言的代码模板。

  • 参数:
    • problem_slug (str): 从问题的URL中提取的问题别名(例如,“two-sum”)。
    • code_lang (str): 语言标识符(例如,“python3”,“java”,“cpp”)。
  • 返回: (str) 代码模板。

run_code

针对LeetCode问题中的示例测试用例执行代码。

  • 参数:
    • problem_slug (str): 问题的别名(或简短描述)。
    • code_lang (str): 语言标识符(或语言别名)。
    • code (str): 要执行的代码。
  • 返回值: (字典)执行结果。

submit_code

提交一个LeetCode问题的代码以进行全面测试套件的评估。

  • 参数:
    • problem_slug (str): 问题的别名(或简短描述)。
    • code_lang (str): 语言标识符(或语言别名)。
    • code (str): 需要提交的代码。
  • 返回值: (字典) 提交结果。

get_daily_challenge

获取今天的LeetCode每日挑战问题。

  • 参数: 无
  • 返回值: (字典) 每日挑战问题的详细信息。

get_problem

检索特定LeetCode问题的详细信息。

  • 参数:
    • titleSlug (str): 问题的别名(或简短描述)。
  • 返回值: (字典)有关问题的详细信息。

search_problems

根据各种筛选条件搜索LeetCode问题。

  • 参数:
    • category (字符串,可选):要搜索的类别。默认为“all-code-essentials”。
    • tags (可选参数,类型为 List[str]):一个用于过滤的标签列表。
    • difficulty (字符串,可选):难度级别(“简单”,“中等”,“困难”)。
    • searchKeywords (str, optional):要搜索的关键词。
    • limit (int, 可选): 要返回的结果数量。默认值为10。
    • offset (int, 可选): 分页的偏移量。默认值为0。
  • 返回值: (字典) 符合条件的问题列表。

做出贡献

欢迎贡献!如果您有任何建议或发现任何错误,请随时提交拉取请求或打开一个议题。

  1. 为该仓库创建一个分支(或译为“克隆该仓库”)。
  2. 创建你的特性分支(git checkout -b feature/AmazingFeature)。
  3. 提交您的更改(git commit -m 'Add some AmazingFeature')。
  4. 推送到分支(git push origin feature/AmazingFeature)。
  5. 提交一个拉取请求。

许可证

这个项目采用MIT许可证授权。详见 许可证 文件中有详细信息。