mcpField
L
LeetCode MCP Server

LeetCode MCP Server

本地服务
npmjs.com开发工具1551 周前更新

关于 LeetCode MCP Server

LeetCode MCP Server 将 LeetCode 问题、竞赛、解答和用户数据提供给 MCP 客户端,适用于算法练习与进度管理。支持 leetcode.com 和 leetcode.cn,并可通过会话凭据访问个人功能。

主要功能

  1. 01查询题目详情与每日挑战
  2. 02按标签、难度和关键词搜索
  3. 03获取用户资料与竞赛数据
  4. 04分析提交并管理题单和笔记
  5. 05运行及提交代码

适用场景

  1. 01查找特定主题或难度的练习题
  2. 02查看每日挑战及官方题解
  3. 03跟踪个人解题进度和提交记录
  4. 04提交代码并分析运行结果

MCP 相关

作为 MCP 服务,可通过 stdio 或 Streamable HTTP 接入 MCP 客户端,并提供题目、用户、提交、笔记及题单等工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"leetcode": {
"command": "npx",
"args": [
"-y",
"@smithery/cli"
]
}
}
}
启动命令npx -y @smithery/cli

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@smithery/cli

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

LeetCode MCP 服务

NPM Version Chinese Doc NPM Downloads GitHub License LeetCode MCP Server on Glama Stars

LeetCode MCP 服务是一个 Model Context Protocol (MCP) 服务,可与 LeetCode API 无缝集成,从而实现对 LeetCode 编程题、竞赛、题解和用户数据的高级自动化与智能交互。

功能特性

  • 🌐 多站点支持:支持 leetcode.com(全球站)和 leetcode.cn(中国站)
  • 🔌 双传输模式:可作为 stdio 进程(默认)运行,也可作为 Streamable HTTP 服务运行,用于 Web 集成
  • 📊 题目数据获取:获取详细的题目描述、限制条件、示例、官方题解和用户提交的解答
  • 👤 用户数据访问:获取用户资料、提交历史和竞赛表现
  • 🔒 私有数据访问:创建和查询用户笔记、管理题目列表、跟踪解题进度,以及分析提交详情(AC/WA 分析)
  • 🔍 高级搜索功能:按标签、难度、类别和关键词筛选题目
  • 📅 每日挑战访问:轻松获取每日挑战题目

前置条件

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

安装

# Install from npm
npm install @jinzcdev/leetcode-mcp-server -g

# Run with Global site configuration (stdio transport, default)
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>

# Run as a Streamable HTTP server
npx -y @jinzcdev/leetcode-mcp-server --transport http --port 3000 --site global

或者,你也可以克隆仓库并在本地运行:

# 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 (stdio transport)
node build/index.js --site global

# Or run as a Streamable HTTP server
node build/index.js --transport http --port 3000 --site global

使用方法

该服务支持两种传输模式:

传输方式说明
stdio(默认)用于本地 MCP 客户端的标准输入/输出传输
http用于 Web 集成和远程访问的 Streamable HTTP 传输
命令行选项
选项别名默认值说明
--site-sglobalLeetCode API 站点:global(leetcode.com)或 cn(leetcode.cn)
--session-c—用于经过身份验证的请求的 LeetCode 会话 Cookie
--transport-tstdio传输模式:stdio 或 http
--port—3000HTTP 服务端口(仅限 Streamable HTTP)
--host—127.0.0.1HTTP 服务主机(仅限 Streamable HTTP)
--endpoint—/mcpHTTP 端点路径(仅限 Streamable HTTP)
MCP 客户端配置(stdio)

将以下服务条目添加到 MCP 客户端配置文件中:

选项 1:使用环境变量
{
  "mcpServers": {
    "leetcode": {
      "command": "npx",
      "args": ["-y", "@jinzcdev/leetcode-mcp-server"],
      "env": {
        "LEETCODE_SITE": "global",
        "LEETCODE_SESSION": "<YOUR_LEETCODE_SESSION_COOKIE>"
      }
    }
  }
}
选项 2:使用命令行参数
{
  "mcpServers": {
    "leetcode": {
      "command": "npx",
      "args": [
        "-y",
        "@jinzcdev/leetcode-mcp-server",
        "--site",
        "global",
        "--session",
        "<YOUR_LEETCODE_SESSION_COOKIE>"
      ]
    }
  }
}

