
leetcode-mcp-server
An MCP server enabling automated access to LeetCode's problems, solutions, and public data with optional authentication for user-specific features, supporting leetcode.com & leetcode.cn sites.
1
Github Watches
4
Github Forks
17
Github Stars
LeetCode MCP Server
The LeetCode MCP Server is a Model Context Protocol (MCP) server that provides seamless integration with LeetCode APIs, enabling advanced automation and intelligent interaction with LeetCode's programming problems, contests, solutions, and user data.
Features
- 🌐 Multi-site Support: Support both leetcode.com (Global) and leetcode.cn (China) platforms
- 📊 Problem Data Retrieval: Obtain detailed problem descriptions, constraints, examples, official editorials, and user-submitted solutions
- 👤 User Data Access: Retrieve user profiles, submission history, and contest performance
- 🔒 Private Data Access: Create and query user notes, track problem-solving progress, and analyze submission details (AC/WA analysis)
- 🔍 Advanced Search Capabilities: Filter problems by tags, difficulty levels, categories, and keywords
- 📅 Daily Challenge Access: Easily access daily challenge problems
Prerequisites
- Node.js runtime environment
- (Optional) LeetCode session cookie for authenticated API access
Installation
Installing via Smithery
To install leetcode-mcp-server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @jinzcdev/leetcode-mcp-server --client claude
Manual Installation
# 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>
Alternatively, you can clone the repository and run it locally:
# 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
Usage
Visual Studio Code Integration
Add the following JSON configuration to your User Settings (JSON) file. Access this by pressing Ctrl/Cmd + Shift + P
and searching for Preferences: Open User Settings (JSON)
.
Option 1: Using Environment Variables
{
"mcp": {
"servers": {
"leetcode": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@jinzcdev/leetcode-mcp-server"],
"env": {
"LEETCODE_SITE": "global",
"LEETCODE_SESSION": "<YOUR_LEETCODE_SESSION_COOKIE>"
}
}
}
}
}
Option 2: Using Command Line Arguments
{
"mcp": {
"servers": {
"leetcode": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@jinzcdev/leetcode-mcp-server",
"--site",
"global",
"--session",
"<YOUR_LEETCODE_SESSION_COOKIE>"
]
}
}
}
}
For LeetCode China site, modify the --site
parameter to cn
.
[!TIP]
The server supports the following environment variables:
LEETCODE_SITE
: LeetCode API endpoint ('global' or 'cn')LEETCODE_SESSION
: LeetCode session cookie for authenticated API accessPriority Note: Command-line arguments take precedence over environment variables when both are specified. For example:
- If
LEETCODE_SITE=cn
is set but you runleetcode-mcp-server --site global
, the server will useglobal
.- If
LEETCODE_SESSION
exists but you provide--session "new_cookie"
, the command-line session value will be used.
Available Tools
Problems
Tool | Global | CN | Auth Required | Description |
---|---|---|---|---|
get_daily_challenge | ✅ | ✅ | ❌ | Retrieves today's LeetCode Daily Challenge problem |
get_problem | ✅ | ✅ | ❌ | Retrieves details for a specific LeetCode problem |
search_problems | ✅ | ✅ | ❌ | Searches for LeetCode problems with multiple filter criteria |
Users
Tool | Global | CN | Auth Required | Description |
---|---|---|---|---|
get_user_profile | ✅ | ✅ | ❌ | Retrieves profile information for a LeetCode user |
get_user_contest_ranking | ✅ | ✅ | ❌ | Obtains contest ranking statistics for a user |
get_recent_ac_submissions | ✅ | ✅ | ❌ | Retrieves a user's recent accepted submissions |
get_recent_submissions | ✅ | ❌ | ❌ | Retrieves a user's recent submissions history |
get_user_status | ✅ | ✅ | ✅ | Retrieves current user's current status |
get_problem_submission_report | ✅ | ✅ | ✅ | Provides detailed submission analysis for a specific problem |
get_problem_progress | ✅ | ✅ | ✅ | Retrieves current user's problem-solving progress |
get_all_submissions | ✅ | ✅ | ✅ | Retrieves current user's submission history |
Notes
Tool | Global | CN | Auth Required | Description |
---|---|---|---|---|
search_notes | ❌ | ✅ | ✅ | Searches for user notes with filtering options |
get_note | ❌ | ✅ | ✅ | Retrieves notes for a specific problem by question ID |
create_note | ❌ | ✅ | ✅ | Creates a new note for a specific problem |
update_note | ❌ | ✅ | ✅ | Updates an existing note with new content |
Solutions
Tool | Global | CN | Auth Required | Description |
---|---|---|---|---|
list_problem_solutions | ✅ | ✅ | ❌ | Retrieves a list of community solutions for a specific problem |
get_problem_solution | ✅ | ✅ | ❌ | Retrieves the complete content of a specific solution |
Tool Parameters
Problems
-
get_daily_challenge - Retrieves today's LeetCode Daily Challenge problem with complete details
- No parameters required
-
get_problem - Retrieves details about a specific LeetCode problem
-
titleSlug
: The URL slug/identifier of the problem (string, required)
-
-
search_problems - Searches for LeetCode problems based on multiple filter criteria
-
category
: Problem category filter (string, optional, default: "all-code-essentials") -
tags
: List of topic tags to filter problems by (string[], optional) -
difficulty
: Problem difficulty level filter (enum: "EASY", "MEDIUM", "HARD", optional) -
searchKeywords
: Keywords to search in problem titles and descriptions (string, optional) -
limit
: Maximum number of problems to return (number, optional, default: 10) -
offset
: Number of problems to skip (number, optional)
-
Users
-
get_user_profile - Retrieves profile information about a LeetCode user
-
username
: LeetCode username (string, required)
-
-
get_user_contest_ranking - Retrieves a user's contest ranking information
-
username
: LeetCode username (string, required) -
attended
: Whether to include only the contests the user has participated in (boolean, optional, default: true)
-
-
get_recent_submissions - Retrieves a user's recent submissions on LeetCode Global
-
username
: LeetCode username (string, required) -
limit
: Maximum number of submissions to return (number, optional, default: 10)
-
-
get_recent_ac_submissions - Retrieves a user's recent accepted submissions
-
username
: LeetCode username (string, required) -
limit
: Maximum number of submissions to return (number, optional, default: 10)
-
-
get_user_status - Retrieves the current user's status
- No parameters required
-
get_problem_submission_report - Retrieves detailed information about a specific submission
-
id
: The numerical submission ID (number, required)
-
-
get_problem_progress - Retrieves the current user's problem-solving progress
-
offset
: Number of questions to skip (number, optional, default: 0) -
limit
: Maximum number of questions to return (number, optional, default: 100) -
questionStatus
: Filter by question status (enum: "ATTEMPTED", "SOLVED", optional) -
difficulty
: Filter by difficulty levels (string[], optional)
-
-
get_all_submissions - Retrieves paginated list of user's submissions
-
limit
: Maximum number of submissions to return (number, default: 20) -
offset
: Number of submissions to skip (number, default: 0) -
questionSlug
: Optional problem identifier (string, optional) -
lang
: Programming language filter (string, optional, CN only) -
status
: Submission status filter (enum: "AC", "WA", optional, CN only) -
lastKey
: Pagination token for retrieving next page (string, optional, CN only)
-
Notes
-
search_notes - Searches for user notes on LeetCode China
-
keyword
: Search term to filter notes (string, optional) -
limit
: Maximum number of notes to return (number, optional, default: 10) -
skip
: Number of notes to skip (number, optional, default: 0) -
orderBy
: Sort order for returned notes (enum: "ASCENDING", "DESCENDING", optional, default: "DESCENDING")
-
-
get_note - Retrieves user notes for a specific LeetCode problem
-
questionId
: The question ID of the LeetCode problem (string, required) -
limit
: Maximum number of notes to return (number, optional, default: 10) -
skip
: Number of notes to skip (number, optional, default: 0)
-
-
create_note - Creates a new note for a specific LeetCode problem
-
questionId
: The question ID of the LeetCode problem (string, required) -
content
: The content of the note, supports markdown format (string, required) -
summary
: An optional short summary or title for the note (string, optional)
-
-
update_note - Updates an existing note with new content or summary
-
noteId
: The ID of the note to update (string, required) -
content
: The new content for the note, supports markdown format (string, required) -
summary
: An optional new short summary or title for the note (string, optional)
-
Solutions
-
list_problem_solutions - Retrieves a list of community solutions for a specific problem
-
questionSlug
: The URL slug/identifier of the problem (string, required) -
limit
: Maximum number of solutions to return (number, optional, default: 10) -
skip
: Number of solutions to skip (number, optional) -
userInput
: Search term to filter solutions (string, optional) -
tagSlugs
: Array of tag identifiers to filter solutions (string[], optional, default: []) -
orderBy
: Sorting criteria for the returned solutions- Global: enum: "HOT", "MOST_RECENT", "MOST_VOTES", optional, default: "HOT"
- CN: enum: "DEFAULT", "MOST_UPVOTE", "HOT", "NEWEST_TO_OLDEST", "OLDEST_TO_NEWEST", optional, default: "DEFAULT"
-
-
get_problem_solution - Retrieves the complete content of a specific solution
-
topicId
: Unique topic ID of the solution (string, required, Global only) -
slug
: Unique slug/identifier of the solution (string, required, CN only)
-
Available Resources
Resource Name | Global | CN | Auth Required | Description |
---|---|---|---|---|
problem-categories | ✅ | ✅ | ❌ | A list of all problem classification categories |
problem-tags | ✅ | ✅ | ❌ | A detailed collection of algorithmic and data structure tags |
problem-langs | ✅ | ✅ | ❌ | A complete list of all supported programming languages |
problem-detail | ✅ | ✅ | ❌ | Provides details about a specific problem |
problem-solution | ✅ | ✅ | ❌ | Provides the complete content of a specific solution |
Resource URIs
-
problem-categories - A list of all problem classification categories
- URI:
categories://problems/all
- URI:
-
problem-tags - A detailed collection of algorithmic and data structure tags
- URI:
tags://problems/all
- URI:
-
problem-langs - A complete list of all programming languages supported by LeetCode
- URI:
langs://problems/all
- URI:
-
problem-detail - Provides details about a specific LeetCode problem
- URI:
problem://{titleSlug}
- Parameters:
-
titleSlug
: Problem identifier as it appears in the LeetCode URL
-
- URI:
-
problem-solution - Provides the complete content of a specific solution
- Global URI:
solution://{topicId}
- Parameters:
-
topicId
: Unique topic ID of the solution
-
- Parameters:
- CN URI:
solution://{slug}
- Parameters:
-
slug
: Unique slug/identifier of the solution
-
- Parameters:
- Global URI:
Authentication
User-specific data access requires LeetCode session authentication:
- Log in to LeetCode (Global or China site)
- Extract
LEETCODE_SESSION
cookie from browser developer tools - Configure server with
--session
flag orLEETCODE_SESSION
environment variable
Response Format
All tools return JSON-formatted responses with the following structure:
{
"content": [
{
"type": "text",
"text": "JSON_DATA_STRING"
}
]
}
The JSON_DATA_STRING
contains either the requested data or an error message for failed requests.
License
This project is licensed under the MIT License.
相关推荐
Interact seamlessly with GitLab repositories to manage merge requests and issues. Fetch details, add comments, and streamline your code review process with ease.
Vibe coding should have human in the loop! interactive-mcp: Local, cross-platform MCP server for interact with your AI Agent
Simple solution to give Claude ability to check current time via MCP
MCP server that gives Claude ability to use OpenAI's GPTs assistants
A simple Model Context Protocol (MCP) server that integrates with Notion's API to manage my personal todo list.