Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
MCP server for LeetCode problems and user data
This server exposes LeetCode data and actions through MCP tools and resources. Builders can fetch problem statements, search by tags and difficulty, view solutions, inspect user progress, and, with a session cookie, run or submit code and manage notes. It can run over stdio or as a Streamable HTTP server.
Builders who want their agent to query LeetCode, inspect solutions, and use submission data from one MCP server.
You can pull LeetCode problems, solutions, and user progress into your agent workflow without switching sites by hand.
What it does
Multi-site support
Works with both leetcode.com and leetcode.cn.
Dual transport modes
Runs as a local stdio process or as a Streamable HTTP server.
Problem access
Retrieves problem details, daily challenges, and search results by tags, difficulty, and keywords.
User data access
Fetches user profiles, contest rankings, submission history, and problem progress.
Authenticated actions
Uses a LeetCode session cookie to access private data, run code, submit solutions, and manage notes.
Solutions and resources
Lists community solutions and exposes MCP resources for categories, tags, languages, problem details, and solutions.
How to get it
- 1First, start the server in HTTP mode
npx -y @jinzcdev/leetcode-mcp-server --transport http --port 3000 --site global
- 2To 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>
README
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 global
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 (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
Usage
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 global
Then 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 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)
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_SESSIONcookie from browser developer tools - Configure 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.
Files in the repo
- .github
- .husky
- .vscode
- src
- tests
- .gitignore
- CHANGELOG.md
- Dockerfile
- eslint.config.js
- LICENSE
- package-lock.json
- package.json
- prettier.config.js
- README_zh-CN.md
- README.md
- tsconfig.json
- vitest.config.ts
Discussion (0)
Ask about usage, or say what you built with itSign in to join the discussion.
No comments yet. Be the first to say what this is good for.
More connectors
High-performance code intelligence MCP server. Indexes codebases into a persistent knowledge graph β average repo in milliseconds. 158 languages, sub-ms queries, 99% fewer tokens. Single static binary, zero dependencies.

Universal provider proxy for OpenAI Codex & Claude Code β use any LLM (Claude, Gemini, Grok, DeepSeek, Ollamaβ¦) with Codex CLI, App, SDK, and Claude Code
Git-native persistent memory for AI coding agents. Implements Google OKF v0.2 with sub-300Β΅s in-memory BM25 search, embedded MCP server, and progressive disclosure. Slashes token bloat by 80% with zero external databases or dependencies. Built in pure Go.
Local-first code intelligence graph for MCP and CLI. Builds a persistent map of your codebase so AI coding tools read only what matters, with benchmarked context reductions on reviews and large-repo workflows.
Stop your AI from making things up β it proposes, deterministic tools decide, every claim checked against ground truth with evidence. Grounded facts and context survive resets. Reverse engineering is the proving ground. MCP server + CLI.