LeetCode API集成服务器

基于Model Context Protocol的LeetCode API集成服务器,支持编程题目数据获取、用户数据分析、提交管理及笔记功能

作者 By jinzcdev
本地部署 可托管 编程练习
GitHub

LeetCode MCP服务器

LeetCode MCP服务器是一个 模型上下文协议(MCP) 该服务器提供与LeetCode API的无缝集成,实现了与LeetCodes的编程问题、竞赛、解决方案和用户数据的高级自动化和智能交互。

LeetCode Server MCP server

特性

  • 🌐 多站点支持:支持​ leetcode.com(全球)和leetcode.cn(中国)平台
  • 📊 问题数据检索:获取详细的问题描述、约束、示例、官方社论,以及​用户提交的解决方案
  • 👤 用户数据访问:检索用户资料、提交历史和比赛表现
  • 🔒 ​私人数据访问:创建和查询用户笔记,跟踪问题解决进度,分析提交详细信息(AC/WA分析)
  • 🔍 高级搜索功能:按标签、难度级别、类别和关键字过滤问题
  • 📅 每日挑战访问:轻松解决日常挑战问题

先决条件

  1. Node.js(v20.x或更高版本)
  2. (可选)用于经过身份验证的API访问的LeetCode会话cookie

安装

通过史密瑟里安装

通过以下方式自动安装Claude Desktop的leetcode mcp服务器 史密瑟里:

BASH``` 1npx -y @smithery/cli install @jinzcdev/leetcode-mcp-server —client claude


### 手动安装


BASH```
1
2
3
4
5
6# Install from npm
npm install @jinzcdev/leetcode-mcp-server -g
# Or run with Global site configuration
npx -y @jinzcdev/leetcode-mcp-server --site global
# Run with authentication (for accessing private data)
npx -y @jinzcdev/leetcode-mcp-server --site global --session <YOUR_LEETCODE_SESSION_COOKIE>

或者,您可以克隆存储库并在本地运行它:

BASH``` 1 2 3 4 5 6 7 8# Clone the repository git clone https://github.com/jinzcdev/leetcode-mcp-server.git

Navigate to the project directory

cd leetcode-mcp-server

Build the project

npm install && npm run build

Run the server

node build/index.js —site global


## 用法


### Visual Studio代码集成


将以下JSON配置添加到您的用户设置(JSON)文件中。按进入此页面 `Ctrl/Cmd + Shift + P` 并搜索 `Preferences: Open User Settings (JSON)`.


#### 选项1:使用环境变量


JSON```
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15{
  "mcp": {
    "servers": {
      "leetcode": {
        "type": "stdio",
        "command": "npx",
        "args": ["-y", "@jinzcdev/leetcode-mcp-server"],
        "env": {
          "LEETCODE_SITE": "global",
          "LEETCODE_SESSION": "<YOUR_LEETCODE_SESSION_COOKIE>"
        }
      }
    }
  }
}

选项2:使用命令行参数

JSON``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18{ “mcp”: { “servers”: { “leetcode”: { “type”: “stdio”, “command”: “npx”, “args”: [ “-y”, “@jinzcdev/leetcode-mcp-server”, “—site”, “global”, “—session”, “<YOUR_LEETCODE_SESSION_COOKIE>” ] } } } }


对于LeetCode中国网站,请修改 `--site` 参数到 `cn`.


> [!提示]
> 
> 
> 服务器支持以下可选环境变量:
> 
> 
> - `LEETCODE_SITE`:LeetCode API端点(“全局”或“cn”,默认值:“全局”)
> - `LEETCODE_SESSION`:LeetCode会话cookie,用于通过身份验证的API访问(默认值:空)
> 
> 
> **优先级说明**:
> 如果同时指定了命令行参数和环境变量,则命令行参数优先于环境变量。例如:
> 
> 
> - 如果 `LEETCODE_SITE=cn` 已设置,但你仍在奔跑 `leetcode-mcp-server --site global`,服务器将使用 `global`.
> - 如果 `LEETCODE_SESSION` 存在,但您提供 `--session "new_cookie"`,将使用命令行会话值。


## 可用工具


### 问题


| 工具 | 全局 | 中国 | 需要授权 | 描述 |
| --- | --- | --- | --- | --- |
| **get_daily_challenge** | ✅ | ✅ | ❌ | 检索今天的LeetCode每日挑战问题 |
| **get_问题** | ✅ | ✅ | ❌ | 检索特定LeetCode问题的详细信息 |
| **搜索_问题** | ✅ | ✅ | ❌ | 使用多个筛选条件搜索LeetCode问题 |


### 用户


