LeetCode MCP Server
This MCP server integrates with LeetCode (Global and CN) to browse problems, view users and contests, and read community solutions over stdio or HTTP transports.
Retrieve today's Daily Challenge problem with full details (no auth).
Fetch a specific problem by
titleSlug, including description, examples, constraints, and metadata.Search problems by category, tags, difficulty, and keywords with pagination (limit/offset).
Look up any user's public profile: ranking, avatar, bio, submission stats, and progress.
Get a user's recent submissions (Global only, includes failed) or recent accepted (AC) submissions (Global + CN).
Retrieve a user's contest ranking and participation history.
List community solution articles for a problem (metadata only, returns
topicId).Fetch the full content of a specific solution article via
topicId.With a LeetCode session cookie, access private data (notes, problem lists, submission history, progress, run/submit code), plus notes are CN-only and several management tools (lists, run_code, submit_solution) require authentication.
Choose transports:
stdio(default) or Streamable HTTP (--transport http, configurable host/port/endpoint), and switch sites via--site global|cnor env vars.
Provides tools for accessing LeetCode problems, user data, search capabilities, and submission tracking across both leetcode.com and leetcode.cn platforms. Enables retrieval of detailed problem descriptions, user profiles, submission history, and contest performance statistics.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@LeetCode MCP Server get today's daily challenge problem"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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, manage problem lists, 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
Related MCP server: mcp-server-leetcode
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 |
| Standard input/output transport for local MCP clients |
| Streamable HTTP transport for web-based integrations and remote access |
Command-Line Options
Option | Alias | Default | Description |
|
|
| LeetCode API site: |
|
| — | LeetCode session cookie for authenticated requests |
|
|
| Transport mode: |
| — |
| HTTP server port (Streamable HTTP only) |
| — |
| HTTP server host (Streamable HTTP only) |
| — |
| 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.
The exact configuration file location and JSON structure may vary by MCP client. Some clients use an mcp.servers wrapper or a type field — 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>Some MCP clients use"type": "http" or "type": "streamableHttp" alongside the url field. Refer to your client's documentation for the exact HTTP transport configuration format.
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 |
submit_solution | ✅ | ✅ | ✅ | Submits code for a problem and polls |
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 |
Problem Lists
Tool | Global | CN | Auth Required | Description |
list_problem_lists | ✅ | ✅ | ✅ | Lists the current user's problem lists (favorites) |
get_problem_list | ✅ | ✅ | ✅ | Retrieves a problem list's metadata and its questions |
create_problem_list | ✅ | ✅ | ✅ | Creates a new problem list, optionally with initial problems |
update_problem_list | ✅ | ✅ | ✅ | Renames a problem list, edits its description or visibility |
add_problems_to_list | ✅ | ✅ | ✅ | Adds problems to a problem list by slug or problem number |
remove_problems_from_list | ✅ | ✅ | ✅ | Removes problems from a problem list |
reorder_problem_list | ✅ | ✅ | ✅ | Reorders the problems inside a problem list |
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)
Submissions
run_code - Runs code for a specific problem and waits until finished (requires authentication)
titleSlug: The URL slug/identifier of the problem (string, required)lang: Programming language (string enum, required)typedCode: Source code to run (string, required)dataInput: Custom input to run (string, optional)timeoutMs: Polling timeout in milliseconds (number, optional, default: 120000)pollIntervalMs: Polling interval in milliseconds (number, optional, default: 1500)
submit_solution - Submits code for a specific problem and waits until finished (requires authentication)
titleSlug: The URL slug/identifier of the problem (string, required)lang: Programming language (string enum, required)typedCode: Source code to submit (string, required)timeoutMs: Polling timeout in milliseconds (number, optional, default: 120000)pollIntervalMs: Polling interval in milliseconds (number, optional, default: 1500)
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)
Problem Lists
Problem lists are identified by their favoriteSlug, the path segment after /problem-list/ in the list URL.
list_problem_lists - Lists the current user's problem lists
includeCollected: Also return lists saved from other creators (boolean, optional, default: false)
get_problem_list - Retrieves a problem list's metadata and a page of its questions
favoriteSlug: The slug of the problem list (string, required)limit: Maximum number of questions to return (number, optional, default: 50)skip: Number of questions to skip (number, optional, default: 0)searchKeyword: Keyword to filter questions by title (string, optional)sortField: Sort field:CUSTOM(the order shown on the website),FRONTEND_ID,DIFFICULTY,AC_RATE,FREQUENCYorCONTEST_POINT(string, optional, default:CUSTOM)sortOrder:ASCENDINGorDESCENDING(string, optional, default:ASCENDING)
create_problem_list - Creates a new problem list
name: Display name of the list (string, required)description: Description of the list (string, optional, default: "")isPublic: Whether the list is publicly visible (boolean, optional, default: false)questionSlugs: Problem slugs to add right after creation (string[], optional)questionIds: Problem numbers to add right after creation, e.g.[1, 1143]; numbers that cannot be resolved are returned inunresolved((string | number)[], optional)
update_problem_list - Renames a problem list, changes its description or toggles its visibility (at least one optional field is required)
favoriteSlug: The slug of the problem list (string, required)name: New display name (string, optional)description: New description (string, optional)isPublic: New visibility (boolean, optional)
add_problems_to_list - Adds problems to a problem list (at least one of
questionSlugs/questionIdsis required; problems are appended in the given order, slugs first)favoriteSlug: The slug of the problem list (string, required)questionSlugs: Problem slugs to add, e.g.["two-sum"](string[], optional)questionIds: Problem numbers to add, e.g.[1, 1143]or["LCP 82"]; numbers that cannot be resolved are returned inunresolved((string | number)[], optional)
remove_problems_from_list - Removes problems from a problem list
favoriteSlug: The slug of the problem list (string, required)questionSlugs: Problem slugs to remove (string[], required)
reorder_problem_list - Reorders the problems inside a problem list (exactly one of
sortField/questionSlugsis required; one problem is moved per request)favoriteSlug: The slug of the problem list (string, required)sortField: Sort the whole list byFRONTEND_ID,DIFFICULTY,AC_RATE,FREQUENCYorCONTEST_POINT(string, optional)sortOrder:ASCENDINGorDESCENDING(string, optional, default:ASCENDING)questionSlugs: Problem slugs to move to the top, in this order; the remaining problems keep their relative order (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 solutionsGlobal: 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
problem-tags - A detailed collection of algorithmic and data structure tags
URI:
tags://problems/all
problem-langs - A complete list of all programming languages supported by LeetCode
URI:
langs://problems/all
problem-detail - Provides details about a specific LeetCode problem
URI:
problem://{titleSlug}Parameters:
titleSlug: Problem identifier as it appears in the LeetCode URL
problem-solution - Provides the complete content of a specific solution
Global URI:
solution://{topicId}Parameters:
topicId: Unique topic ID of the solution
CN URI:
solution://{slug}Parameters:
slug: Unique slug/identifier of the solution
Authentication
User-specific data access requires LeetCode session authentication:
Extract
LEETCODE_SESSIONcookie from browser developer toolsConfigure server with
--sessionflag orLEETCODE_SESSIONenvironment 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.
Available Tools
9 toolsget_daily_challengeA
Retrieves today's Daily Challenge problem with full description (read-only, no auth). Returns problem details for the current date as JSON. Use get_problem when you know a specific titleSlug; use search_problems to discover problems by filters.
Inputs: no named parameters.
get_problemA
Retrieves a single LeetCode problem by titleSlug (read-only, no auth). Returns description, examples, constraints, and metadata as JSON. Use search_problems to find problems by keyword/tag/difficulty; use get_daily_challenge for today's featured problem.
Inputs: titleSlug (required).
get_problem_solutionA
Retrieves full content of a community solution article (read-only, no auth). Requires topicId from list_problem_solutions. Returns article text, author, and metadata as JSON. Use list_problem_solutions first to discover solutions and obtain topicId.
Inputs: topicId (required).
get_recent_ac_submissionsA
Retrieves a user's recent accepted (AC) submissions (read-only, no auth). Available on both Global and CN. Use get_recent_submissions (Global only) to include failed attempts, or get_all_submissions (auth, current user) for full paginated history.
Inputs: username (required), limit.
get_recent_submissionsA
Retrieves a user's recent submission history on LeetCode Global (read-only, no auth). Includes both accepted and failed submissions. Global only—not available on CN. Use get_recent_ac_submissions for accepted-only results, or get_all_submissions (auth, current user) for paginated full history with filters.
Inputs: username (required), limit.
get_user_contest_rankingA
Retrieves a user's contest ranking and participation history (read-only, no auth). Returns overall rating, ranking, and per-contest performance as JSON. Use get_user_profile for general stats and ranking; use this specifically for contest performance data.
Inputs: username (required), attended.
get_user_profileA
Retrieves any user's public profile by username (read-only, no auth). Returns ranking, avatar, bio, submission stats, and platform-specific progress. Use this to look up other users or public stats. Use get_user_status (requires auth) instead to verify the current session user's login state—not for looking up arbitrary users.
Inputs: username (required).
list_problem_solutionsA
Lists community solution articles for a problem (read-only, no auth). Returns metadata only (topicId)—not full content. Use get_problem_solution with the returned topicId to read the full article. Do not call this when you already have a topicId and need the solution text.
Inputs: questionSlug (required), skip, limit, orderBy, +2 more.
search_problemsA
Searches LeetCode problems by category, tags, difficulty, and keywords (read-only, no auth). Supports pagination via limit/offset. Returns matching problem list as JSON. Use get_problem when you already know the titleSlug; use this to browse or discover problems.
Inputs: tags, limit, offset, category, +2 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 9 tools
Most tools target clearly distinct resources, and descriptions actively cross-reference alternatives (e.g. search_problems vs get_problem, get_problem vs get_daily_challenge). The only real overlap is get_recent_submissions vs get_recent_ac_submissions, which differ narrowly (failed attempts, Global-only), though the descriptions do disambiguate them.
Every tool follows a consistent snake_case verb_noun pattern (get_, search_, list_). No mixing of conventions, and names map cleanly to their actions and resources.
Nine tools is well-scoped for a read-only LeetCode data client, with each tool covering a distinct resource. No filler or redundant tools bloat the surface.
The read-only domain is mostly covered (problems, solutions, users, submissions, contest ranking), but descriptions reference tools that do not exist in the set—get_user_status and get_all_submissions—creating dead ends. There is also no submission/write capability, so any workflow requiring those referenced operations will fail.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
A Model Context Protocol server for Wix AI tools
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
Model Context Protocol server for Studex tools, notifications, and profile integrations
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceServer that enhances the capabilities of the Cline coding agent. It provides intelligent code suggestions, reduces hallucinations, and documents the knowledge base by leveraging your project's documentation and detecting the technologies used in your codebase.14MIT
- AlicenseCqualityDmaintenanceA Model Context Protocol (MCP) server for LeetCode that enables AI assistants to access LeetCode problems, user information, and contest data.732 npm44MIT
- FlicenseAqualityDmaintenanceAn MCP server that provides tools to interact with the LeetCode API, enabling problem fetching, code template generation, and solution execution/submission.71-
- AlicenseNot gradedqualityDmaintenanceA feature-rich LeetCode MCP server that enables problem search, user data retrieval, code execution, and notes management for both leetcode.com and leetcode.cn.MIT