内容
# Memora MCP
[](LICENSE)
[-orange)](https://github.com/modelcontextprotocol/ext-apps)
[](https://www.typescriptlang.org/)
[](https://react.dev/)
将任何对话转化为交互式学习会话,直接在Claude Desktop中进行。要求Claude创建一组卡片,它会生成卡片,然后将它们渲染为内联复习,您可以点击翻转**闪存卡**,回答**多选题**,并填写**填空**。每次回答都会更新**间隔重复**计划,您的结果会反馈给Claude,以便它可以复习您错过的部分。
关键词:模型上下文协议,MCP服务器,MCP应用,Claude Desktop,闪存卡,测验,间隔重复,SRS,FSRS,Anki替代品。
构建在 [MCP Apps 扩展](https://github.com/modelcontextprotocol/ext-apps)(SEP-1865)上:核心MCP规范`2025-11-25`加上Apps扩展`2026-01-26`。

## 功能
**三种学习方式**,全部内联渲染,评分方式相同:
- **闪存卡**:点击翻转,然后评分 **正确** / **错误**。
- **多选题**:选择一个选项,正确/错误答案立即显示。
- **填空**:空格在原处显示,保持句子完整。在卡片正面用`[...]`写一个空格,它会自动变成填空卡。
**间隔重复**:每次评分都会更新每张卡片的**FSRS**计划(通过[`ts-fsrs`](https://github.com/open-spaced-repetition/ts-fsrs)),所以弱卡片会 sooner 重现,待办卡片会优先显示。询问 *"今天有什么任务?"* 以获取所有卡片的总结。
**按类别组织**:使用 `::` 为卡片组命名,以嵌套它们(例如 `LLM::Attention`)。浏览 **类别树**,或将同一棵树视为交互式 **思维导图**,并 **学习** 整个分支,合并成一个会话。测验卡片组会用徽章标记。
**管理卡片组**:创建、追加、编辑、重命名和删除卡片组和卡片,无需离开聊天。创建卡片组时传递 `reverse` 以反向复习每个卡片(适用于词汇)。
**仅需JSON**:卡片组存放在 `data/decks.json` 中,每次调用时实时读取。可以手动编辑它们,也可以让Claude构建它们。无需数据库,无需外部服务。

## 工具
| 工具 | 功能 |
| --- | --- |
| `review_deck` | 打开一个卡片组进行复习(优先显示待办卡片)。 |
| `study` | 复习整个类别子树,合并成一个会话。 |
| `create_deck` | 生成闪存卡或填空卡;`reverse` 还会添加反向卡片。 |
| `create_quiz` | 生成多选题。 |
| `grade_card` | 记录复习结果并更新卡片的FSRS计划(由UI调用)。 |
| `due_today` | 总结所有卡片组的待办事项。 |
| `edit_card` | 修改卡片的正面和/或背面。 |
| `rename_deck` | 重命名卡片组(也会在类别树中移动它)。 |
| `delete_card` | 删除单个卡片。 |
| `delete_deck` | 删除整个卡片组。 |
卡片生成遵循 Memora 的质量规则(原子单概念卡片,1-5个单词答案,积极回忆,无歧义),基于 Wozniak 的 *20条知识表述规则*。
## 工作原理(MCP应用)
工具声明一个 `ui://` 资源。当Claude调用工具时,主机(Claude Desktop)获取该资源,在 **沙盒iframe** 中渲染其HTML,将工具结果传递给UI,UI通过JSON-RPC与主机通信(评分卡片并向模型报告进度)。

## 快速入门
### 前提条件
- Node.js 20.11+
### 连接到Claude Desktop
打开 **设置 > 开发者 > 编辑配置**,在 `mcpServers` 下添加 Memora:
```json
{
"mcpServers": {
"memora": {
"command": "npx",
"args": ["-y", "@servation/memora-mcp", "--stdio"]
}
}
}
```
然后完全退出Claude Desktop(从系统托盘),并重新启动。`memora` 将在设置 > 开发者下显示,预加载几个示例卡片组。
您的卡片组存储在 `~/.memora/decks.json` 中(可以通过 `MEMORA_DECKS` 环境变量覆盖路径)。手动编辑该文件或让Claude管理它。
<details>
<summary><b>从源码运行</b></summary>
```bash
git clone https://github.com/Servation/memora-mcp.git
cd memora-mcp
npm install
npm run build
```
将配置指向构建后的入口,路径为绝对路径(卡片组存储在存储库的 `data/decks.json` 中):
```json
{
"mcpServers": {
"memora": {
"command": "node",
"args": ["C:\\path\\to\\memora-mcp\\dist\\main.js", "--stdio"]
}
}
}
```
</details>
### 试用(在Claude Desktop聊天中)
- `review my World Capitals deck`
- `make me a deck of 10 Spanish travel phrases`
- `make a reversible deck of 10 Spanish words` (双向复习)
- `make a fill-in-the-blank deck about the water cycle` (填空卡)
- `quiz me with 10 multiple-choice questions on the solar system`
- `turn what we just discussed into a deck called "Photosynthesis"`
- `study my LLM category`
- `what's due today?`
## 技术栈
- **服务器**:TypeScript,[`@modelcontextprotocol/sdk`](https://www.npmjs.com/package/@modelcontextprotocol/sdk) 加 [`@modelcontextprotocol/ext-apps`](https://www.npmjs.com/package/@modelcontextprotocol/ext-apps),stdio传输(也支持Streamable HTTP)。
- **UI**:React 加 Vite,捆绑到单个内联HTML文件,通过 `vite-plugin-singlefile`。
- **调度**:[`ts-fsrs`](https://github.com/open-spaced-repetition/ts-fsrs) (FSRS)。
- 运行时是普通的 `node`(编译后无需 bun 或 tsx)。
## 卡片组格式
```json
{
"卡片组名称": [
{ "正面": "法国首都?", "背面": "巴黎" }
]
}
```
- 安装时存储在 `~/.memora/decks.json` 中(或源码中的 `data/decks.json`);通过 `MEMORA_DECKS` 覆盖。
- 实时读取(mtime缓存)。`create_deck`、`create_quiz` 和 `grade_card` 原子写入。
- **测验** 卡片添加 `"选项": ["...", "..."]`;其 `背面` 是正确答案。
- **填空** 卡片在正面用 `[...]` 编写空格,隐藏术语作为 `背面`。
- 卡片在复习时获得 `到期` 日期和FSRS `srs` 块;没有它们的卡片被视为新卡。
- 保持有效的JSON,否则服务器回退到内置的默认卡片组。
## 项目结构
```
memora-mcp/
├── server.ts # MCP工具 + ui:// 资源
├── decks.ts # 数据模型,卡片组存储,结果构建
├── scheduling.ts # FSRS调度 + 复习排序
├── main.ts # 入口:stdio(Claude Desktop)或Streamable HTTP
├── mcp-app.html # UI入口HTML(由Vite捆绑)
├── src/
│ ├── mcp-app.tsx # 复习协调器(翻转/测验/填空,评分 -> 模型)
│ ├── deck-lib.tsx # 树,思维导图,卡片列表,测验/填空视图,帮助函数
│ ├── mcp-app.module.css
│ └── global.css # 主题变量回退(浅色/深色)
├── data/decks.json # 可编辑的卡片组,实时读取
├── media/ # README 图片
├── vite.config.ts # 单文件捆绑配置
└── tsconfig*.json
```
## 开发
```bash
npm run dev # vite 监视(UI)加 tsx 服务器,运行在 http://localhost:3001/mcp
npm run typecheck # tsc --noEmit
```
在 [ext-apps 仓库](https://github.com/modelcontextprotocol/ext-apps) 中,您也可以使用MCP应用参考主机(`basic-host`)运行应用程序,进行快速本地迭代。
## 路线图
在 [TODO.md](TODO.md) 中查看待办事项:发布npm + MCP注册表,跨客户端托管(Streamable HTTP),解析和调度测试,以及真正的屏幕截图演示GIF。
## 许可证
[MIT](LICENSE)