| 工具 | 全局 | 中国 | 需要授权 | 描述 |
| --- | --- | --- | --- | --- |
| **get_user_profile** | ✅ | ✅ | ❌ | 检索LeetCode用户的配置文件信息 |
| **get_user_contest_ranking** | ✅ | ✅ | ❌ | 获取用户的比赛排名统计数据 |
| **get_recent_ac_提交** | ✅ | ✅ | ❌ | 检索用户最近接受的提交 |
| **get_recent_submissions** | ✅ | ❌ | ❌ | 检索用户最近的提交历史记录 |
| **获取用户状态** | ✅ | ✅ | ✅ | 检索当前用户的当前状态 |
| **get_problem_submission_report** | ✅ | ✅ | ✅ | 为特定问题提供详细的提交分析 |
| **获取问题进展** | ✅ | ✅ | ✅ | 检索当前用户的问题解决进度 |
| **get_all_提交** | ✅ | ✅ | ✅ | 检索当前用户的提交历史记录 |


### 提交


| 工具 | 全局 | 中国 | 需要授权 | 描述 |
| --- | --- | --- | --- | --- |
| **run_code** | ✅ | ✅ | ✅ | 运行问题代码并轮询 `/check/` 直到完成 |
| **提交解决方案** | ✅ | ✅ | ✅ | 提交问题代码并进行投票 `/check/` 直到完成 |


### 备注


| 工具 | 全局 | 中国 | 需要授权 | 描述 |
| --- | --- | --- | --- | --- |
| **search_notes** | ❌ | ✅ | ✅ | 使用筛选选项搜索用户笔记 |
| **get_note** | ❌ | ✅ | ✅ | 按问题ID检索特定问题的注释 |
| **create_note** | ❌ | ✅ | ✅ | 为特定问题创建新注释 |
| **update_note** | ❌ | ✅ | ✅ | 用新内容更新现有笔记 |


### 解决方案


| 工具 | 全局 | 中国 | 需要授权 | 描述 |
| --- | --- | --- | --- | --- |
| **列表_问题_解决方案** | ✅ | ✅ | ❌ | 检索特定问题的社区解决方案列表 |
| **get_problem_solution** | ✅ | ✅ | ❌ | 检索特定解决方案的完整内容 |


## 工具参数


### 问题


- **get_daily_challenge** -检索今天的LeetCode每日挑战问题的完整详细信息


- 无需参数
- **get_问题** -检索特定LeetCode问题的详细信息


- `titleSlug`:问题的URL段/标识符(字符串,必填)
- **搜索_问题** -基于多个筛选条件搜索LeetCode问题


- `category`:问题类别筛选器(字符串,可选,默认值:“所有代码要素”)
- `tags`:用于筛选问题的主题标签列表(string[],可选)
- `difficulty`:问题难度级别过滤器(枚举:“EASY”、“MEDIUM”、“HARD”,可选)
- `searchKeywords`:在问题标题和描述中搜索的关键字(字符串,可选)
- `limit`:要返回的最大问题数(数字,可选,默认值:10)
- `offset`:要跳过的问题数量(数量,可选)


### 用户


- **get_user_profile** -检索LeetCode用户的配置文件信息


- `username`:LeetCode用户名(字符串,必填)
- **get_user_contest_ranking** -检索用户的比赛排名信息


- `username`:LeetCode用户名(字符串,必填)
- `attended`:是否只包括用户参加过的比赛(布尔值,可选,默认值:true)
- **get_recent_submissions** -检索用户最近在LeetCode Global上提交的内容


- `username`:LeetCode用户名(字符串,必填)
- `limit`:要返回的最大提交次数(数量,可选,默认值:10)
- **get_recent_ac_提交** -检索用户最近接受的提交


- `username`:LeetCode用户名(字符串,必填)
- `limit`:要返回的最大提交次数(数量,可选,默认值:10)
- **获取用户状态** -检索当前用户的状态


- 无需参数
- **get_problem_submission_report** -检索特定提交的详细信息


- `id`:数字提交ID(数字,必填)
- **获取问题进展** -检索当前用户的问题解决进度


- `offset`:要跳过的问题数(数字,可选,默认值:0)
- `limit`:要返回的最大问题数(数字,可选,默认值:100)
- `questionStatus`:按问题状态筛选(枚举:“已尝试”、“已解决”,可选)
- `difficulty`:按难度级别过滤(string[],可选)
- **get_all_提交** -检索用户提交的分页列表


- `limit`:要返回的最大提交数(默认值:20)
- `offset`:要跳过的提交数(默认值:0)
- `questionSlug`:可选问题标识符(字符串,可选)
- `lang`:编程语言过滤器(字符串,可选,仅限CN)
- `status`:提交状态筛选器(枚举:“AC”、“WA”,可选,仅限CN)
- `lastKey`:用于检索下一页的分页标记(字符串,可选,仅限CN)


### 提交


- **run_code** -运行特定问题的代码并等待完成(需要身份验证)


- `titleSlug`:问题的URL段/标识符(字符串,必填)
- `lang`:编程语言(字符串枚举,必填)
- `typedCode`:要运行的源代码(字符串,必填)
- `dataInput`:要运行的自定义输入(字符串,可选)
- `timeoutMs`:轮询超时(毫秒)(数字,可选,默认值:120000)
- `pollIntervalMs`:轮询间隔(毫秒)(数字,可选,默认值:1500)
- **提交解决方案** -提交特定问题的代码并等待完成(需要身份验证)