对于 LeetCode 中国站点,将 --site 参数改为 cn。

说明

确切的配置文件位置和 JSON 结构可能因 MCP 客户端而异。有些客户端使用 mcp.servers 封装或 type 字段,请参阅客户端文档并相应调整示例。

MCP 客户端配置(Streamable HTTP)

首先,以 HTTP 模式启动服务:

npx -y @jinzcdev/leetcode-mcp-server --transport http --port 3000 --site global

然后将 MCP 客户端连接到正在运行的服务:

{
  "mcpServers": {
    "leetcode": {
      "type": "http",
      "url": "http://127.0.0.1:3000/mcp"
    }
  }
}

若要使用需要身份验证的端点,请在启动服务时传入会话 Cookie:

npx -y @jinzcdev/leetcode-mcp-server --transport http --port 3000 --site global --session <YOUR_LEETCODE_SESSION_COOKIE>

说明

有些 MCP 客户端会在 url 字段旁使用 "type": "http" 或 "type": "streamableHttp"。有关确切的 HTTP 传输配置格式,请参阅客户端文档。

提示

服务支持以下可选环境变量:

  • LEETCODE_SITE:LeetCode API 端点(global 或 cn,默认值:global)
  • LEETCODE_SESSION:用于访问需要身份验证的 API 的 LeetCode 会话 Cookie(默认值:空)
  • LEETCODE_TRANSPORT:传输模式(stdio 或 http,默认值:stdio)
  • LEETCODE_HTTP_PORT:使用 Streamable HTTP 时的 HTTP 服务端口(默认值:3000)
  • LEETCODE_HTTP_HOST:使用 Streamable HTTP 时的 HTTP 服务主机(默认值:127.0.0.1)
  • LEETCODE_HTTP_ENDPOINT:使用 Streamable HTTP 时的 HTTP 端点路径(默认值:/mcp)

优先级说明: 同时指定命令行参数和环境变量时,命令行参数优先。例如:

  • 如果设置了 LEETCODE_SITE=cn,但运行 leetcode-mcp-server --site global,服务将使用 global。
  • 如果设置了 LEETCODE_SESSION,但提供了 --session "new_cookie",则会使用命令行中的会话值。

可用工具

题目
工具GlobalCN需要身份验证描述
get_daily_challenge✅✅❌获取 LeetCode 今日每日挑战题目
get_problem✅✅❌获取指定 LeetCode 题目的详细信息
search_problems✅✅❌根据多个筛选条件搜索 LeetCode 题目
用户
工具GlobalCN需要身份验证描述
get_user_profile✅✅❌获取 LeetCode 用户的个人资料信息
get_user_contest_ranking✅✅❌获取用户的竞赛排名统计数据
get_recent_ac_submissions✅✅❌获取用户最近通过的提交记录
get_recent_submissions✅❌❌获取用户最近的提交历史
get_user_status✅✅✅获取当前用户的当前状态
get_problem_submission_report✅✅✅提供指定题目的详细提交分析
get_problem_progress✅✅✅获取当前用户的解题进度
get_all_submissions✅✅✅获取当前用户的提交历史
提交
工具GlobalCNAuth Required描述
run_code✅✅✅运行题目的代码,并轮询 /check/,直至完成
submit_solution✅✅✅提交题目的代码,并轮询 /check/,直至完成
笔记
工具GlobalCNAuth Required描述
search_notes❌✅✅根据筛选条件搜索用户笔记
get_note❌✅✅根据题目 ID 获取特定题目的笔记
create_note❌✅✅为特定题目创建新笔记
update_note❌✅✅使用新内容更新现有笔记
题目列表
工具GlobalCNAuth Required描述
list_problem_lists✅✅✅列出当前用户的题目列表(收藏夹)
get_problem_list✅✅✅获取题目列表的元数据及其中的题目
create_problem_list✅✅✅创建题目列表,可选择添加初始题目
update_problem_list✅✅✅重命名题目列表、编辑其描述或可见性
add_problems_to_list✅✅✅根据 slug 或题号将题目添加到题目列表
remove_problems_from_list✅✅✅从题目列表中移除题目
reorder_problem_list✅✅✅重新排列题目列表中的题目
题解
工具GlobalCNAuth Required描述
list_problem_solutions✅✅❌获取特定题目的社区题解列表
get_problem_solution✅✅❌获取特定题解的完整内容

