Obsidian Learning Extension
Extends the official Obsidian MCP server with intelligent learning and second-brain features, including AI-generated challenges, progress analytics, spaced repetition, and knowledge gap analysis.
README
Obsidian Learning Extension MCP Server
A Model Context Protocol (MCP) server that extends the official Obsidian MCP server with intelligent learning and second-brain features.
Features
šÆ Challenge System
- AI-Generated Challenges: Create personalized learning challenges based on topic, difficulty, and type
- Progress Tracking: Monitor time spent and status for each challenge
- Challenge Types: Knowledge, Practical, Teaching, Analysis, Creative
- Difficulty Levels: Beginner, Intermediate, Advanced, Expert
š Progress Analytics
- Activity Recording: Track learning sessions with duration and mastery ratings
- Statistics Dashboard: View time spent, average mastery, and activity trends
- Topic Analysis: See time distribution across different topics
- Performance Insights: Identify areas for improvement
š Spaced Repetition
- Smart Scheduling: Automatically schedule reviews based on spaced repetition algorithm
- Performance-Based Intervals: Review intervals adjust based on how well you remember
- Due Review Tracking: Get notifications for overdue reviews
- Note Integration: Link reviews directly to Obsidian notes
š§ Knowledge Gap Analysis
- Identify Weak Areas: Find topics with low mastery scores
- Activity Tracking: See which topics haven't been practiced recently
- Personalized Suggestions: Get AI-powered recommendations for what to study next
- Focus Analysis: Analyze specific areas or your entire knowledge base
Prerequisites
- Docker and Docker Compose
- Official Obsidian MCP server (from Docker) already set up
- Claude Desktop configured with Obsidian MCP
Installation
1. Clone the Repository
git clone https://github.com/yourusername/obsidian-learning-extension.git
cd obsidian-learning-extension
2. Build the Docker Image
docker-compose build
3. Test the Server
docker-compose up
The server should start and wait for stdio communication.
Configuration
Add to Claude Desktop Config
Edit your Claude Desktop configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Add the learning extension server alongside your existing Obsidian server:
{
"mcpServers": {
"obsidian": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "OBSIDIAN_HOST",
"-e", "OBSIDIAN_API_KEY",
"mcp/obsidian"
],
"env": {
"OBSIDIAN_HOST": "host.docker.internal",
"OBSIDIAN_API_KEY": "YOUR_API_KEY"
}
},
"obsidian-learning": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-v", "/ABSOLUTE/PATH/TO/obsidian-learning-extension/data:/data:rw",
"obsidian-learning-extension:latest"
]
}
}
}
Important: Replace /ABSOLUTE/PATH/TO/obsidian-learning-extension with your actual path!
Restart Claude Desktop
Completely quit and reopen Claude Desktop to load the new server.
Available Tools
Challenge Management
create_challenge
Create a new learning challenge with AI-generated content.
Parameters:
topic(string): Topic to learn (e.g., "Docker Networking")difficulty(enum): beginner, intermediate, advanced, expertchallenge_type(enum): knowledge, practical, teaching, analysis, creativedescription(string, optional): Custom challenge description
Example:
"Create an intermediate practical challenge on Docker networking"
list_challenges
List all challenges with optional filtering.
Parameters:
status(enum, optional): pending, in_progress, completed, archiveddifficulty(enum, optional): Filter by difficulty level
Example:
"Show me all my in-progress challenges"
get_challenge
Get detailed information about a specific challenge.
Parameters:
challenge_id(string): ID of the challenge
update_challenge_status
Update challenge status and add notes.
Parameters:
challenge_id(string): Challenge IDstatus(enum): pending, in_progress, completed, archivednotes(string, optional): Notes about the status change
Example:
"Mark challenge ch_abc123 as completed with notes: Built a working multi-container app"
Progress Tracking
record_progress
Record a learning session.
Parameters:
topic(string): What you studiedactivity(string): What you didduration_minutes(number): Time spentmastery_rating(number): Self-assessment 0-10challenge_id(string, optional): Link to a challengenotes(string, optional): Additional notes
Example:
"Record 45 minutes learning Docker volumes, mastery 7/10, completed tutorial"
get_progress_stats
View learning statistics and analytics.
Parameters:
topic(string, optional): Filter by topicdays(number, optional): Days to look back (default: 30)
Example:
"Show my learning stats for the last 7 days"
Spaced Repetition
schedule_review
Schedule a review for spaced repetition.
Parameters:
topic(string): Topic to reviewnote_path(string): Path to note in Obsidianinitial_interval_days(number, optional): First review interval
Example:
"Schedule a review for Docker networking, note at Software Development/Docker Networking.md"
get_due_reviews
Get all reviews that are due or overdue.
Example:
"What reviews are due today?"
complete_review
Mark a review as completed and schedule the next one.
Parameters:
review_id(string): Review IDperformance(enum): weak, moderate, strong, perfectnotes(string, optional): Review notes
Example:
"Complete review rv_abc123 with strong performance"
Knowledge Analysis
suggest_next_topic
Get AI suggestions for what to study next.
Parameters:
area(string, optional): Focus area (e.g., "Docker")
Example:
"What should I study next?"
analyze_knowledge_gaps
Analyze your learning to find gaps and weak areas.
Parameters:
focus_area(string, optional): Area to analyze
Example:
"Analyze my knowledge gaps in programming"
Usage Examples
Getting Started
Claude: "Create a beginner knowledge challenge on Python async/await"
Claude: "List all my pending challenges"
Claude: "Update challenge ch_abc123 to in_progress"
During Learning
Claude: "Record 30 minutes studying async programming, mastery 6/10"
Claude: "What are my learning stats this week?"
Maintaining Knowledge
Claude: "Schedule a review for async programming at Python/Async.md"
Claude: "What reviews are due?"
Claude: "Complete review rv_xyz789 with strong performance"
Getting Insights
Claude: "What should I study next?"
Claude: "Analyze my knowledge gaps"
Claude: "Show challenges with low mastery scores"
Data Storage
All data is stored in JSON files in the data/ directory:
challenges.json: Challenge definitions and statusprogress.json: Learning activity logreviews.json: Spaced repetition schedule
These files are automatically created and maintained by the server.
Architecture
āāāāāāāāāāāāāāāāāāā
ā Claude Desktop ā
āāāāāāāāāā¬āāāāāāāāā
ā
āāāāāā“āāāāāāāāāāāāāāāāāā
ā ā
āāāāā¼āāāāāāāāā āāāāāāāāā¼āāāāāāāāā
ā Official ā ā Learning ā
ā Obsidian ā ā Extension ā
ā MCP Server ā ā MCP Server ā
āāāāā¬āāāāāāāāā āāāāāāāāāā¬āāāāāāāā
ā ā
āāāāā¼āāāāāāāāāāāāā āāāāāā¼āāāāāāā
ā Obsidian Vault ā ā JSON ā
ā (via REST) ā ā Data ā
āāāāāāāāāāāāāāāāāā āāāāāāāāāāāāā
Both servers work together:
- Official server: Handles all Obsidian file operations
- Learning extension: Provides intelligent learning features
Development
Running Locally
# Install dependencies
pip install -r requirements.txt
# Run server
python learning_server.py
Building Docker Image
docker-compose build
Viewing Logs
# With docker-compose
docker-compose logs -f
# With docker
docker logs obsidian-learning -f
Debugging
Use the MCP Inspector for debugging:
npx @modelcontextprotocol/inspector python learning_server.py
Troubleshooting
Server Won't Start
- Check Docker is running:
docker ps - Rebuild image:
docker-compose build --no-cache - Check logs:
docker-compose logs
Tools Not Showing in Claude
- Verify Claude Desktop config JSON is valid
- Ensure data directory path is absolute (not relative)
- Restart Claude Desktop completely
- Check Claude logs:
~/Library/Logs/Claude/(macOS)
Data Not Persisting
- Verify volume mount in docker-compose.yml
- Check data directory permissions
- Ensure path is absolute
Permission Errors
# Fix data directory permissions
chmod 755 data/
Roadmap
Phase 2 (Planned)
- [ ] Knowledge graph visualization
- [ ] Automatic note linking based on topics
- [ ] Learning streak tracking
- [ ] Challenge templates library
- [ ] Export progress reports
Phase 3 (Future)
- [ ] Machine learning for personalized difficulty adjustment
- [ ] Collaborative challenges
- [ ] Integration with external learning platforms
- [ ] Mobile notifications for reviews
- [ ] Advanced analytics dashboard
Contributing
Contributions welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
License
MIT License - feel free to use and modify!
Support
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Acknowledgments
- Built on the Model Context Protocol
- Complements the Official Obsidian MCP Server
- Inspired by spaced repetition research and second brain methodology
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.