- `titleSlug`:问题的URL段/标识符(字符串,必填)
- `lang`:编程语言(字符串枚举,必填)
- `typedCode`:要提交的源代码(字符串,必填)
- `timeoutMs`:轮询超时(毫秒)(数字,可选,默认值:120000)
- `pollIntervalMs`:轮询间隔(毫秒)(数字,可选,默认值:1500)


### 备注


- **search_notes** -在LeetCode中国搜索用户笔记


- `keyword`:用于过滤注释的搜索词(字符串,可选)
- `limit`:可退回的最大钞票数量(数量,可选,默认值:10)
- `skip`:要跳过的笔记数(数字,可选,默认值:0)
- `orderBy`:返回注释的排序顺序(枚举:“ASCENDING”、“DESCENDING”,可选,默认:“DESCENDING”)
- **get_note** -检索特定LeetCode问题的用户注释


- `questionId`:LeetCode问题的问题ID(字符串,必填)
- `limit`:可退回的最大钞票数量(数量,可选,默认值:10)
- `skip`:要跳过的笔记数(数字,可选,默认值:0)
- **create_note** -为特定的LeetCode问题创建新注释


- `questionId`:LeetCode问题的问题ID(字符串,必填)
- `content`备注内容,支持markdown格式(字符串,必填)
- `summary`:注释的可选简短摘要或标题(字符串,可选)
- **update_note** -用新内容或摘要更新现有笔记


- `noteId`:要更新的注释的ID(字符串,必填)
- `content`:笔记的新内容,支持markdown格式(字符串,必填)
- `summary`:注释的可选新简短摘要或标题(字符串,可选)


### 解决方案


- **列表_问题_解决方案** -检索特定问题的社区解决方案列表


- `questionSlug`:问题的URL段/标识符(字符串,必填)
- `limit`:要返回的最大解决方案数(数字,可选,默认值:10)
- `skip`:要跳过的解决方案数量(数量,可选)
- `userInput`:用于筛选解决方案的搜索词(字符串,可选)
- `tagSlugs`:用于筛选解决方案的标记标识符数组(string[],可选,默认值:[])
- `orderBy`:返回解决方案的排序标准

- 全局:枚举:“HOT”、“MOST_RECENT”、”MOST_VOTES”,可选,默认值:“HOT”
- CN:枚举:“DEFAULT”、“MOST_UPVOTE”、“HOT”、“NEWEST_TO_OLDEST”、“OLDEST_TO_NEWEST”,可选,默认值:“DEFULT”
- **get_problem_solution** -检索特定解决方案的完整内容


- `topicId`:解决方案的唯一主题ID(字符串,必填,仅限全局)
- `slug`:解决方案的唯一slug/标识符(字符串,必填,仅限CN)


## 可用资源


| 资源名称 | 全局 | CN | 需要授权 | 描述 |
| --- | --- | --- | --- | --- |
| **问题类别** | ✅ | ✅ | ❌ | 所有问题分类类别的列表 |
| **问题标签** | ✅ | ✅ | ❌ | 算法和数据结构标签的详细集合 |
| **问题语言** | ✅ | ✅ | ❌ | 所有支持的编程语言的完整列表 |
| **问题细节** | ✅ | ✅ | ❌ | 提供有关特定问题的详细信息 |
| **问题-解决方案** | ✅ | ✅ | ❌ | 提供特定解决方案的完整内容 |


## 资源URI


- **问题类别** -所有问题分类类别的列表


- URI: `categories://problems/all`
- **问题标签** -算法和数据结构标签的详细集合


- URI: `tags://problems/all`
- **问题语言** -LeetCode支持的所有编程语言的完整列表


- URI: `langs://problems/all`
- **问题细节** -提供有关特定LeetCode问题的详细信息


- URI: `problem://{titleSlug}`
- 参数:

- `titleSlug`:LeetCode URL中出现的问题标识符
- **问题-解决方案** -提供特定解决方案的完整内容


- 全局URI: `solution://{topicId}`

- 参数:

- `topicId`:解决方案的唯一主题ID
- CN URI: `solution://{slug}`

- 参数:

- `slug`:解决方案的唯一slug/标识符


## 认证


用户特定的数据访问需要LeetCode会话身份验证:


1. 登录LeetCode([全球](https://leetcode.com) 或 [中国](https://leetcode.cn) 网站)
2. 提取 `LEETCODE_SESSION` 来自浏览器开发工具的cookie
3. 使用配置服务器 `--session` 旗帜或 `LEETCODE_SESSION` 环境变量


## 响应格式


所有工具返回JSON格式的响应,其结构如下:


JSON```
1
2
3
4
5
6
7
8{
  "content": [
    {
      "type": "text",
      "text": "JSON_DATA_STRING"
    }
  ]
}

JSON_DATA_STRING 包含请求的数据或失败请求的错误消息。

许可证

该项目根据MIT许可证获得许可。