Anki MCP 服务器

一个模型上下文协议(MCP)服务器,使LLM能够通过AnkiConnect与Anki闪卡软件交互,支持创建、管理和批量导入闪卡。

  • by mkrech
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 mkrech/anki-mcp-server

使用说明

Anki MCP服务器

一种模型上下文协议(MCP)服务器,使LLM能够通过AnkiConnect与Anki闪存卡软件进行交互。

特性

工具

  • list_decks -列出所有可用的Anki甲板
  • create_deck -创建新的Anki甲板
  • create_note -创建新笔记(基本或完形)
  • batch_create_notes -一次创建多个笔记
  • search_notes -使用Anki查询语法搜索笔记
  • get_note_info -获取有关笔记的详细信息
  • update_note -更新现有注释
  • delete_note -删除注释
  • list_note_types -列出所有可用的笔记类型
  • create_note_type -创建新的笔记类型
  • get_note_type_info -获取笔记类型的详细结构

资源

  • anki://decks/all -可用甲板的完整列表
  • anki://note-types/all -所有可用笔记类型列表
  • anki://note-types/all-with-schemas -所有笔记类型的详细结构信息
  • anki://note-types/{modelName} -特定笔记类型的详细结构信息

先决条件

  1. 安基 已安装并正在运行
  2. AnkiConnect Anki中安装的插件

安装

开发安装

# Clone the repository
git clone <repository-url>
cd anki-tutor

# Create virtual environment and install
uv venv
uv pip install -e ".[dev]"

使用Claude Desktop

添加到您的 claude_desktop_config.json:

{
  "mcpServers": {
    "anki": {
      "command": "uv",
      "args": ["run", "anki-mcp-server"]
    }
  }
}

使用自定义AnkiConnect端口

{
  "mcpServers": {
    "anki": {
      "command": "uv",
      "args": ["run", "anki-mcp-server", "--port", "8080"]
    }
  }
}

用法示例

创建基本卡

"Create an Anki card in the 'Default' deck:
Front: What is the capital of France?
Back: Paris"

创建Cloze卡

"Create a cloze card in the 'Programming' deck:
In Python, {{c1::list comprehensions}} provide a concise way to create {{c2::lists}}."

批量创建卡片

"Create 5 vocabulary cards for Spanish in the 'Spanish' deck from this list:
- hello: hola
- goodbye: adiós
- thank you: gracias
- please: por favor
- you're welcome: de nada"

工作流程:PDF到Anki Pipeline

该项目支持将教育PDF转换为Anki抽认卡的完整流程:

第一阶段:PDF处理

PDF → Docling Raw JSON → Intermediate JSON

第一步:将PDF转换为原始文档

  • 使用Docling DocumentConverter提取文档结构
  • 保留节、表、图像、公式和层次结构
  • 输出: *_docling.json 和 *_docling.md 文件
  • 地点: data/input/intermediate/docling_raw/

步骤2:转换为中间格式

  • 将文档输出转换为结构化部分
  • 提取层次结构、元数据和内容关系
  • 输出: *.json 具有标准化结构的文件
  • 地点: data/input/intermediate/

第2阶段:闪存卡生成和导入

Intermediate JSON → LLM via MCP → Anki (via AnkiConnect)

步骤3:通过LLM生成闪卡

LLM分析中间JSON内容,并生成具有经过验证的发行版的抽认卡:

  • 55%的卡 -填写定义、公式、概念的空白处
  • 30%KPRIM卡 -四个具有真/假评估的陈述
  • 10%多项选择 -可能有多个正确答案
  • 5%单选 -一个正确答案

步骤4:批量导入Anki

  • 通过以下方式创建甲板结构 create_deck 工具
  • 通过以下方式批量导入10-12张卡 batch_create_notes
  • 使用 allow_duplicate=true 遇到类似卡片时的参数
  • 在中生成导入报告 data/progress/ 目录

完整示例

1. Source: data/input/pdfs/pgm/exams/midterm-exam.pdf
   
2. Convert to Docling Raw:
   → data/input/intermediate/docling_raw/midterm-exam_docling.json
   → data/input/intermediate/docling_raw/midterm-exam_docling.md
   
3. Convert to Intermediate:
   → data/input/intermediate/midterm-exam.json
   
4. Generate & Import:
   → LLM analyzes content
   → Generates 50 cards (28 Cloze, 15 KPRIM, 5 MC, 2 SC)
   → Creates deck: PGM::MidtermExam
   → Imports in 5 batches (10-12 cards each)
   
5. Report:
   → data/progress/midterm-exam-import-report.md

最佳实践

批量导入策略:

  • 每批处理10-12张卡,以获得最佳可靠性
  • 监控成功率,必要时进行调整
  • 使用 allow_duplicate=true 适用于具有类似图案的KPRIM卡

质量跟踪:

  • 每次会话后生成详细的导入报告
  • 跟踪卡的分发、覆盖范围和成功率
  • 将报告存储在 data/progress/ 供参考

卡分发:

  • 维持55/30/10/5的比例,以促进全面学习
  • 平衡理论知识(完形填空)和应用(KPRIM/MC/SC)
  • 涵盖源材料中的所有主要主题

发展

运行测试

pytest

代码质量

# Format code
ruff format .

# Lint code
ruff check .

# Auto-fix issues
ruff check --fix .

本地运行

# Default port (8765)
uv run anki-mcp-server

# Custom port
uv run anki-mcp-server --port 8080

# With debug logging
uv run anki-mcp-server --log-level DEBUG

建筑

  • client.py -AnkiConnect API包装器(反腐败层)
  • tools.py -用于所有Anki操作的MCP工具处理程序
  • resources.py -带缓存的MCP资源处理程序
  • server.py -主MCP服务器实现
  • __main__.py -CLI入口点

故障排除

“无法连接到Anki”

  1. 确保Anki正在运行
  2. 验证是否安装了AnkiConnect插件
  3. 检查AnkiConnect是否在正确的端口上侦听(默认值:8765)
  4. 重新启动Anki并重试

“未找到甲板”

  • 首先在Anki中手动创建甲板,或
  • 使用 create_deck 创建笔记前的工具

“未找到注释类型”

  • 使用 list_note_types 查看可用类型
  • 使用 get_note_type_info 查看必填字段
  • 确保字段名称完全匹配(区分大小写)

许可证

MIT许可证