工具参数

题目
  • get_daily_challenge - 获取今天的 LeetCode 每日挑战题目及其完整详情

    • 无需参数
  • get_problem - 获取特定 LeetCode 题目的详情

    • titleSlug:题目的 URL slug/标识符(字符串,必需)
  • search_problems - 根据多个筛选条件搜索 LeetCode 题目

    • category:题目类别筛选条件(字符串,可选,默认值:"all-code-essentials")
    • tags:用于筛选题目的主题标签列表(字符串数组,可选)
    • 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_submissions - 获取用户近期的通过提交记录

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

    • 无需参数
  • get_problem_submission_report - 获取特定提交的详细信息

    • id:数字型提交 ID(数字,必填)
  • get_problem_progress - 获取当前用户的解题进度

    • offset:要跳过的问题数量(数字,可选,默认值:0)
    • limit:要返回的问题数量上限(数字,可选,默认值:100)
    • questionStatus:按问题状态筛选(枚举:"ATTEMPTED"、"SOLVED",可选)
    • difficulty:按难度等级筛选(字符串数组,可选)
  • get_all_submissions - 获取用户提交记录的分页列表

    • limit:要返回的提交记录数量上限(数字,默认值:20)
    • offset:要跳过的提交记录数量(数字,默认值:0)
    • questionSlug:可选的问题标识符(字符串,可选)
    • lang:编程语言筛选条件(字符串,可选,仅限 CN)
    • status:提交状态筛选条件(枚举:"AC"、"WA",可选,仅限 CN)
    • lastKey:用于获取下一页的分页令牌(字符串,可选,仅限 CN)
提交
  • run_code - 运行特定问题的代码并等待运行完成(需要身份验证)

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

    • 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:笔记的可选新简短摘要或标题(字符串,可选)
题目列表

题目列表由其 favoriteSlug 标识,即列表 URL 中 /problem-list/ 后面的路径片段。

  • list_problem_lists - 列出当前用户的题目列表

    • includeCollected:同时返回从其他创建者处收藏的列表(布尔值,可选,默认值:false)
  • get_problem_list - 获取题目列表的元数据和一页题目

    • favoriteSlug:题目列表的 slug(字符串,必填)
    • limit:要返回的题目数量上限(数字,可选,默认值:50)
    • skip:要跳过的题目数量(数字,可选,默认值:0)
    • searchKeyword:按标题筛选题目的关键词(字符串,可选)
    • sortField:排序字段:CUSTOM(网站上显示的顺序)、FRONTEND_ID、DIFFICULTY、AC_RATE、FREQUENCY 或 CONTEST_POINT(字符串,可选,默认值:CUSTOM)
    • sortOrder:ASCENDING 或 DESCENDING(字符串,可选,默认值:ASCENDING)
  • create_problem_list - 创建新的题目列表

    • name:列表的显示名称(字符串,必填)
    • description:描述列表(字符串,可选,默认值:"")
    • isPublic:列表是否公开可见(布尔值,可选,默认值:false)
    • questionSlugs:创建后立即添加的题目 slug(字符串数组,可选)
    • questionIds:创建后立即添加的题目编号,例如 [1, 1143];无法解析的编号会在 unresolved 中返回((字符串 | 数字)[],可选)
  • update_problem_list - 重命名题目列表、更改其描述或切换其可见性(至少需要提供一个可选字段)

    • favoriteSlug:题目列表的 slug(字符串,必填)
    • name:新的显示名称(字符串,可选)
    • description:新的描述(字符串,可选)
    • isPublic:新的可见性(布尔值,可选)
  • add_problems_to_list - 向题目列表添加题目(必须提供 questionSlugs / questionIds 中的至少一个;题目将按给定顺序追加,slug 优先)

    • favoriteSlug:题目列表的 slug(字符串,必填)
    • questionSlugs:要添加的题目 slug,例如 ["two-sum"](字符串数组,可选)
    • questionIds:要添加的题目编号,例如 [1, 1143] 或 ["LCP 82"];无法解析的编号会在 unresolved 中返回((字符串 | 数字)[],可选)
  • remove_problems_from_list - 从题目列表中移除题目

    • favoriteSlug:题目列表的 slug(字符串,必填)
    • questionSlugs:要移除的题目 slug(字符串数组,必填)
  • reorder_problem_list - 调整题目列表中的题目顺序(必须且只能提供 sortField / questionSlugs 中的一个;每次请求移动一道题)

    • favoriteSlug:题目列表的 slug(字符串,必填)
    • sortField:按 FRONTEND_ID、DIFFICULTY、AC_RATE、FREQUENCY 或 CONTEST_POINT 对整个列表排序(字符串,可选)
    • sortOrder:ASCENDING 或 DESCENDING(字符串,可选,默认值:ASCENDING)
    • questionSlugs:按此顺序移至顶部的题目 slug;其余题目保持相对顺序不变(字符串数组,可选)
