algo-coach-mcp
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., "@algo-coach-mcpPick a random easy problem on hash tables"
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.
algo-coach-mcp
Interactive algorithm coach MCP server with 3000+ LeetCode problems, bilingual descriptions (Chinese/English), local code testing, and real-world engineering case mapping.
Features
3000+ Problems — Full LeetCode free problem database with bilingual descriptions
12 Topic Categories — Array, Linked List, Hash Table, String, Two Pointers, Stack/Queue, Binary Tree, Backtracking, Greedy, DP, Monotonic Stack, Graph
Local Code Execution — Run and test your Python solutions locally, no online judge needed
Progressive Hints — 4-level hint system: direction -> approach -> pseudocode -> full solution
Real-World Cases — See how algorithms apply in production systems (Redis, Kafka, React, etc.)
3 Practice Modes — Student (guided), Interview (timed), Engineering (system design focus)
LeetCode Sync — Built-in script to fetch and update problems from LeetCode API
Related MCP server: Swarm Orchestrator
Quick Start
Use with Claude Code (Recommended)
One command setup — no local installation needed:
claude mcp add --transport stdio algo-coach -- npx -y --registry https://registry.npmjs.org/ algo-coach-mcp@latestRestart Claude Code, then start practicing.
Use with other MCP clients
Add to your MCP configuration:
{
"mcpServers": {
"algo-coach": {
"type": "stdio",
"command": "npx",
"args": ["-y", "--registry", "https://registry.npmjs.org/", "algo-coach-mcp@latest"]
}
}
}Available MCP Tools
Tool | Description |
| Pick a random problem by topic/difficulty |
| Get solution code and key points |
| Get theoretical fundamentals for a topic |
| Real-world engineering applications of an algorithm |
| Generate boundary test cases for a problem |
| Execute Python code against tests locally |
| Get the learning progression |
Topics
# | Topic | Description |
1 | Array (数组) | Binary search, two pointers, sliding window |
2 | Linked List (链表) | Reversal, cycle detection, merge |
3 | Hash Table (哈希表) | Lookup, grouping, counting |
4 | String (字符串) | Matching, parsing, manipulation |
5 | Two Pointers (双指针) | Fast-slow, left-right, sliding window |
6 | Stack & Queue (栈与队列) | Monotonic queue, expression parsing |
7 | Binary Tree (二叉树) | Traversal, construction, BST |
8 | Backtracking (回溯) | Permutations, combinations, subsets |
9 | Greedy (贪心) | Interval scheduling, optimization |
10 | Dynamic Programming (动态规划) | Knapsack, subsequence, state machines |
11 | Monotonic Stack (单调栈) | Next greater element, histogram |
12 | Graph (图论) | BFS, DFS, union-find, topological sort |
LeetCode Sync
Fetch all free problems from LeetCode with bilingual descriptions:
npm run sync # Full sync (~3000 problems, ~50 min)
npm run sync -- --limit 100 # Sync first 100 problems
npm run sync:resume # Resume interrupted syncFeatures: checkpoint/resume, rate limiting (2 req/s), retry logic, bilingual (CN + EN).
Development
npm install
npm run dev # Run with tsx (hot reload)
npm run sync # Sync problems from LeetCode
npm run build # Build for production
npm test # Run testsArchitecture
src/
├── index.ts # MCP server entry (stdio transport)
├── paths.ts # Package root resolution
├── types.ts # Shared type definitions
├── content/ # Content indexing and parsing
├── sync/ # LeetCode API sync pipeline
├── testgen/ # Test case generation
├── executor/ # Python subprocess runner
├── cases/ # Real-world case loader
├── tools/ # MCP tool implementations
└── resources/ # MCP resource handlersLicense
MIT
Available Tools
7 toolsgenerate_test_casesC
Generate test cases (including edge cases) for a problem
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Problem slug |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden, but it only promises generation and edge-case inclusion. It doesn't disclose return format, whether code is executed, side effects, or limitations. This leaves significant behavior unexplained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no filler and the key qualifier 'including edge cases' front-loaded. It is compact, though it omits details that other dimensions penalize.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the agent is left without information about what the tool returns or how results are presented. The one-parameter input is clear, but the response/usage context is under-specified. More detail is needed for a complete picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with 'Problem slug' already documented. The description repeats 'problem' without adding syntax, constraints, or additional meaning. Baseline 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action (generate) and object (test cases, including edge cases) tied to a problem. This distinguishes it from sibling tools like get_solution or get_theory, though it doesn't elaborate on test-case format or scope. It is clear but not maximally specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to prefer this tool over siblings such as get_real_world_cases or run_user_code. There is no mention of prerequisites, workflow position, or exclusions. The only hint is the slug parameter, which implicitly requires a selected problem.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_real_world_casesC
Get real-world engineering application cases for an algorithm
| Name | Required | Description | Default |
|---|---|---|---|
| algorithm | Yes | Algorithm slug, e.g. 'hash-table', 'binary-search' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure. It implies a read-only retrieval ('Get') but gives no details about the response format, possibility of empty results, pagination, or any side effects. This is insufficient for a tool with zero annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler and the core action is front-loaded. It is appropriately sized for a simple tool, though it leans toward under-specification rather than rich structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description should clarify what a 'real-world engineering application case' looks like and what the tool returns. It does not explain the output format or how an agent should interpret the response, making it incomplete for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage for the single parameter 'algorithm', including a description and example format. The description adds no additional semantic meaning beyond what the schema already states, so it meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Get') and resource ('real-world engineering application cases') targeted at 'an algorithm', which distinguishes it from siblings like get_solution and get_theory. However, it does not explicitly name alternatives or highlight differentiators, so it is clear but not fully differentiated in text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus siblings like get_solution or get_theory. There is no mention of context, prerequisites, or alternative tools, leaving the agent to infer usage from the name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_solutionB
Get the solution code and key points for a problem
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Problem slug, e.g. '0001.两数之和' | |
| language | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not disclose any side effects, prerequisites (e.g., needing to pick a problem first), return format, or whether it performs any mutations. It only says 'get', but lacks depth about what the agent should expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, efficient sentence that directly states the tool's purpose. It is front-loaded with the key action and resource. No wasted words, though it could have been slightly more informative without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 2 parameters, no output schema, and no annotations. The description is minimal and does not specify how the solution is returned (e.g., code snippet, explanation), what 'key points' might include, or any dependencies on other tools like pick_problem. Given the complexity of retrieving solutions, this is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%, with 'slug' being described and 'language' having an enum but no textual description. The description does not explain the 'language' parameter's purpose beyond its enum values, and it does not clarify that 'slug' is a required path identifier. Since coverage is moderate, the description adds minimal value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets the solution code and key points for a problem, with a specific resource (problem solution). It is distinct from siblings like get_theory or get_real_world_cases, though it does not explicitly name them, so it loses one point for lack of explicit differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a user needs the solution to a specific problem, but it does not explain when to use it versus siblings like get_theory or get_real_world_cases. There is no explicit guidance on when not to use it or which alternatives exist, so it only implies context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_theoryC
Get the theory/fundamentals article for a topic
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It implies a read-only fetch by saying 'Get', but it does not describe return format, content structure, or any other behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no filler or redundancy. The core action and object are front-loaded, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter retrieval tool, the description is minimally viable: an agent can guess that this returns an article about the selected topic. However, with no annotations and no output schema, it should say more about what the article content or return payload looks like.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description adds little beyond restating that the article is 'for a topic'. The enum in the schema carries the real semantic weight, but the description itself does not compensate for the lack of parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Get') and resource ('theory/fundamentals article') for a given topic, making its basic function evident. It differentiates reasonably from siblings like get_solution and get_topic_roadmap, though it does not explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as get_topic_roadmap or get_solution. The description implies it is for background theory, but it never states appropriate contexts, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_topic_roadmapA
Get the ordered topic roadmap for learning progression
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It conveys that the tool returns an ordered sequence tied to learning progression spac, which is useful, but it does not mention return format, whether the roadmap is prerequisite-based, or any other behavioral traits. It is adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler words. Every term ('Get', 'ordered topic roadmap', 'learning progression') contributes to the agent's understanding, making it an exemplar of concise writing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has zero parameters, no output schema, and a straightforward retrieval purpose, the description supplies enough context for an agent to call it correctly. It could mention the shape of the roadmap, but the basic operation is fully specified for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters)Skip, so there is no parameter meaning for the description to add. The schema is trivially complete, and the baseline of 4 applies because no compensation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and names a specific resource ('ordered topic roadmap'), which clearly distinguishes it from sibling tools like get_theory and get_solution. It does not explicitly reference siblings, but the roadmap concept is unique enough for an agent to tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for learning progression' implies when this tool is relevant, but the description provides no explicit guidance on when to use it instead of alternatives such as pick_problem or get_theory. There are no exclusions or clear selection criteria, though the intended use case is roughly inferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pick_problemB
Pick a random problem by topic and/or difficulty
| Name | Required | Description | Default |
|---|---|---|---|
| topic | No | ||
| difficulty | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool picks a random problem, but doesn't disclose whether the selection is truly random, whether it returns a problem ID or full text, whether it can return no result if no match, or any side effects. For a selection tool, the randomness and return behavior are important but undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the action and criteria. Every word earns its place; no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations, no output schema, and 0% schema description coverage, the description is too thin. It doesn't explain what the return value looks like (e.g., problem statement, ID, link), what happens if no problem matches the filters, or whether the selection is truly random. Given the sibling tools like get_solution and get_theory, an agent would benefit from knowing how the picked problem is returned and how to use it next.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description mentions 'topic' and 'difficulty' as filters, which maps directly to the two parameters. The enums in the schema already define valid values, so the description adds minimal meaning beyond what the schema provides. It doesn't explain optionality (both are optional since required is 0) or behavior when both are omitted, but the description's phrase 'and/or' implies that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Pick a random problem by topic and/or difficulty' clearly states the action (pick a random problem) and the filtering criteria (topic and/or difficulty). It distinguishes itself from sibling tools like get_solution or get_theory, which are about retrieving content rather than selecting a problem. However, it doesn't explicitly name a sibling alternative, so it doesn't fully differentiate from a potential 'get_problem' tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: use this tool when you need a random problem filtered by topic/difficulty. It doesn't explicitly state when not to use it or name alternatives, but the sibling list (get_solution, get_theory, etc.) makes the context clear. The lack of explicit exclusions or alternative routing leaves some room for inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_user_codeC
Run user-submitted Python code against test cases locally
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | User's Python code | |
| language | No | Language (only 'python' supported currently) | |
| testCases | Yes | ||
| timeoutMs | No | Timeout in milliseconds (default 5000) | |
| functionName | Yes | Name of the function to test |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions local execution, but does not describe what happens after execution, whether code is sandboxed, what output is returned, how timeouts behave, or any safety limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler or repetition. Every word earns its place, and the core action and resource are immediately clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that executes arbitrary user code, the description is under-specified. It lacks information about return values, execution environment, isolation, failure handling, and the effects of timeoutMs. The absence of an output schema and annotations makes these gaps more significant.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (80%), so the parameters are mostly documented in the schema itself. The description adds little beyond restating that the tool runs Python code and uses test cases, but it does not meaningfully clarify parameter semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb ('run'), a specific resource ('user-submitted Python code'), and the context ('against test cases locally'). It is clear and unambiguous, but it does not explicitly differentiate from sibling tools like generate_test_cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus the alternative tools. There is no mention of when code execution is appropriate, when it isn't, or which sibling should be used instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
v0.3.1- First observed
generate_test_cases - First observed
get_real_world_cases - First observed
get_solution - First observed
get_theory - First observed
get_topic_roadmap - First observed
pick_problem - First observed
run_user_code
TDQS
Scored across 7 tools
Each tool clearly targets a distinct action: picking problems, retrieving solutions, theory, real-world cases, test generation, code execution, and roadmap. No two tools overlap in purpose, making misselection unlikely.
All tool names follow a consistent verb_noun snake_case pattern (pick_problem, get_solution, generate_test_cases, etc.). The naming is predictable and clearly indicates each tool's function.
Seven tools is a well-scoped set for an algorithm coaching server. Each tool addresses a distinct part of the learning workflow without redundancy or bloat, fitting the typical ideal range.
The tool surface covers the essential learning loop: selecting problems, accessing theory/solutions, generating tests, running user code, and following a roadmap. There are no obvious gaps or dead ends for the stated coaching purpose.
Maintenance
Related MCP Connectors
Remote MCP learning coach for coding agents.
Persistent memory and cross-session learning for AI coding assistants (hosted remote MCP).
ArcAgent MCP server for bounty discovery, workspace execution, and verified coding submissions.
MCP Server for an Agent Task Marketplace
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA comprehensive learning platform for Model Context Protocol development that teaches MCP concepts through hands-on modules including text processing, file operations, and database integration. Designed as an educational tool with progressive difficulty levels from basic to advanced MCP server development.MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that extends AI coding assistants with deterministic, algorithmic capabilities such as code analysis, fault localization, and formal verification, enabling an autonomous engineering team within the IDE.MIT
- AlicenseAqualityCmaintenanceAn MCP server for agent-guided DSA practice that generates LeetCode-style problems and provides tutoring with escalating hints, concept explanations, and progress tracking.77 npmMIT
- FlicenseNot gradedqualityCmaintenanceThis MCP server exposes programming topic data and tools (search, practice suggestions) to help AI agents answer study questions, like 'How to study Python decorators?'.-