u

ujisati

@ujisati/anki-mcp
0 Stars 318 次浏览 ujisati 更新于 2026-08-23
该服务暂未提供标准配置,请参考 README 手动接入

服务介绍

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工具的添加

相关 MCP 服务