这是一个通过模型上下文协议(MCP)与 Anki 进行交互的 FastMCP 服务器。该服务器提供了全面的工具来管理 Anki 的卡片集、笔记和笔记类型,并具有高级功能,包括基于人工智能的音频生成、批量操作和语义相似性搜索。
该项目集成了一些外部 API 来提供增强的功能:
GOOGLE_CLOUD_API_KEY 环境变量使用 uv 安装依赖项:
uv sync
确保 Anki 正在运行且已安装 AnkiConnect 插件:
2055492159(可选)设置用于音频生成的 API 密钥:
# 用于 Google Cloud TTS 的音频生成
export GOOGLE_CLOUD_API_KEY='your-google-cloud-api-key-here'
运行服务器:
uv run server.py
要将此 MCP 服务器与 Claude 桌面一起使用,请在您的 claude_desktop_config.json 文件中添加以下配置:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json{
"mcpServers": {
"anki-mcp": {
"command": "uv",
"args": [
"--directory",
"/path/to/your/anki-mcp/",
"run",
"server.py"
],
"env": {
"GOOGLE_CLOUD_API_KEY": "your-google-cloud-api-key-here"
}
}
}
}
uv sync/path/to/your/anki-mcp/ 替换为您实际的 anki-mcp 目录路径your-google-cloud-api-key-here 替换为您的实际 Google Cloud API 密钥(用于音频生成)uv 命令会自动处理 Python 环境和依赖项uv(curl -LsSf https://astral.sh/uv/install.sh | sh)如果您希望将 API 密钥保存在 shell 环境中,可以省略 env 部分:
{
"mcpServers": {
"anki-mcp": {
"command": "uv",
"args": [
"--directory",
"/path/to/your/anki-mcp/",
"run",
"server.py"
]
}
}
}
然后在您的 shell 中设置环境变量:
export GOOGLE_CLOUD_API_KEY='your-google-cloud-api-key-here'
配置完成后,重启 Claude 桌面,您应该可以在对话中看到 Anki MCP 工具。您可以通过请求 Claude 列出您的 Anki 卡片集或尝试任何可用工具来进行验证。
list_decks列出所有可用的 Anki 卡片集及其数量。
参数:无
返回值:格式化的字符串,包含所有卡片集名称及总数
get_deck_notes从特定卡片集中检索所有笔记/卡片及其详细信息。
参数:
deck_name (str):要检索笔记的 Anki 卡片集名称返回值:关于所有笔记的详细信息,包括模型名称、标签和字段值
get_deck_sample获取卡片集中的随机样本笔记,以了解典型的笔记结构。
参数:
deck_name (str):要采样的 Anki 卡片集名称sample_size (int, 可选):要采样的笔记数量(1-50,默认:5)返回值:关于采样笔记的详细信息
get_deck_note_types分析卡片集以识别所有笔记类型(模型)及其字段定义。
参数:
deck_name (str):要分析的 Anki 卡片集名称返回值:卡片集中使用的所有唯一笔记类型及其字段名称
create_note在指定的卡片集中创建新的笔记。
参数:
deck_name (str):要添加笔记的 Anki 卡片集名称model_name (str):要使用的笔记类型/模型名称fields (dict):字段名称到值的映射字典(例如,{'Front': '问题', 'Back': '答案'})tags (list, 可选):要添加到笔记的可选标签列表返回值:包含 noteId 和成功状态或错误消息的 JSON 对象
update_note更新现有笔记的特定字段,同时保留其他字段。
参数:
note_id (int):要更新的笔记的 IDfields (dict):字段名称到新值的映射字典(例如,{'Audio': '[sound:发音.mp3]'})tags (list, 可选):要替换现有标签的可选标签列表返回值:包含成功状态和更新字段信息的 JSON 对象
用例:非常适合为现有的卡片添加音频文件或更新特定内容
create_deck_with_note_type创建一个新的卡片集,并可选地创建一个带有自定义字段和模板的新笔记类型。
参数:
deck_name (str):新 Anki 卡片集的名称model_name (str):笔记类型/模型的名称fields (list):字段名称列表(例如,['正面', '背面', '额外'])card_templates (list, 可选):可选的卡片模板定义列表返回值:包含创建状态和详细信息的 JSON 对象
list_note_types列出所有可用的笔记类型(模型)及其详细信息。
参数:无
返回值:关于所有笔记类型的详细信息,包括字段、模板和样式
generate_audio使用 Google Cloud 文本转语音 API 和 Chirp 声音从文本生成高质量音频文件。
参数:
text (str):要转换为语音的文本language (str, 可选):语言代码(默认:"cmn-cn" 用于中文)voice (str, 可选):声音名称(默认:"cmn-CN-Chirp3-HD-Achernar" 用于中文高清声音)返回值:包含 base64 编码的 MP3 音频数据和元数据的 JSON 对象
设置:需要 GOOGLE_CLOUD_API_KEY 环境变量
特性:具有自然发音的高清声音,特别是对于中文学习非常出色
save_media_file将 base64 编码的媒体数据保存为 Anki 媒体收藏中的文件,以便在卡片中使用。
参数:
filename (str):要保存的文件名称(例如,'audio.mp3', 'image.jpg')base64_data (str):base64 编码的文件数据media_type (str, 可选):媒体文件类型(默认:"audio")返回值:包含保存的文件名和成功状态的 JSON 对象
用例:保存生成的音频或其他媒体文件以在 Anki 卡片中使用
generate_and_save_audio从文本生成音频并将其直接保存到 Anki 的媒体收藏中,一次完成。
参数:
text (str):要转换为语音并保存的文本filename (str):音频文件的名称(例如,'发音.mp3')language (str, 可选):语言代码(默认:"cmn-cn" 用于中文)voice (str, 可选):声音名称(默认:"cmn-CN-Chirp3-HD-Achernar")返回值:包含文件名和用于卡片字段的 sound 标签的 JSON 对象
设置:需要 GOOGLE_CLOUD_API_KEY 环境变量
用例:一步生成和保存音频,返回 [sound:filename.mp3] 标签,准备用于卡片字段
create_notes_bulk在一个批次操作中创建多个笔记,以实现最大效率。优雅地处理重复项,报告哪些笔记是重复项,同时仍创建非重复项。新功能:可选地为每个笔记自动生成音频文件使用 Google TTS。
参数:
deck_name (str):要添加笔记的 Anki 卡片集名称
notes_list (list):笔记字典列表,每个字典包含 'model_name', 'fields',以及可选的 'tags'
auto_audio (AutoAudioConfig 或 null, 可选):重要:作为下述结构所示的字典/对象传递,而不是 JSON 字符串。 自动音频生成配置:
enabled (bool, 必需):必须为 true 才能启用音频生成source_field (str, 必需):要从中读取文本的字段名称(例如,"正面", "汉字")target_field (str, 必需):要写入音频标签的字段名称(例如,"音频")language (str, 可选):语言代码 - 默认为 "cmn-cn" 用于中文voice (str, 可选):声音名称 - 默认为 "cmn-CN-Chirp3-HD-Achernar"正确格式(字典对象):
{
"enabled": true,
"source_field": "汉字",
"target_field": "音频",
"language": "cmn-cn",
"voice": "cmn-CN-Chirp3-HD-Achernar"
}
错误 - 不要作为字符串传递:
"{\"enabled\": true, \"source_field\": \"汉字\", ...}" ❌ 错误
要禁用音频生成,传递 null 或完全省略此参数。
返回值:包含成功/失败计数、成功笔记数组、失败笔记数组以及如果启用音频生成的结果的 JSON 对象
特性:
用例:一次性高效创建 20 张中文词汇卡片并附带音频,而不是分别创建卡片再逐一更新
update_notes_bulk在一个批次操作中更新多个笔记,以实现最大效率。
参数:
updates (list):更新字典列表,每个字典包含 'note_id', 'fields' 字典,以及可选的 'tags' 列表返回值:包含成功/失败计数和详细更新结果的 JSON 对象
用例:非常适合批量更新,如一次性为多张卡片添加音频文件
find_similar_notes查找包含搜索文本作为子字符串的任何字段中的笔记。简单而可靠的文本匹配。
参数:
deck_name (str):要在其中搜索的 Anki 卡片集名称search_text (str):要在任何字段中搜索的子字符串case_sensitive (bool, 可选):搜索是否应区分大小写(默认:false)max_results (int, 可选):要返回的最大匹配笔记数(默认:2_0)返回值:包含匹配笔记及其详细信息的 JSON 对象,显示哪些字段匹配了搜索条件
特性: