LeetCode MCP服务器
](https://www.npmjs.com/package/@jinzcdev/leetcode-mcp-server) ](https://www.npmjs.com/package/@jinzcdev/leetcode-mcp-server) ](./LICENSE)  
LeetCode MCP服务器是一个 模型上下文协议(MCP) 该服务器提供与LeetCode API的无缝集成,实现了与LeetCodes的编程问题、竞赛、解决方案和用户数据的高级自动化和智能交互。
特性
- 🌐 多站点支持:支持 leetcode.com(全球)和leetcode.cn(中国)平台
- 📊 问题数据检索:获取详细的问题描述、约束、示例、官方社论,以及用户提交的解决方案
- 👤 用户数据访问:检索用户资料、提交历史和比赛表现
- 🔒 私人数据访问:创建和查询用户笔记,跟踪问题解决进度,分析提交详细信息(AC/WA分析)
- 🔍 高级搜索功能:按标签、难度级别、类别和关键字过滤问题
- 📅 每日挑战访问:轻松解决日常挑战问题
先决条件
- Node.js(v20.x或更高版本)
- (可选)用于经过身份验证的API访问的LeetCode会话cookie
安装
通过史密瑟里安装
通过以下方式自动安装Claude Desktop的leetcode mcp服务器 史密瑟里:
npx -y @smithery/cli install @jinzcdev/leetcode-mcp-server --client claude手动安装
# 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 或者,您可以克隆存储库并在本地运行它:
# 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:使用环境变量
{
"mcp": {
"servers": {
"leetcode": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@jinzcdev/leetcode-mcp-server"],
"env": {
"LEETCODE_SITE": "global",
"LEETCODE_SESSION": ""
}
}
}
}
}选项2:使用命令行参数
{
"mcp": {
"servers": {
"leetcode": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@jinzcdev/leetcode-mcp-server",
"--site",
"global",
"--session",
""
]
}
}
}
}对于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会话身份验证:
- 登录LeetCode(全球 或 中国 网站)
- 提取
LEETCODE_SESSION来自浏览器开发工具的cookie - 使用配置服务器
--session旗帜或LEETCODE_SESSION环境变量
响应格式
所有工具返回JSON格式的响应,其结构如下:
{
"content": [
{
"type": "text",
"text": "JSON_DATA_STRING"
}
]
}这 JSON_DATA_STRING 包含请求的数据或失败请求的错误消息。
许可证
该项目根据MIT许可证获得许可。
