Skip to main content
Glama

LeetCode MCP Server

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

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: LeetCode MCP Server

Prerequisites

  1. Node.js (v20.x or above)

  2. (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.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 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 the url field. 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 (global or cn, default: global)

  • LEETCODE_SESSION: LeetCode session cookie for authenticated API access (default: empty)

  • LEETCODE_TRANSPORT: Transport mode (stdio or http, 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=cn is set but you run leetcode-mcp-server --site global, the server will use global.

  • 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

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

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, FREQUENCY or CONTEST_POINT (string, optional, default: CUSTOM)

    • sortOrder: ASCENDING or DESCENDING (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 in unresolved ((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 / questionIds is 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 in unresolved ((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 / questionSlugs is required; one problem is

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    Related MCP Connectors

    • AniList MCP server for ChatGPT, Claude and any AI agent: update list entry, rate anime or manga, list your anime list, read notifications, reply to activity and favourite a title in your own AniList account. Cotlet works in the account through your Cloud Browser, a real Chrome where you sign in to AniList yourself; Cotlet does not store your password and you need no AniList API key. About the official AniList API: AniList has a full, free public GraphQL API but no official MCP server (checked 17 Oct 2026). The API covers searching titles, reading and saving list entries, activity, favourites, follows and the forum. Setup and FAQ: https://cotlet.dev/integrations/anilist-api-mcp-server

      https://cotlet.dev/mcp/v1/anilist
    • Overleaf MCP server for ChatGPT, Claude and any AI agent: list projects, read file, edit file, compile project, add comment, reply to comment, accept tracked change and invite collaborator in your own Overleaf account. Cotlet works in the account through your Cloud Browser, a real Chrome where you sign in to Overleaf yourself; Cotlet does not store your password and you need no Overleaf API key. About the official Overleaf API: Overleaf has no public API to read or change existing projects (checked 5 Nov 2026). Its only API, Open in Overleaf, sends LaTeX in one direction to create a new project. Setup and FAQ: https://cotlet.dev/integrations/overleaf-api-mcp-server

    • Clio MCP server for ChatGPT, Claude and any AI agent: search matters, log time entry, create task, add matter note, create calendar entry and list bills in your own Clio account. Cotlet works in the account through your Cloud Browser, a real Chrome where you sign in to Clio yourself; Cotlet does not store your password and you need no Clio API key. About the official Clio API: Yes. Clio has a REST API, the Clio Manage API v4, with OAuth 2.0 (checked 6 Nov 2026). Setup and FAQ: https://cotlet.dev/integrations/clio-api-mcp-server

      https://cotlet.dev/mcp/v1/clio
    • Hacker News MCP server for ChatGPT, Claude and any AI agent: list upvoted items, list hidden items, list favorites, list my comment threads, get an item with its comments, favorite an item and hide an item in your own Hacker News account. Cotlet works in the account through your Cloud Browser, a real Chrome where you sign in to Hacker News yourself; Cotlet does not store your password and you need no Hacker News API key. About the official Hacker News API: Hacker News has an official API, but it is read-only and public (checked 28 Oct 2026). It returns items, users and the story lists. Setup and FAQ: https://cotlet.dev/integrations/hacker-news-api-mcp-server

    Related MCP Servers

    • F
      license
      Not graded
      quality
      A
      maintenance
      Enables automated access to LeetCode problems, solutions, contests, and public user data across leetcode.com and leetcode.cn, with optional authentication for private features like notes, progress, submissions, and code execution.
      -
    • F
      license
      Not graded
      quality
      A
      maintenance
      Enables automated access to LeetCode problems, contests, solutions, and user data across leetcode.com and leetcode.cn, with optional authentication for private features like notes, progress, and submissions. Supports retrieval, search, daily challenges, code execution, and submission workflows.
      -