LeetCode MCP Server について
LeetCode MCP Serverは、アルゴリズム演習や進捗管理向けに、LeetCodeの問題、コンテスト、解答、ユーザーデータをMCPクライアントに提供します。leetcode.comとleetcode.cnに対応し、セッション情報で個人向け機能も利用できます。
主な機能
- 01問題の詳細とデイリーチャレンジ取得
- 02タグ・難易度・キーワードで検索
- 03ユーザープロフィールとコンテスト情報の取得
- 04提出の分析とリスト・ノートの管理
- 05コードの実行と提出
活用シーン
- 01テーマや難易度で練習問題を探す
- 02デイリーチャレンジと公式解説を確認する
- 03解答の進捗や提出履歴を追跡する
- 04コードを提出して実行結果を確認する
MCP 対応
MCPサーバーとしてstdioまたはStreamable HTTPでMCPクライアントに接続し、問題、ユーザー、提出、ノート、問題リストのツールを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
LeetCode MCP サーバー
LeetCode MCP サーバーは、Model Context Protocol (MCP) サーバーです。LeetCode API とシームレスに連携し、LeetCode のプログラミング問題、コンテスト、解答、ユーザーデータに対する高度な自動化とインテリジェントな操作を可能にします。
特長
- 🌐 複数サイトのサポート:leetcode.com(Global)と leetcode.cn(China)の両方のプラットフォームに対応
- 🔌 2 種類のトランスポートモード:stdio プロセス(デフォルト)として実行するか、Web ベースの統合向けの Streamable HTTP サーバーとして実行できます
- 📊 問題データの取得:問題の詳細な説明、制約条件、例、公式解説、ユーザー投稿の解答を取得できます
- 👤 ユーザーデータへのアクセス:ユーザープロフィール、提出履歴、コンテストの成績を取得できます
- 🔒 非公開データへのアクセス:ユーザーノートの作成と検索、問題リストの管理、問題解決の進捗状況の追跡、提出内容の詳細分析(AC/WA 分析)ができます
- 🔍 高度な検索機能:タグ、難易度、カテゴリ、キーワードで問題を絞り込めます
- 📅 デイリーチャレンジへのアクセス:デイリーチャレンジの問題に簡単にアクセスできます
前提条件
- Node.js(v20.x 以上)
- (任意)認証済み API アクセス用の LeetCode セッション Cookie
インストール
# 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
または、リポジトリをクローンしてローカルで実行できます。
# 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
使い方
サーバーは 2 種類のトランスポートモードに対応しています。
| トランスポート | 説明 |
|---|---|
stdio(デフォルト) | ローカル MCP クライアント向けの標準入出力トランスポート |
http | Web ベースの統合とリモートアクセス向けの Streamable HTTP トランスポート |
コマンドラインオプション
| オプション | 別名 | デフォルト | 説明 |
|---|---|---|---|
--site | -s | global | LeetCode API のサイト:global(leetcode.com)または cn(leetcode.cn) |
--session | -c | — | 認証済みリクエスト用の LeetCode セッション Cookie |
--transport | -t | stdio | トランスポートモード:stdio または http |
--port | — | 3000 | HTTP サーバーのポート(Streamable HTTP のみ) |
--host | — | 127.0.0.1 | HTTP サーバーのホスト(Streamable HTTP のみ) |
--endpoint | — | /mcp | HTTP エンドポイントのパス(Streamable HTTP のみ) |
MCP クライアントの設定(stdio)
以下のサーバーエントリーを MCP クライアントの設定ファイルに追加します。
オプション 1:環境変数を使用
{
"mcpServers": {
"leetcode": {
"command": "npx",
"args": ["-y", "@jinzcdev/leetcode-mcp-server"],
"env": {
"LEETCODE_SITE": "global",
"LEETCODE_SESSION": "<YOUR_LEETCODE_SESSION_COOKIE>"
}
}
}
}
オプション 2:コマンドライン引数の使用
{
"mcpServers": {
"leetcode": {
"command": "npx",
"args": [
"-y",
"@jinzcdev/leetcode-mcp-server",
"--site",
"global",
"--session",
"<YOUR_LEETCODE_SESSION_COOKIE>"
]
}
}
}
LeetCode 中国サイトの場合は、--site パラメーターを cn に変更してください。
メモ
正確な設定ファイルの場所と JSON 構造は、MCP クライアントによって異なる場合があります。
mcp.serversラッパーやtypeフィールドを使用するクライアントもあります。クライアントのドキュメントを参照し、例を適宜調整してください。
MCP クライアントの設定(ストリーミング可能な HTTP)
まず、サーバーを HTTP モードで起動します。
npx -y @jinzcdev/leetcode-mcp-server --transport http --port 3000 --site global
次に、実行中のサーバーに MCP クライアントを接続します。
{
"mcpServers": {
"leetcode": {
"type": "http",
"url": "http://127.0.0.1:3000/mcp"
}
}
}
認証が必要なエンドポイントを使用するには、サーバーの起動時にセッション Cookie を渡します。
npx -y @jinzcdev/leetcode-mcp-server --transport http --port 3000 --site global --session <YOUR_LEETCODE_SESSION_COOKIE>
メモ
MCP クライアントによっては、
urlフィールドとともに"type": "http"または"type": "streamableHttp"を使用します。HTTP トランスポートの正確な設定形式については、クライアントのドキュメントを参照してください。
ヒント
サーバーでは、次のオプションの環境変数をサポートしています。
LEETCODE_SITE:LeetCode API エンドポイント(globalまたはcn、デフォルト:global)LEETCODE_SESSION:認証済み API アクセス用の LeetCode セッション Cookie(デフォルト:空)LEETCODE_TRANSPORT:トランスポートモード(stdioまたはhttp、デフォルト:stdio)LEETCODE_HTTP_PORT:ストリーミング可能な HTTP の使用時における HTTP サーバーのポート(デフォルト:3000)LEETCODE_HTTP_HOST:ストリーミング可能な HTTP の使用時における HTTP サーバーのホスト(デフォルト:127.0.0.1)LEETCODE_HTTP_ENDPOINT:ストリーミング可能な HTTP の使用時における HTTP エンドポイントのパス(デフォルト:/mcp)優先順位に関する注意: コマンドライン引数と環境変数の両方が指定されている場合、コマンドライン引数が優先されます。たとえば、次のとおりです。
LEETCODE_SITE=cnが設定されていても、leetcode-mcp-server --site globalを実行すると、サーバーはglobalを使用します。LEETCODE_SESSIONが設定されていても、--session "new_cookie"を指定すると、コマンドラインのセッション値が使用されます。
利用可能なツール
問題
| ツール | Global | CN | 認証が必要 | 説明 |
|---|---|---|---|---|
| get_daily_challenge | ✅ | ✅ | ❌ | 本日の LeetCode デイリーチャレンジの問題を取得します |
| get_problem | ✅ | ✅ | ❌ | 指定した LeetCode 問題の詳細を取得します |
| search_problems | ✅ | ✅ | ❌ | 複数のフィルター条件を指定して LeetCode の問題を検索します |
ユーザー
| ツール | Global | CN | 認証が必要 | 説明 |
|---|---|---|---|---|
| get_user_profile | ✅ | ✅ | ❌ | LeetCode ユーザーのプロフィール情報を取得します |
| get_user_contest_ranking | ✅ | ✅ | ❌ | ユーザーのコンテストランキング統計を取得します |
| get_recent_ac_submissions | ✅ | ✅ | ❌ | ユーザーの最近の正解済み提出を取得します |
| get_recent_submissions | ✅ | ❌ | ❌ | ユーザーの最近の提出履歴を取得します |
| get_user_status | ✅ | ✅ | ✅ | 現在のユーザーのステータスを取得します |
| get_problem_submission_report | ✅ | ✅ | ✅ | 指定した問題の詳細な提出分析を提供します |
| get_problem_progress | ✅ | ✅ | ✅ | 現在のユーザーの問題解決の進捗状況を取得します |
| get_all_submissions | ✅ | ✅ | ✅ | 現在のユーザーの提出履歴を取得します |
提出
| ツール | グローバル | 中国 | 認証必須 | 説明 |
|---|---|---|---|---|
| run_code | ✅ | ✅ | ✅ | 問題のコードを実行し、完了するまで /check/ をポーリングします |
| submit_solution | ✅ | ✅ | ✅ | 問題のコードを提出し、完了するまで /check/ をポーリングします |
ノート
| ツール | グローバル | 中国 | 認証必須 | 説明 |
|---|---|---|---|---|
| search_notes | ❌ | ✅ | ✅ | 絞り込みオプションを使ってユーザーノートを検索します |
| get_note | ❌ | ✅ | ✅ | 問題 ID を指定して、その問題のノートを取得します |
| create_note | ❌ | ✅ | ✅ | 特定の問題の新しいノートを作成します |
| update_note | ❌ | ✅ | ✅ | 既存のノートの内容を更新します |
問題リスト
| ツール | グローバル | 中国 | 認証必須 | 説明 |
|---|---|---|---|---|
| list_problem_lists | ✅ | ✅ | ✅ | 現在のユーザーの問題リスト(お気に入り)を一覧表示します |
| get_problem_list | ✅ | ✅ | ✅ | 問題リストのメタデータと問題を取得します |
| create_problem_list | ✅ | ✅ | ✅ | 問題リストを新規作成します。初期問題を指定することもできます |
| update_problem_list | ✅ | ✅ | ✅ | 問題リストの名前、説明、公開設定を編集します |
| add_problems_to_list | ✅ | ✅ | ✅ | スラッグまたは問題番号を指定して、問題を問題リストに追加します |
| remove_problems_from_list | ✅ | ✅ | ✅ | 問題リストから問題を削除します |
| reorder_problem_list | ✅ | ✅ | ✅ | 問題リスト内の問題の順序を変更します |
解答
| ツール | グローバル | 中国 | 認証必須 | 説明 |
|---|---|---|---|---|
| list_problem_solutions | ✅ | ✅ | ❌ | 特定の問題に対するコミュニティの解答一覧を取得します |
| get_problem_solution | ✅ | ✅ | ❌ | 特定の解答の全文を取得します |
ツールのパラメーター
問題
-
get_daily_challenge - 今日の LeetCode デイリーチャレンジの問題の詳細を取得します
- パラメーターは不要です
-
get_problem - 特定の LeetCode 問題の詳細を取得します
titleSlug: 問題の URL スラッグ/識別子(文字列、必須)
-
search_problems - 複数の絞り込み条件に基づいて LeetCode の問題を検索します
category: 問題カテゴリの絞り込み条件(文字列、省略可能、デフォルト: "all-code-essentials")tags: 問題を絞り込むトピックタグのリスト(文字列[]、省略可能)difficulty: 問題の難易度の絞り込み条件(列挙型: "EASY"、"MEDIUM"、"HARD"、省略可能)searchKeywords: 問題のタイトルと説明を検索するキーワード(文字列、省略可能)limit: 返す問題の最大数(数値、省略可能、デフォルト: 10)offset: スキップする問題の数(数値、省略可能)
ユーザー
-
get_user_profile - LeetCode ユーザーのプロフィール情報を取得します
username: LeetCode のユーザー名(文字列、必須)
-
get_user_contest_ranking - ユーザーのコンテストランキング情報を取得します
username: LeetCode のユーザー名(文字列、必須)attended: ユーザーが参加したコンテストのみを含めるかどうか(ブール値、任意、デフォルト:true)
-
get_recent_submissions - LeetCode Global でのユーザーの最近の提出を取得します
username: LeetCode のユーザー名(文字列、必須)limit: 返す提出の最大数(数値、任意、デフォルト:10)
-
get_recent_ac_submissions - ユーザーの最近の正解提出を取得します
username: LeetCode のユーザー名(文字列、必須)limit: 返す提出の最大数(数値、任意、デフォルト:10)
-
get_user_status - 現在のユーザーのステータスを取得します
- パラメーターは不要です
-
get_problem_submission_report - 特定の提出に関する詳細情報を取得します
id: 数値の提出 ID(数値、必須)
-
get_problem_progress - 現在のユーザーの問題解決の進捗状況を取得します
offset: スキップする問題数(数値、任意、デフォルト:0)limit: 返す問題の最大数(数値、任意、デフォルト:100)questionStatus: 問題のステータスで絞り込みます(列挙型:"ATTEMPTED"、"SOLVED"、任意)difficulty: 難易度で絞り込みます(文字列[]、任意)
-
get_all_submissions - ユーザーの提出一覧をページ分割して取得します
limit: 返す提出の最大数(数値、デフォルト:20)offset: スキップする提出数(数値、デフォルト:0)questionSlug: 問題識別子(任意、文字列)lang: プログラミング言語で絞り込みます(文字列、任意、中国語版のみ)status: 提出ステータスで絞り込みます(列挙型:"AC"、"WA"、任意、中国語版のみ)lastKey: 次のページを取得するためのページネーショントークン(文字列、任意、中国語版のみ)
提出
-
run_code - 特定の問題のコードを実行し、完了するまで待機します(認証が必要です)
titleSlug: 問題の URL スラッグ/識別子(文字列、必須)lang: プログラミング言語(列挙型の文字列、必須)typedCode: 実行するソースコード(文字列、必須)dataInput: 実行するカスタム入力(文字列、任意)timeoutMs: ポーリングのタイムアウト時間(ミリ秒)(数値、任意、デフォルト:120000)pollIntervalMs: ポーリング間隔(ミリ秒)(数値、任意、デフォルト:1500)
-
submit_solution - 特定の問題のコードを提出し、完了するまで待機します(認証が必要です)
titleSlug: 問題の URL スラッグ/識別子(文字列、必須)lang: プログラミング言語(列挙型の文字列、必須)typedCode: 提出するソースコード(文字列、必須)timeoutMs: ポーリングのタイムアウト時間(ミリ秒)(数値、任意、デフォルト:120000)pollIntervalMs: ポーリング間隔(ミリ秒)(数値、任意、デフォルト:1500)
メモ
-
search_notes - LeetCode China のユーザーメモを検索します
keyword: メモを絞り込む検索語(string、任意)limit: 返すメモの最大数(number、任意、デフォルト: 10)skip: スキップするメモの数(number、任意、デフォルト: 0)orderBy: 返すメモの並び順(enum: "ASCENDING", "DESCENDING"、任意、デフォルト: "DESCENDING")
-
get_note - 特定の LeetCode 問題に関するユーザーメモを取得します
questionId: LeetCode 問題の問題 ID(string、必須)limit: 返すメモの最大数(number、任意、デフォルト: 10)skip: スキップするメモの数(number、任意、デフォルト: 0)
-
create_note - 特定の LeetCode 問題に新しいメモを作成します
questionId: LeetCode 問題の問題 ID(string、必須)content: メモの内容。Markdown 形式に対応しています(string、必須)summary: メモの短い要約またはタイトル(任意)
-
update_note - 既存のメモの内容または要約を更新します
noteId: 更新するメモの ID(string、必須)content: メモの新しい内容。Markdown 形式に対応しています(string、必須)summary: 新しい短い要約またはタイトル(任意)
問題リスト
問題リストは、リストの URL に含まれる /problem-list/ の後のパスセグメントである favoriteSlug で識別されます。
-
list_problem_lists - 現在のユーザーの問題リストを一覧表示します
includeCollected: 他の作成者から保存したリストも返します(boolean、任意、デフォルト: false)
-
get_problem_list - 問題リストのメタデータと、問題のページを取得します
favoriteSlug: 問題リストのスラッグ(string、必須)limit: 返す問題の最大数(number、任意、デフォルト: 50)skip: スキップする問題の数(number、任意、デフォルト: 0)searchKeyword: タイトルで問題を絞り込むキーワード(string、任意)sortField: 並べ替えフィールド:CUSTOM(ウェブサイトに表示されている順序)、FRONTEND_ID、DIFFICULTY、AC_RATE、FREQUENCY、CONTEST_POINT(string、任意、デフォルト:CUSTOM)sortOrder:ASCENDINGまたはDESCENDING(string、任意、デフォルト:ASCENDING)
-
create_problem_list - 新しい問題リストを作成します
name: リストの表示名(string、必須)description: 説明(string、任意、デフォルト: "")isPublic: リストを公開表示するかどうか(boolean、任意、デフォルト: false)questionSlugs: 作成直後に追加する問題のスラッグ(string[]、任意)questionIds: 作成直後に追加する問題番号(例:[1, 1143])。解決できない番号はunresolvedに返されます((string | number)[]、任意)
-
update_problem_list - 問題リストの名前を変更するか、説明を変更するか、公開設定を切り替えます(少なくとも1つの任意フィールドが必要です)
favoriteSlug: 問題リストのスラッグ(string、必須)name: 新しい表示名(string、任意)description: 新しい説明(string、任意)isPublic: 新しい公開設定(boolean、任意)
-
add_problems_to_list - 問題リストに問題を追加します(
questionSlugs/questionIdsの少なくとも一方が必要です。問題は指定された順序で追加され、スラッグが先になります)favoriteSlug: 問題リストのスラッグ(string、必須)questionSlugs: 追加する問題のスラッグ(例:["two-sum"])(string[]、任意)questionIds: 追加する問題番号(例:[1, 1143]または["LCP 82"])。解決できない番号はunresolvedに返されます((string | number)[]、任意)
-
remove_problems_from_list - 問題リストから問題を削除します
favoriteSlug: 問題リストのスラッグ(string、必須)questionSlugs: 削除する問題のスラッグ(string[]、必須)
-
reorder_problem_list - 問題リスト内の問題を並べ替えます(
sortField/questionSlugsのいずれか一方が必須です。リクエストごとに1つの問題を移動します)favoriteSlug: 問題リストのスラッグ(string、必須)sortField: リスト全体をFRONTEND_ID、DIFFICULTY、AC_RATE、FREQUENCY、CONTEST_POINTで並べ替えます(string、任意)sortOrder:ASCENDINGまたはDESCENDING(string、任意、デフォルト:ASCENDING)questionSlugs: この順序で先頭に移動する問題のスラッグ。残りの問題は相対的な順序を維持します(string[]、任意)
ソリューション
-
list_problem_solutions - 特定の問題に対するコミュニティのソリューション一覧を取得します
questionSlug: 問題の URL スラッグ/識別子(文字列、必須)limit: 返すソリューションの最大数(数値、任意、デフォルト:10)skip: スキップするソリューションの数(数値、任意)userInput: ソリューションを絞り込む検索語(文字列、任意)tagSlugs: 絞り込みに使用するタグ識別子の配列(文字列[]、任意、デフォルト:[])orderBy: 返すソリューションの並べ替え条件- Global:enum: "HOT", "MOST_RECENT", "MOST_VOTES"、任意、デフォルト:"HOT"
- CN:enum: "DEFAULT", "MOST_UPVOTE", "HOT", "NEWEST_TO_OLDEST", "OLDEST_TO_NEWEST"、任意、デフォルト:"DEFAULT"
-
get_problem_solution - 特定のソリューションの全内容を取得します
topicId: ソリューションの一意なトピック ID(文字列、必須、Global のみ)slug: ソリューションの一意なスラッグ/識別子(文字列、必須、CN のみ)
利用可能なリソース
| リソース名 | Global | CN | 認証が必要 | 説明 |
|---|---|---|---|---|
| problem-categories | ✅ | ✅ | ❌ | すべての問題分類カテゴリの一覧 |
| problem-tags | ✅ | ✅ | ❌ | アルゴリズムとデータ構造のタグの詳細な一覧 |
| problem-langs | ✅ | ✅ | ❌ | サポートされているすべてのプログラミング言語の一覧 |
| problem-detail | ✅ | ✅ | ❌ | 特定の問題の詳細を提供します |
| problem-solution | ✅ | ✅ | ❌ | 特定のソリューションの全内容を提供します |
リソース URI
-
problem-categories - すべての問題分類カテゴリの一覧
- URI:
categories://problems/all
- URI:
-
problem-tags - アルゴリズムとデータ構造のタグの詳細な一覧
- URI:
tags://problems/all
- URI:
-
problem-langs - LeetCode でサポートされているすべてのプログラミング言語の一覧
- URI:
langs://problems/all
- URI:
-
problem-detail - 特定の LeetCode 問題の詳細を提供します
- URI:
problem://{titleSlug} - パラメーター:
titleSlug: LeetCode の URL に表示される問題の識別子
- URI:
-
problem-solution - 特定のソリューションの全内容を提供します
- Global URI:
solution://{topicId}- パラメーター:
topicId: ソリューションの一意なトピック ID
- パラメーター:
- CN URI:
solution://{slug}- パラメーター:
slug: ソリューションの一意なスラッグ/識別子
- パラメーター:
- Global URI:
認証
ユーザー固有のデータにアクセスするには、LeetCode セッション認証が必要です。
- LeetCode にログインします(Global または China サイト)
- ブラウザーの開発者ツールから
LEETCODE_SESSIONCookie を取得します --sessionフラグまたはLEETCODE_SESSION環境変数を使ってサーバーを設定します
レスポンス形式
すべてのツールは、次の構造の JSON 形式のレスポンスを返します。
{
"content": [
{
"type": "text",
"text": "JSON_DATA_STRING"
}
]
}
JSON_DATA_STRING には、要求されたデータまたはリクエストが失敗した場合のエラーメッセージが含まれます。
ライセンス
このプロジェクトは MIT License のもとでライセンスされています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。