用于 Anki 的 MCP 服务器。此服务器允许通过模型上下文协议(MCP)与 Anki 进行交互。它使用户能够以编程方式管理闪卡、卡片组以及复习过程。
.env 文件中设置为 AZURE_API_KEY)和 Anki 媒体目录(设置为 ANKI_MEDIA_DIR)。强烈建议本地运行,因为 AnkiConnect 只能在本地工作。
仅在 Windows 上进行了测试。
npx 本地运行如果您只想使用该工具而不进行开发,
您可以使用 npx 在本地启动一个 MCP STDIO 服务器:
npx -y github:nietus/anki-mcp
这可以在桌面 MCP 客户端(如 Msty Studio 或其他客户端)中使用。
或者,您可以通过以下步骤使用源代码在本地运行:
克隆仓库:
git clone https://github.com/nietus/anki-mcp
安装依赖项:
npm install
构建项目
npm run build
设置音频功能(如果要使用音频工具):
在根目录创建一个 .env 文件,并添加您的 Azure API 密钥和 Anki 媒体目录:
AZURE_API_KEY=your_azure_api_key_here
ANKI_MEDIA_DIR=path/to/your/anki/media/directory
对于 Anki 媒体目录,请使用您的 Anki 收藏夹.media 文件夹的路径。这是存储音频文件的位置。如果有问题,请直接将其粘贴到代码中。
C:\Users\username\AppData\Roaming\Anki2\User 1\collection.media/Users/username/Library/Application Support/Anki2/User 1/collection.media/home/username/.local/share/Anki2/User 1/collection.media注意: ANKI_MEDIA_DIR 是必需的,以便正确生成音频,因为 Anki 需要在其媒体收藏夹中找到音频文件。
与 Cursor 设置集成(用于本地执行):
要使用 Cursor 启动本地构建的 anki-mcp,需要告诉 Cursor 如何启动服务器。以下是您可以在 Cursor 设置中访问的示例配置。替换 YOUR_USERNAME 并根据需要调整路径,如果您将 anki-mcp 克隆到了下载文件夹以外的位置。
Windows:
"anki": {
"command": "cmd",
"args": [
"/c",
"node",
"c:/Users/YOUR_USERNAME/Downloads/anki-mcp/build/client.js"
]
}
使用 .mcpb 包与 Claude Desktop 集成:
推荐的方式是将此服务器作为 MCP 扩展包(.mcpb 文件)安装到 Claude Desktop 中。
构建并打包扩展:
npm install
npm run build
npm run pack:mcpb
这将在 dist/anki-mcp.mcpb 中生成一个文件。
在 Claude Desktop 中安装包:
dist/anki-mcp.mcpb 文件拖放到扩展面板中。Claude 将自动处理服务器的启动。
配置环境变量:
在安装过程中提示时,提供您的 AZURE_API_KEY 和 ANKI_MEDIA_DIR(指向您的 Anki collection.media 文件夹的路径)。这些对于音频功能和媒体文件处理是必需的。
这就是全部!不需要手动配置——一旦安装了 .mcpb 包,Claude Desktop 将为您管理服务器。
macOS / Linux:
"anki": {
"command": "bash",
"args": [
"-c",
"node /Users/YOUR_USERNAME/Downloads/anki-mcp/build/client.js"
]
}
如果您希望在 Claude Desktop 内实现一键安装,可以将此服务器打包为 MCP 包:
安装依赖项并构建项目:
npm install
npm run build
生成 .mcpb 包(需要 @anthropic-ai/mcpb CLI,期望 Node.js 18+):
npm run pack:mcpb
脚本会编译服务器(build/),复制运行时依赖项,并生成 dist/anki-mcp.mcpb。将该文件拖放到 Claude Desktop 的设置 → 扩展面板中以进行安装。在提示时,提供 Azure 语音 API 密钥和 Anki 媒体目录,以便音频工具可以将文件保存到您的 collection.media 文件夹中。
要调试工具,请使用
npm run inspector
服务器提供了以下工具来与 Anki 进行交互:
update_cards:
cardId(数字)和 ease(数字,1-4)。add_card:
update_note_fields 并提供 noteId。注释内容使用 HTML。
<br><pre style="background-color: transparent; padding: 10px; border-radius: 5px;"><ol> 和 <li><strong><em>fields:(对象)键为字段名称(例如,“汉字”,“拼音”),值为其 HTML 内容的对象。modelName:(字符串)要使用的 Anki 笔记类型(模型)的名称。deckName:(可选字符串)要添加卡片的卡片组的名称。默认为当前卡片组或“默认”。tags:(可选字符串数组)要添加到笔记的标签列表。add_card_with_audio:
update_card_with_audio 并提供 noteId。fields,modelName,deckName,tags:与 add_card 相同。sourceField:(字符串)包含要生成音频的文本的字段名称。audioField:(字符串)将存储生成音频的字段名称。language:(可选字符串)TTS 的语言代码(例如,'en','es','fr')。默认为 'en'。update_card_with_audio:
add_card_with_audio。noteId:(数字)要更新的 Anki 笔记的 ID。sourceField:(字符串)包含要生成音频的文本的字段名称。audioField:(字符串)将存储生成音频的字段名称。language:(可选字符串)TTS 的语言代码。默认为 'en'。get_due_cards:
num(数字)。get_new_cards:
num(数字)。get_deck_names:
find_cards:
query(字符串,例如,'deck:Default -tag:test',或 '"deck:My Deck" tag:important')。为了筛选空字段,使用 '-FieldName:_*'(例如,'-Hanzi:_*')。update_note_fields:
add_card。noteId(数字),fields(对象,例如,{"正面": "新问题", "背面": "新答案"})。create_deck:
deckName(字符串)。bulk_update_notes:
add_bulk。尽可能在单个操作中完成所有更新。notes 数组,其中每个笔记包含 noteId(数字)和 fields(对象)。get_model_names:
get_model_details:
modelName(字符串)。get_deck_model_info:
deckName(字符串)。deckName,状态(例如,“找到单一模型”,“找到多个模型”,“未找到笔记”,“未找到卡片组”),以及条件性 modelName(字符串)或 modelNames(字符串数组)的对象。add_note_type_field:
modelName(字符串),fieldName(字符串)。remove_note_type_field:
modelName(字符串),fieldName(字符串)。rename_note_type_field:
modelName(字符串),oldFieldName(字符串),newFieldName(字符串)。reposition_note_type_field:
modelName(字符串),fieldName(字符串),index(数字)。update_note_type_templates:
modelName(字符串),templates(对象,例如,{"卡片 1": {"正面": "html", "背面": "html"}})。update_note_type_styling:
modelName(字符串),css(字符串)。create_model:
modelName(字符串),fieldNames(字符串数组),cardTemplates(对象数组,每个对象包含 Name,正面,背面 HTML 字符串),css(可选字符串),isCloze(可选布尔值,默认为 false),modelType(可选字符串,默认为 'Standard')。add_bulk:
bulk_update_notes 并提供 noteIds。尽可能在单个操作中完成所有添加。必须使用 HTML 格式化卡片内容。notes 数组,其中每个笔记对象包含:
fields:(对象)键为字段名称,值为其 HTML 内容的对象。modelName:(字符串)为此笔记使用的 Anki 笔记类型(模型)的名称。deckName:(可选字符串)此笔记的卡片组名称。默认为 '默认'。tags:(可选字符串数组)此笔记的标签列表。更多详情请参阅 Anki 集成 | Smithery