Install
openclaw skills install @dengkane/easy-english-toolZero-dependency embedded MCP server for English learning — 22 tools covering vocab, articles, quizzes, copy practice, TTS, and pronunciation eval, all served directly from the Express process with no separate MCP instance. Dual transport (SSE + Streamable HTTP). Production-ready。
openclaw skills install @dengkane/easy-english-toolThis skill gives you access to the user's personal English learning data and actions. The backend is an Express server serving both REST APIs and MCP endpoints on the same port — no separate MCP process needed.
Before using this skill, check your available tools. If you see any tool named account_login, get_profile, get_today, vocab_add, etc. — the MCP server is configured. Jump to Path A. If none of these tools exist, use Path B (REST fallback).
The MCP server is named easy-english-tool and exposes 22 tools on https://english.geeyo.com. The MCP endpoints are served in-process by the Express backend — no separate MCP process needed.
POST /api/users/bind).account_login with those credentials. The MCP session caches userId, and all subsequent tools automatically use it.| Tool | Params | Description |
|---|---|---|
account_login | username, password | Login to cache userId for the session |
account_whoami | (none) | Returns cached {userId, username} or {userId: null} |
| Tool | Params | Description |
|---|---|---|
get_profile | (none) | Learning profile: level, streak, total points, vocab count, accuracy, nickname |
get_today | (none) | Today's recommended article + pending review vocab count. Returns needLevel:true if level not set. |
get_history | (none) | Study history (check-ins, quizzes, learning tracks) |
level_set | level | Set English level, e.g. "七年级上", "高一必修一" |
levels_list | (none) | List all 12 available levels in order |
diagnose | (none) | Diagnostic entry: ensures user record exists |
| Tool | Params | Description |
|---|---|---|
vocab_add | word, chinese, context? | Add a word to personal vocab list |
vocab_list | (none) | List all saved vocabulary |
vocab_review | id | Mark a vocab word as reviewed |
| Tool | Params | Description |
|---|---|---|
articles_create | title, content | Create a custom study article |
articles_list | (none) | List user's custom articles |
articles_get | id | Get article details by id |
articles_delete | id | Delete an article by id |
| Tool | Params | Description |
|---|---|---|
quiz_submit | correctCount, totalCount, points?, articleId? | Submit quiz results, auto-updates points and streak |
copy_load | articleId, source? | Load copy-writing record (count + draft) |
copy_submit | articleId, source? | Submit a copy, count+1, auto-adds points (max 5/day) |
copy_stash | articleId, draft, source? | Save a copy draft without incrementing count |
evaluate | text, articleId? | Pronunciation evaluation (stub; ISE coming in next phase) |
| Tool | Params | Description |
|---|---|---|
tts | text, speed? (slow/normal/fast) | Text-to-speech, returns MP3 URL |
checkin_poster | (none) | Generate check-in poster QR code (PNG) |
If the MCP server is not registered in your agent config, call the REST API directly at https://english.geeyo.com.
To add the MCP server permanently, add this to your agent's MCP config:
{
"mcpServers": {
"easy-english-tool": {
"type": "streamableHttp",
"url": "https://english.geeyo.com/api/mcp/http"
}
}
}
Or for SSE-based clients:
{
"mcpServers": {
"easy-english-tool": {
"type": "sse",
"url": "https://english.geeyo.com/api/mcp/sse"
}
}
}
After adding, restart the agent and return to Path A.
All endpoints share the same base: https://english.geeyo.com. Anonymous auth: include header x-user-id: <userId>. Get a userId by calling POST /api/users/ensure.
| MCP Tool | REST Equivalent |
|---|---|
account_login | POST /api/users/login {username, password} |
get_profile | GET /api/profile |
get_today | GET /api/today |
vocab_add | POST /api/vocab {word, chinese, context?} |
vocab_list | GET /api/vocab |
vocab_review | POST /api/vocab/review {id} |
articles_create | POST /api/user-articles {title, content} |
articles_list | GET /api/user-articles |
articles_get | GET /api/user-articles/:id |
articles_delete | DELETE /api/user-articles/:id |
tts | POST /api/tts {text, speed?} |
checkin_poster | GET /api/checkin/poster → PNG binary |
get_history | GET /api/history |
quiz_submit | POST /api/quiz {correctCount, totalCount, points?, articleId?} |
level_set | POST /api/level {level} |
levels_list | GET /api/levels |
diagnose | POST /api/diagnose {} |
copy_load | POST /api/copy {articleId, source?, action:"load"} |
copy_submit | POST /api/copy {articleId, source?, action:"submit"} |
copy_stash | POST /api/copy {articleId, draft, source?, action:"stash"} |
evaluate | POST /api/evaluate {text, articleId?} |
https://english.geeyo.comcd C:\projects\Node.js\H5\server && npm run dev (listens on :3001)GET https://english.geeyo.com/api/health → {"ok":true}@modelcontextprotocol/sdk needed.First-time setup for a user:
POST /api/users/ensure with x-user-id: <uuid> → get userIdPOST /api/diagnose → ensure user recordGET /api/levels → pick a levelPOST /api/level {level} → set levelPOST /api/users/bind {username, password} → bind account for cross-deviceDaily study session:
GET /api/today → get today's articleGET /api/vocab → review vocabularyPOST /api/tts → listen to articlePOST /api/copy {action:"submit"} or {action:"load"} → practice writingPOST /api/quiz → submit quizGET /api/checkin/poster → generate sharing posterGET /api/profile → check updated stats