Anki闪卡协议服务

一个通过AnkiConnect插件与Anki闪卡交互的模型上下文协议(MCP)服务器,提供对Anki功能的程序化访问。

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

使用说明

安基mcp

一个模型上下文协议(MCP)服务器,用于通过AnkiConnect插件与Anki闪卡交互。该服务器将AnkiConnect操作作为MCP工具公开,并组织成逻辑服务。

先决条件

  • Anki桌面应用程序
  • 在Anki中安装和配置AnkiConnect插件
  • Python 3.8+
  • uv (用于运行和安装依赖项,可选但推荐)

安装

# Clone the repository
git clone https://github.com/ujisati/anki-mcp.git
cd anki-mcp

# Install dependencies (using uv)
uv pip install -e .

用法

要运行MCP服务器,请执行以下操作:

uv run anki-mcp

服务器将启动并监听MCP请求,通常在 http://127.0.0.1:8765.

检查服务器

您可以使用MCP检查器查看可用工具:

npx @modelcontextprotocol/inspector uv run anki-mcp

MCP客户端的配置

如果您将其与MCP客户端(如AI助手框架)集成,则需要对其进行配置以找到此服务器。以下是一个示例配置片段:

{
    "mcpServers": {
        "anki": {
            "command": "uv",
            "args": [
                "run", // uv will find anki-mcp if run from project root
                "anki-mcp"
            ],
            // If running from outside the project directory, specify the path:
            // "args": [
            //     "--directory",
            //     "/ABSOLUTE/PATH/TO/anki-mcp", // Replace with actual path
            //     "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:删除指定的媒体文件。

发展

为发展而设立:

uv sync
source .venv/bin/activate

uv pip install -e .

运行测试

pytest

全部

  • []完成添加所有AnkiConnect工具