解决方案
  • list_problem_solutions - 获取特定题目的社区解决方案列表

    • questionSlug:题目的 URL 别名/标识符(字符串,必填)
    • limit:要返回的解决方案数量上限(数字,可选,默认值:10)
    • skip:要跳过的解决方案数量(数字,可选)
    • userInput:用于筛选解决方案的搜索词(字符串,可选)
    • tagSlugs:用于筛选解决方案的标签标识符数组(字符串[],可选,默认值:[])
    • orderBy:返回的解决方案的排序条件
      • Global:枚举:"HOT"、"MOST_RECENT"、"MOST_VOTES",可选,默认值:"HOT"
      • CN:枚举:"DEFAULT"、"MOST_UPVOTE"、"HOT"、"NEWEST_TO_OLDEST"、"OLDEST_TO_NEWEST",可选,默认值:"DEFAULT"
  • get_problem_solution - 获取特定解决方案的完整内容

    • topicId:解决方案的唯一主题 ID(字符串,必填,仅限 Global)
    • slug:解决方案的唯一别名/标识符(字符串,必填,仅限 CN)

可用资源

资源名称GlobalCN需要身份验证说明
problem-categories✅✅❌所有题目分类类别的列表
problem-tags✅✅❌算法和数据结构标签的详细集合
problem-langs✅✅❌所有受支持编程语言的完整列表
problem-detail✅✅❌提供特定题目的详情
problem-solution✅✅❌提供特定解决方案的完整内容

资源 URI

  • problem-categories - 所有题目分类类别的列表

    • URI:categories://problems/all
  • problem-tags - 算法和数据结构标签的详细集合

    • URI:tags://problems/all
  • problem-langs - LeetCode 支持的所有编程语言的完整列表

    • URI:langs://problems/all
  • problem-detail - 提供特定 LeetCode 题目的详情

    • URI:problem://{titleSlug}
    • 参数:
      • titleSlug:LeetCode URL 中显示的题目标识符
  • problem-solution - 提供特定解决方案的完整内容

    • Global URI:solution://{topicId}
      • 参数:
        • topicId:解决方案的唯一主题 ID
    • CN URI:solution://{slug}
      • 参数:
        • slug:解决方案的唯一别名/标识符

身份验证

访问用户专属数据需要通过 LeetCode 会话进行身份验证:

  1. 登录 LeetCode(Global 或 China 站点)
  2. 从浏览器开发者工具中提取 LEETCODE_SESSION Cookie
  3. 使用 --session 标志或 LEETCODE_SESSION 环境变量配置服务

响应格式

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

{
  "content": [
    {
      "type": "text",
      "text": "JSON_DATA_STRING"
    }
  ]
}

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

许可证

本项目采用 MIT 许可证。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。