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
- π Dual Transport Modes: Run as a stdio process (default) or as a Streamable HTTP server for web-based integrations
- π 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 (v20.x or above)
- (Optional) LeetCode session cookie for authenticated API access
Installation
# 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 globalAlternatively, 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 (stdio transport)
node build/index.js --site global
# Or run as a Streamable HTTP server
node build/index.js --transport http --port 3000 --site globalUsage
The server supports two transport modes:
| Transport | Description |
|---|---|
stdio (default) | Standard input/output transport for local MCP clients |
http | Streamable HTTP transport for web-based integrations and remote access |
Command-Line Options
| Option | Alias | Default | Description |
|---|---|---|---|
--site | -s | global | LeetCode API site: global (leetcode.com) or cn (leetcode.cn) |
--session | -c | β | LeetCode session cookie for authenticated requests |
--transport | -t | stdio | Transport mode: stdio or http |
--port | β | 3000 | HTTP server port (Streamable HTTP only) |
--host | β | 127.0.0.1 | HTTP server host (Streamable HTTP only) |
--endpoint | β | /mcp | HTTP endpoint path (Streamable HTTP only) |
MCP Client Configuration (stdio)
Add the following server entry to your MCP client configuration file:
Option 1: Using Environment Variables
{
"mcpServers": {
"leetcode": {
"command": "npx",
"args": ["-y", "@jinzcdev/leetcode-mcp-server"],
"env": {
"LEETCODE_SITE": "global",
"LEETCODE_SESSION": "<YOUR_LEETCODE_SESSION_COOKIE>"
}
}
}
}Option 2: Using Command Line Arguments
{
"mcpServers": {
"leetcode": {
"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.
[!NOTE]
The exact configuration file location and JSON structure may vary by MCP client. Some clients use an
mcp.serverswrapper or atypefield β refer to your client's documentation and adapt the example accordingly.
MCP Client Configuration (Streamable HTTP)
First, start the server in HTTP mode:
npx -y @jinzcdev/leetcode-mcp-server --transport http --port 3000 --site globalThen connect your MCP client to the running server:
{
"mcpServers": {
"leetcode": {
"type": "http",
"url": "http://127.0.0.1:3000/mcp"
}
}
}To use authenticated endpoints, pass the session cookie when starting the server:
npx -y @jinzcdev/leetcode-mcp-server --transport http --port 3000 --site global --session <YOUR_LEETCODE_SESSION_COOKIE>[!NOTE] Some MCP clients use
"type": "http"or"type": "streamableHttp"alongside theurlfield. Refer to your client's documentation for the exact HTTP transport configuration format.
[!TIP]
The server supports the following optional environment variables:
LEETCODE_SITE: LeetCode API endpoint (globalorcn, default:global)LEETCODE_SESSION: LeetCode session cookie for authenticated API access (default: empty)LEETCODE_TRANSPORT: Transport mode (stdioorhttp, default:stdio)LEETCODE_HTTP_PORT: HTTP server port when using Streamable HTTP (default:3000)LEETCODE_HTTP_HOST: HTTP server host when using Streamable HTTP (default:127.0.0.1)LEETCODE_HTTP_ENDPOINT: HTTP endpoint path when using Streamable HTTP (default:/mcp)Priority Note: Command-line arguments take precedence over environment variables when both are specified. For example:
- If
LEETCODE_SITE=cnis set but you runleetcode-mcp-server --site global, the server will useglobal.- If
LEETCODE_SESSIONexists 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 |
Submissions
| Tool | Global | CN | Auth Required | Description |
|---|---|---|---|---|
| run_code | β | β | β | Runs code for a problem and polls /check/ until finished |
| submit_solution | β | β | β | Submits code for a problem and polls /check/ until finished |
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 i
β¦