apprentice-mcp
apprentice-mcp
一个开源的 MCP(Model Context Protocol)Server,为 Claude Desktop、Cursor、Windsurf 等任意支持 MCP 的 AI 客户端提供"长期学习跟踪"能力,基于学徒效应(观察 → 模仿 → 独立 → 精通)与间隔重复(FSRS 算法)帮你系统性地学习和巩固任意领域的知识/技能。
产品定位:角色反转的学徒
apprentice-mcp 采用角色反转的教学设计:你是"师傅",AI 扮演"学徒"本人。你把知识点讲给学徒听,学徒像真实的人一样有理解、有疑问、有情绪地反馈——这是费曼学习法(教是最好的学)的落地:如果学徒总是似懂非懂、追问的问题正好戳中逻辑漏洞,说明你自己也没有真正吃透这块知识。
apprentice-mcp 本身不调用任何 LLM、不管理任何模型 API Key——学徒该怎么说话、什么时候表现出哪种情绪,完全由你正在用的 AI 客户端(Claude/Cursor 等)决定;apprentice-mcp 只负责确定性的存储、FSRS 调度算法与统计。
内置的三个学徒人设
不同难度的知识需要不同"心智水平"的学徒来陪练:
人设 | 年龄 / 认知阶段 | 适合场景 |
米娅 Mia | 8 岁,具体运算阶段早期 | 给孩子讲重要概念前的"教学彩排",或孩子自己用来加深理解 |
贝蒂 Betty | 12 岁,具体运算→形式运算过渡阶段 | 给 10-13 岁孩子讲解前的排练,或需要一点抽象思维但还不到大学水平的知识 |
文森 Vincent | 刚上大学的大一新生,形式运算成熟阶段 | 你自己学习强化学习、世界模型这类有门槛的知识,检验自己是不是真的能应用 |
也可以用 upsert_persona 自定义更多人设(比如给自己配一个更挑剔的"资深同行",或给孩子配一个更年幼的"弟弟妹妹")。完整的人设设计方法论见 docs/design/apprentice-mcp-design.md。
配套 Skill:让学徒真的"演"起来
apprentice-mcp 只提供确定性的存储和调度,学徒该怎么说话、怎么表现出五维人格(立场/情绪/记忆/边界/成长),需要配套的 Agent Skill 来落地。仓库自带 skill/apprentice-teaching/,安装本包后可以直接使用:
# 复制到个人 Skill 目录(对所有项目生效)
cp -r node_modules/apprentice-mcp/skill/apprentice-teaching ~/.cursor/skills/
# 或复制到某个项目的 Skill 目录(仅该项目生效)
cp -r node_modules/apprentice-mcp/skill/apprentice-teaching <your-project>/.cursor/skills/复制后重启客户端,直接说"我来教教我的学徒 XX"、"考一下贝蒂"之类的话就会自动触发;完整的教学会话流程、人设语气参考、示例对话见 skill/apprentice-teaching/SKILL.md。
安装与配置
前置要求
Node.js 20 / 22 / 24(最低 20;dashboard 子命令依赖 open@11)。推荐 Node 22 LTS——仓库根目录有 .nvmrc,贡献者可用 nvm use / fnm use 对齐。
通过 npx apprentice-mcp 使用时,native 依赖会在你当前的 Node 版本下自动安装,无需手动编译。Node 版本详情与常见问题见下文 Node 版本与 troubleshooting。
Claude Desktop
编辑 claude_desktop_config.json(macOS: ~/Library/Application Support/Claude/claude_desktop_config.json,Windows: %APPDATA%\Claude\claude_desktop_config.json):
{
"mcpServers": {
"apprentice-mcp": {
"command": "npx",
"args": ["apprentice-mcp"]
}
}
}Cursor
编辑项目或全局的 mcp.json:
{
"mcpServers": {
"apprentice-mcp": {
"command": "npx",
"args": ["apprentice-mcp"]
}
}
}重启客户端后即可在对话中使用下面的工具。
环境变量
变量 | 说明 | 默认值 |
| SQLite 数据文件路径 |
|
数据库文件首次启动时自动创建并建表,无需任何额外配置。
工具清单
工具 | 参数 | 说明 |
| subject, topic?, title, content, tags?, masteryStage?, personaId? | 新增知识点/技能条目,自动初始化 FSRS 状态 |
| subject?, tag?, masteryStage?, personaId?, limit?, offset? | 按条件筛选查看条目 |
| itemId, 可更新字段 | 修改条目内容/标签/mastery_stage/关联人设 |
| itemId | 级联删除相关复习状态与历史 |
| limit?, personaId? | 取出当前到期需要复习的条目,按到期时间升序 |
| itemId, rating(again/hard/good/easy), correct?, timeSpentSec?, notes? | 记录一次练习结果,驱动 FSRS 更新复习计划 |
| itemId?, category, description?, occurredAt? | 记录一次错误分类 |
| subject?, itemId?, limit? | 按类别汇总反复出现的错误类型,用于"举一反三" |
| itemId?, subject?, personaId? | 复习次数、正确率趋势、mastery_stage 分布统计 |
| isBuiltin? | 查看学徒人设列表(内置 3 个 + 全部自定义) |
| id?, name, ageLabel?, cognitiveStage?, traits | 新增或更新一个自定义学徒人设(内置人设禁止修改) |
| personaId | 删除一个自定义学徒人设(内置人设禁止删除) |
详细的设计思路(学徒效应方法论、五维人格框架、认知发展阶段与人设的对应关系)见 docs/design/apprentice-mcp-design.md。
可视化面板
查看当前所有知识点的掌握度分布(整体 / 按主题 / 按人设):
npx apprentice-mcp dashboard会在本地起一个只读的小型 web server 并自动打开浏览器,数据来自同一个 SQLite 文件,随时刷新页面看最新进度。
Node 版本与 troubleshooting
官方支持范围
Node 版本 | 状态 |
20 LTS | 支持(CI 测试) |
22 LTS | 推荐( |
24 Current | 支持(CI 测试) |
18 及以下 | 不支持 |
package.json 中 engines.node 为 >=20。日常用户通过 npx 安装时,npm 会按运行时 Node 版本拉取 better-sqlite3 的预编译二进制,一般开箱即用。
核心原则
better-sqlite3 是原生 C++ 模块,.node 文件必须与运行时的 Node 大版本 ABI 一致。因此:
npm install与node dist/index.js/ MCP 启动应使用同一个 Node 大版本切换 Node 大版本(如 22 → 24)后,需要重装或 rebuild native 依赖
常见错误:NODE_MODULE_VERSION 不匹配
启动 MCP 或跑测试时出现类似报错:
Error: The module '.../better_sqlite3.node' was compiled against a different Node.js version
using NODE_MODULE_VERSION 127. This version of Node.js requires NODE_MODULE_VERSION 137.说明 better-sqlite3 是在旧 Node 版本下安装的,按以下步骤修复:
# 克隆仓库本地开发时
npm rebuild better-sqlite3
# 若仍失败,彻底重装(Windows 上若报 EPERM/EBUSY,先关闭 Cursor 里占用的 MCP 进程)
rm -rf node_modules
npm installWindows PowerShell 等价命令:
Remove-Item -Recurse -Force node_modules
npm installWindows 上 prebuild 下载失败
若 npm install 时 better-sqlite3 无法下载预编译包,会 fallback 到 node-gyp 本地编译,需要:
Visual Studio Build Tools(勾选「使用 C++ 的桌面开发」)
或改用 WSL / Linux 环境开发
MCP 配置建议
普通用户(推荐,自动适配本机 Node):
{
"mcpServers": {
"apprentice-mcp": {
"command": "npx",
"args": ["-y", "apprentice-mcp"]
}
}
}本地开发(指向仓库编译产物):
{
"mcpServers": {
"apprentice-mcp": {
"command": "node",
"args": ["<你的仓库路径>/dist/index.js"]
}
}
}本地开发时修改源码后需先 npm run build;切换 Node 大版本后需 npm rebuild better-sqlite3 或重装 node_modules。
本地开发
nvm use # 或 fnm use — 对齐 .nvmrc(Node 22)
npm install
npm run dev # 用 tsx 直接运行 src/index.ts
npm test # 跑单元测试(vitest + 内存 SQLite)
npm run build # 编译到 dist/License
MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/nancliu/apprentice-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server