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
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。