Knowledge graph MCP for student learning with spaced repetition and mastery tracking
An MCP (Model Context Protocol) server for tracking student learning via a knowledge graph. Built with FastMCP, it enables LLMs to build, query, and update a personalized knowledge map with spaced repetition scheduling.
Install directly via Smithery:
npx @smithery/cli install @zcsabbagh/knowledge-graph-mcp --client claudeOr use the hosted version at: https://smithery.ai/server/@zcsabbagh/knowledge-graph-mcp
Prerequisites: Python 3.10+
git clone https://github.com/zcsabbagh/knowledge-graph-mcp.git
cd knowledge-graph-mcp
pip install -e .# From the project root
python -m knowledge_graph_mcp.serverAdd to your Claude Code MCP settings (~/.claude/settings.json):
{
"mcpServers": {
"knowledge-graph": {
"command": "python",
"args": ["-m", "knowledge_graph_mcp.server"],
"cwd": "/path/to/knowledge-graph-mcp"
}
}
}Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"knowledge-graph": {
"command": "python",
"args": ["-m", "knowledge_graph_mcp.server"],
"cwd": "/path/to/knowledge-graph-mcp"
}
}
}add_nodeCreate a new concept node.
add_node(
concept="Quadratic Formula",
description="Formula for solving ax² + bx + c = 0",
domain="mathematics",
difficulty=0.7,
tags=["algebra", "formulas"]
)add_edgeCreate relationships between concepts.
Relation types:
prerequisite - Must learn source before targetbuilds_on - Target extends source conceptrelated_to - Concepts are connectedcontradicts - Common misconceptionapplies_to - Application domainparent_of - Category hierarchyadd_edge(
source_concept="Algebra",
target_concept="Quadratic Formula",
relation_type="prerequisite"
)update_nodeUpdate mastery and record reviews. Providing a quality rating (0-5) triggers spaced repetition scheduling.
update_node(
node_id="quadratic_formula",
quality=4, # SM-2 rating: 0=blackout, 5=perfect
mastery_application=0.6,
misconception_detected="forgets ± sign"
)query_graphIntelligent queries for learning insights.
Query types:
prerequisites - All prerequisites for a conceptready_to_learn - Concepts where prereqs are mastereddue_for_review - Needs review based on schedulestruggling - High difficulty + low masterystalled - Multiple reviews, no improvementmisconceptions - Concepts with detected misconceptionsknowledge_gaps - Low mastery blocking progressnext_recommended - Best concept to study nextquery_graph(query_type="next_recommended", domain="mathematics")
read_subgraphGet the neighborhood around a concept with Mermaid visualization.
read_subgraph(
center_node="calculus",
depth=2,
direction="upstream", # or "downstream", "both"
output_format="both" # "json", "mermaid", or "both"
)get_learning_pathGet ordered prerequisites for a target concept.
get_learning_path(target_concept="calculus")
get_statisticsGet learning progress metrics.
get_statistics(domain="mathematics")
Nodes represent concepts with:
Edges represent relationships with:
When you call update_node with a quality rating:
The algorithm calculates the next optimal review date based on performance history.
Overall mastery combines dimensional scores:
mastery_level = 0.3 × recall + 0.4 × application + 0.3 × explanation
Data is stored in SQLite at ~/.knowledge_graph/knowledge.db by default.
1. LLM discovers student doesn't know "quadratic formula"
→ add_node(concept="Quadratic Formula", difficulty=0.7)
2. LLM identifies prerequisites
→ add_edge("Algebra", "Quadratic Formula", "prerequisite")
3. Student attempts problem, struggles
→ update_node("quadratic_formula", quality=2,
misconception_detected="confuses ± with +")
4. LLM decides what to teach next
→ query_graph("next_recommended")
5. Visualize the learning path
→ get_learning_path("quadratic_formula")MIT