这是一个用于通过AnkiConnect插件与Anki闪卡互动的模型上下文协议(MCP)服务器。该服务器将AnkiConnect操作作为MCP工具公开,并组织成逻辑服务。
uv(用于运行和安装依赖项,可选但推荐)# 克隆仓库
git clone https://github.com/ujisati/anki-mcp.git
cd anki-mcp
# 安装依赖项(使用uv)
uv pip install -e .
要运行MCP服务器:
uv run anki-mcp
服务器启动后会监听MCP请求,通常与在http://127.0.0.1:8765上的AnkiConnect进行交互。
你可以使用MCP Inspector来查看可用的工具:
npx @modelcontextprotocol/inspector uv run anki-mcp
如果你正在将其集成到一个MCP客户端(如AI助手框架),你需要配置它以找到此服务器。这里是一个配置片段示例:
{
"mcpServers": {
"anki": {
"command": "uv",
"args": [
"run", // 如果从项目根目录运行,uv会找到anki-mcp
"anki-mcp"
],
// 如果从项目目录外运行,请指定路径:
// "args": [
// "--directory",
// "/ABSOLUTE/PATH/TO/anki-mcp", // 替换为实际路径
// "run",
// "anki-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: 删除指定的媒体文件。设置开发环境:
uv sync
source .venv/bin/activate
uv pip install -e .
pytest