Learning Hub
AI learning assistant that manages game time rewards based on school grades, homework, and bonus tasks
Learning Hub MCP
Beta — fully functional, tested with one family. Feedback and bug reports welcome via GitHub Issues.
MCP server for student learning workflow with SQLite database. Each instance serves one student — deploy a separate instance per child for isolated, focused AI tutoring.
Features
- Subjects - school subjects with multi-country support (UA, CZ, DE, etc.)
- Grades - grade tracking with 5-point European scale (1=best, 5=worst)
- Topics - subject topics for improvement tracking
- Homework - assignment tracking with deadlines
- Bonus Tasks - motivational tasks that reward game minutes
- Game Minutes - immutable transaction ledger for tracking earned/spent game time
- Books - textbook library with markdown summaries and content indexing
- Topic Reviews - reinforcement tracking for weak topics
- Escalation - bad grade notifications for parents
- Instruction Tools - markdown algorithms that guide AI agents through workflows
- Sync Providers - pluggable sync framework (EduPage, PRONOTE)
- Secrets - secure credential storage for sync providers
Installation
# Install dependencies
poetry install
# Initialize database
poetry run alembic upgrade head
Configuration
Database defaults to ./data/learning_hub.db. Override via environment variable:
DATABASE_URL=sqlite+aiosqlite:///./data/learning_hub.db
Sync provider credentials (EduPage, PRONOTE, etc.) are stored in the secrets table and managed via MCP tools (set_secret, list_secrets).
Config System (SQLite)
Runtime configuration stored in the configs table. Managed via MCP tools (get_config, set_config, list_configs). Use check_system_readiness to verify all required configs are set.
Entries with defaults (seeded by migration)
| Key | Default | Description |
|---|---|---|
GRADE_MINUTES_MAP | {"1":15,"2":10,"3":0,"4":-20,"5":-25} | Grade → game minutes conversion |
TOPIC_REVIEW_THRESHOLDS | {"2":1,"3":2,"4":3,"5":3} | Repetitions needed per grade before TopicReview is closed |
HOMEWORK_BONUS_MINUTES_ONTIME | 10 | Bonus minutes for on-time homework |
HOMEWORK_BONUS_MINUTES_OVERDUE | -10 | Penalty minutes for overdue homework |
MAX_PENDING_BONUS_TASKS | 4 | Max concurrent pending bonus tasks |
MAX_COMPLETED_BONUS_TASKS_PER_WEEK | 15 | Max completed bonus tasks in rolling 7 days |
DEFAULT_DEADLINE_TIME | 20:00 | Default time when deadline has only a date |
SETUP_COMPLETED | false | Whether initial setup has been completed |
BASE_CRONS_INSTALLED | false | Whether base cron jobs have been created |
SYNC_CRON_CONFIGURED | false | Whether a sync cron job has been created after first successful sync |
Required entries (must be set before use)
| Key | Description |
|---|---|
TEMP_BOOK_DIR | Folder where users place book files for processing |
BOOKS_STORAGE_DIR | Base folder for storing processed books |
ISSUES_LOG | Path to the issue log file |
FAMILY_LANGUAGE | Language for communication with the family |
Usage
Run MCP Server
poetry run learning-hub-mcp
MCP Configuration
Add to your MCP client config:
{
"mcpServers": {
"learning-hub": {
"command": "poetry",
"args": ["run", "learning-hub-mcp"],
"cwd": "/path/to/learning-hub-mcp"
}
}
}
MCP Tools (78 total)
Subjects
create_subject- create a new school subjectlist_subjects- list subjects (filter: school, is_active)update_subject- update subject details
Topics
create_topic- create a topic for a subjectlist_topics- list topics (filter: subject_id, is_open)close_topic- close topic (reason: resolved/skipped/no_longer_relevant)
Grades
add_grade- add a grade (1-5 scale, 1=best), auto-creates minute transactionlist_grades- list grades (filter: subject, date range, school)
Bonus Tasks
create_bonus_task- create a bonus task linked to a topic (validates limits)list_bonus_tasks- list tasks (filter: status, topic)get_bonus_task- get a bonus task by IDget_latest_bonus_task- get the most recent bonus taskapply_bonus_task_result- complete task, record grade, and update topic reviewscancel_bonus_task- cancel a taskcheck_pending_bonus_task- check if there's a pending task to reuse
Minute Transactions
get_balance- get current game minutes balanceadd_played_minutes- record played game time (deducts from balance)create_ad_hoc_transaction- create manual bonus or penaltylist_transactions- list transactions (filter: date range, type)
Homework
create_homework- create homework assignmentlist_homeworks- list homework (filter: status, subject)complete_homework- mark homework as doneupdate_homework- update homework detailsclose_overdue_homeworks- close overdue homework, auto-creates penalty transactionget_pending_homework_reminders- get reminders due (D-1, D-2)mark_homework_reminders_sent- mark reminders as sent
Books
add_book- add a book to the librarylist_books- list books (filter: subject, has_summary)get_book- get a book by IDupdate_book- update book detailsdelete_book- delete a book
Topic Reviews
list_topic_reviews- list topic reviews (filter: subject, status)get_pending_reviews_for_topic- get pending reviews for a topicmark_topic_reinforced- mark review as reinforcedincrement_topic_repeat_count- increment repeat count for a reviewget_priority_topic_for_review- pick a priority topic from top-4
Family Members
create_family_member- add a family member (student/parent/tutor/admin)list_family_members- list members (filter: role)update_family_member- update member detailsdelete_family_member- delete a memberget_student- get the student record
Gateways
create_gateway- register a messaging channel (Telegram, etc.)list_gateways- list gateways (filter: family_member, channel)update_gateway- update gateway detailsdelete_gateway- delete a gatewaylookup_gateway- find gateway by platform + external ID
Configs
get_config- get a config value by keyset_config- set a config value (existing keys only)list_configs- list all config entries
Secrets
set_secret- set a secret value (credentials, API keys)list_secrets- list secrets (keys only, values never exposed)
Sync Providers
list_sync_providers- list all sync providers with statusupdate_sync_provider- activate/deactivate, link to schoolrun_sync- run sync for all active providers (or a specific one)find_edupage_subdomain- detect EduPage school subdomain from stored credentials
Readiness
check_system_readiness- check if the system is properly configured (active schools, required configs)
Escalation
get_grades_pending_escalation- get grades needing parent notificationmark_grades_escalated- mark grades as escalated (parent was notified)
Instruction Tools
get_grade_escalation_instructions- escalate bad grades to tutor/adminget_learning_system_instructions- master instruction: full system rulesget_student_request_router_instructions- classify student request (A/B/C scenarios)get_bonus_task_assignment_instructions- assign a new bonus taskget_submission_routing_instructions- route submitted work to evaluatorget_bonus_task_evaluation_instructions- evaluate completed bonus taskget_homework_evaluation_instructions- evaluate homework submissionget_book_lookup_instructions- find and deliver textbook pagesget_books_workflow_instructions- process and register new booksget_homework_manual_instructions- manually add homework (parent only)get_grade_manual_instructions- manually add a grade (adult only)get_student_content_policy_instructions- content safety filtering for external student contentget_topic_review_curation_instructions- curate and close stale topic reviewsget_base_crons_setup_instructions- instructions for setting up base cron jobs
OpenClaw Bridge Plugin
The learning-hub-bridge/ directory contains a TypeScript plugin that makes all MCP tools available as native OpenClaw agent tools.
Why
OpenClaw doesn't support MCP servers natively. Without the bridge, the agent would need exec + mcporter — slow (~3s per call), buggy (mcporter serialization issues with lists), and invisible to the model (tools not in tool list).
How it works
- On gateway startup, the bridge spawns the Python MCP server as a child process (STDIO)
- Discovers all tools via
client.listTools()(MCP protocol) - Registers each as a native OpenClaw tool via
api.registerTool()with prefixlearning_hub_ - Proxies
execute()→client.callTool(), merging multiple TextContent blocks into a single JSON array - Auto-reconnects if the Python process dies
After this, the model sees learning_hub_list_subjects, learning_hub_add_grade, etc. directly in its tool list.
Deployment
The bridge must be installed as an OpenClaw extension. The source lives in learning-hub-bridge/ inside this repo, but OpenClaw loads plugins from ~/.openclaw/extensions/<pluginId>/.
Step 1. Copy the bridge to extensions:
cp -r /path/to/learning-hub-mcp/learning-hub-bridge ~/.openclaw/extensions/learning-hub
Step 2. Install dependencies:
cd ~/.openclaw/extensions/learning-hub
npm install
Step 3. Add plugin config to openclaw.json:
{
"plugins": {
"entries": {
"learning-hub": {
"enabled": true,
"config": {
"command": "/bin/bash",
"args": ["-lc", "cd /path/to/learning-hub-mcp && exec .venv/bin/learning-hub-mcp"],
"cwd": "/path/to/learning-hub-mcp",
"toolPrefix": "learning_hub"
}
}
}
}
}
Step 4. Allow tools for the agent in openclaw.json:
{
"agents": {
"list": [
{
"id": "main",
"tools": {
"alsoAllow": ["learning-hub"]
}
}
]
}
}
Step 5. Restart gateway:
openclaw gateway restart
Config options
| Option | Description | Default |
|---|---|---|
command | Command to start MCP server | (required) |
args | Arguments for the command | (required) |
cwd | Working directory for MCP server process | — |
toolPrefix | Prefix for registered tool names | learning_hub |
Updating after MCP changes
When new tools are added to the MCP server, the bridge picks them up automatically on gateway restart — no bridge code changes needed. Just restart:
openclaw gateway restart
Development
# Run tests
poetry run pytest
# Run tests with coverage
poetry run pytest --cov=learning_hub
# Lint code
poetry run ruff check .
# Fix lint issues
poetry run ruff check --fix .
Known Limitations
- Tested with a single family (one student, two schools: EduPage CZ + UA)
- PRONOTE sync implemented but minimally tested
- SQLite only — designed for single-family self-hosted use
- Requires OpenClaw as the AI agent runtime
- Edge cases with diverse school configurations are likely not yet covered
License
Related Servers
Public Health MCP
NIH clinical trials and FDA adverse event reports. 4 MCP tools for health research.
Reaudit MCP
An MCP Server to Control Your AI Visibility Through Reaudit.io
CryptoAPIs MCP Prepare Transactions
MCP server for building unsigned transactions on multiple blockchains via Crypto APIs
Vigil
System Scanner for Vulnerabilities
MCP OCR Server
An MCP server for Optical Character Recognition (OCR) using the Tesseract engine.
MCP GameBoy Server
Allows Large Language Models to interact with a GameBoy emulator via the serverboy MCP server.
SpaceTraders
An MCP server for interacting with the SpaceTraders API, a space-based trading and exploration game.
CryptoAPIs MCP Simulate
MCP server for dry-run EVM transaction simulation via Crypto APIs
Wordle MCP
Fetches daily Wordle solutions for a specific date via the Wordle API.
IPMA MCP Server
Access meteorological data for Portugal from the IPMA public API using natural language.