ujisati
服务介绍
anki-mcp
一个用于通过 AnkiConnect 插件与 Anki 卡片交互的 Model Context Protocol (MCP) 服务器。该服务器将 AnkiConnect 操作作为 MCP 工具暴露出来,并按逻辑服务进行组织。
前提条件
- Anki 桌面应用程序
- 在 Anki 中安装并配置了 AnkiConnect 插件
- Python 3.8+
uv(用于运行和安装依赖项,可选但推荐)
安装
bash
克隆仓库
git clone https://github.com/ujisati/anki-mcp.git
cd anki-mcp
安装依赖项(使用 uv)
uv pip install -e .
使用
要运行 MCP 服务器:
bash
uv run anki-mcp
服务器将启动并监听 MCP 请求,通常会通过 http://127.0.0.1:8765 与 AnkiConnect 通信。
检查服务器
您可以使用 MCP Inspector 查看可用工具:
bash
npx @modelcontextprotocol/inspector uv run anki-mcp
MCP 客户端配置
如果您将其与 MCP 客户端(如 AI 助手框架)集成,则需要配置客户端以找到此服务器。以下是一个配置示例片段:
json
{
"mcpServers": {
"anki": {
"command": "uv",
"args": [
"run", // 如果从项目根目录运行,uv 将找到 anki-mcp
"anki-mcp"
],
// 如果从项目目录之外运行,请指定路径:
// "args": [
// "--directory",
// "/ABSOLUTE/PATH/TO/anki-mcp", // 替换为实际路径
// "run",
// "anki-mcp"
// ]
}
}
}
可用的 MCP 工具
此 MCP 服务器通过按服务分组的工具提供对 Anki 功能的访问。工具名称直接对应于 AnkiConnect 操作。
牌组服务 (deck.*)
deck.deckNamesAndIds: 获取完整的牌组名称及其对应的 ID 列表。deck.getDeckConfig: 获取给定牌组名称的配置组对象。deck.deckNames: 获取当前用户的完整牌组名称列表。deck.createDeck: 创建一个新的空牌组。deck.deleteDecks: 删除指定的牌组。deck.changeDeck: 将卡片移动到不同的牌组。deck.saveDeckConfig: 保存牌组配置组。
笔记服务 (note.*)
note.findNotes: 根据给定的 Anki 搜索查询返回笔记 ID。note.notesInfo: 返回指定笔记 ID 的信息。note.getNoteTags: 获取特定笔记 ID 的标签。note.addNote: 创建一个新的笔记。note.updateNoteFields: 修改现有笔记的字段。note.deleteNotes: 删除指定的笔记。note.addNotes: 创建多个笔记。note.addTags: 为指定的笔记添加标签。note.removeTags: 从指定的笔记中移除标签。note.updateNote: 修改现有笔记的字段和/或标签。
卡片服务 (card.*)
card.findCards: 根据给定的 Anki 搜索查询返回卡片 ID。card.cardsInfo: 返回指定卡片 ID 的信息。card.cardsToNotes: 返回给定卡片 ID 的笔记 ID。card.areSuspended: 检查指定的卡片是否被暂停。card.cardsModTime: 返回指定卡片 ID 的修改时间。card.suspended: 检查单个卡片是否被暂停。card.suspend: 暂停指定的卡片。card.unsuspend: 取消暂停指定的卡片。card.setSpecificValueOfCard: 设置单个卡片的特定值(谨慎使用)。
模型服务 (model.*)(笔记类型)
model.modelNamesAndIds: 获取完整的模型(笔记类型)名称及其 ID 列表。model.findModelsByName: 获取提供的模型名称的模型定义。model.modelFieldNames: 获取给定模型名称的字段名称。model.modelTemplates: 获取指定模型每个卡片的模板内容。-model.modelStyling: 获取给定模型名称的CSS样式。model.createModel: 创建一个新的模型(笔记类型)。model.updateModelTemplates: 修改现有模型的模板。model.updateModelStyling: 修改现有模型的CSS样式。model.modelFieldAdd: 向现有模型添加一个新字段。model.modelFieldRemove: 从现有模型中移除一个字段。
媒体服务 (media.*)
media.retrieveMediaFile: 检索媒体文件的base64编码内容。media.getMediaFilesNames: 获取与glob模式匹配的媒体文件名。media.storeMediaFile: 存储媒体文件(来自base64、路径或URL)。media.deleteMediaFile: 删除指定的媒体文件。
开发
要设置开发环境:
bash
uv sync
source .venv/bin/activate
uv pip install -e .
运行测试
bash
pytest
待办事项
- 完成所有AnkiConnect工具的添加