AnkiMCP服务器(插件)
Seamlessly integrate Anki with AI assistants through the Model Context Protocol
Anki插件,通过 模型上下文协议(MCP).
这是什么?
AnkiMCP服务器在Anki内部运行一个本地MCP服务器,允许像Claude这样的人工智能助手与您的闪卡收藏进行交互。这使得人工智能支持的学习课程、卡片创建和收藏管理成为可能。
部分 ankimcp.ai 项目。
首次运行注意事项
首次运行时,此插件会下载 pydantic_core (~2MB)来自PyPI。这是必需的,因为pydantic_core包含无法捆绑在单个插件文件中的特定于平台的二进制文件(Windows/MOSC/Linux)。
特性
- 本地HTTP服务器 -继续运行
http://127.0.0.1:3141/默认情况下 - MCP协议 -兼容任何MCP客户端(克劳德桌面等)
- 自动启动 -Anki打开时服务器自动启动
- 隧道友好型 -与Cloudflare Tunnel、ngrok等合作。
- 跨平台 -适用于macOS、Windows和Linux(x64和ARM)
安装
来自AnkiWeb(推荐)
- 打开Anki并转到 *工具→ 附加组件→ 获取附加组件。..*
- 输入代码:
124672614 - 重新启动Anki
来自GitHub发布
- 下载
anki_mcp_server.ankiaddon从 发布 - 双击安装或使用 *工具→ 附加组件→ 从文件安装。..*
- 重新启动Anki
NixOS 系统
带薄片(推荐)
添加flake输入并使用预构建的包:
# flake.nix
{
inputs.anki-mcp.url = "github:ankimcp/anki-mcp-server-addon";
outputs = { nixpkgs, anki-mcp, ... }: {
# Option A: Standalone — Anki with the addon pre-installed
environment.systemPackages = [
anki-mcp.packages.${system}.default
];
# Option B: Composable with other addons via overlay
nixpkgs.overlays = [ anki-mcp.overlays.default ];
environment.systemPackages = [
(pkgs.anki.withAddons [ pkgs.ankiAddons.anki-mcp-server ])
];
};
}无薄片
# configuration.nix
{ pkgs, ... }:
let
python3 = pkgs.python3;
ankiMcpPythonDeps = python3.withPackages (ps: with ps; [
mcp pydantic pydantic-settings starlette uvicorn anyio httpx websockets
]);
anki-mcp-server = pkgs.anki-utils.buildAnkiAddon (finalAttrs: {
pname = "anki-mcp-server";
version = "0.13.0";
src = pkgs.fetchFromGitHub {
owner = "ankimcp";
repo = "anki-mcp-server-addon";
rev = "v${finalAttrs.version}";
hash = ""; # nix will tell you the correct hash on first build
};
sourceRoot = "${finalAttrs.src.name}/anki_mcp_server";
});
ankiWithMcp = pkgs.anki.withAddons [ anki-mcp-server ];
ankiWrapped = pkgs.symlinkJoin {
name = "anki-with-mcp";
paths = [ ankiWithMcp ];
nativeBuildInputs = [ pkgs.makeWrapper ];
postBuild = ''
wrapProgram $out/bin/anki \
--prefix PYTHONPATH ':' "${ankiMcpPythonDeps}/${python3.sitePackages}"
'';
};
in
{
environment.systemPackages = [ ankiWrapped ];
}用法
当您打开Anki时,服务器会自动启动。通过以下方式检查状态 *工具→ AnkiMCP服务器设置。..*
与克劳德桌面连接
需要 安装。添加到您的Claude桌面配置(~/Library/Application Support/Claude/claude_desktop_config.json 在macOS上):
{
"mcpServers": {
"anki": {
"command": "npx",
"args": ["mcp-remote", "http://127.0.0.1:3141"]
}
}
}注: Claude Desktop在JSON配置中不支持HTTP服务器-- mcp-remote 通过stdio桥接连接。与克劳德代码连接
claude mcp add anki --transport http http://127.0.0.1:3141/配置
通过Anki编辑 *工具→ 附加组件→ AnkiMCP服务器→ 配置*:
{
"mode": "http",
"http_port": 3141,
"http_host": "127.0.0.1",
"http_path": "",
"cors_origins": [],
"cors_expose_headers": ["mcp-session-id", "mcp-protocol-version"],
"auto_connect_on_startup": true,
"disabled_tools": [],
"media_import_dir": "",
"media_allowed_types": [],
"media_allowed_hosts": []
}禁用工具
对AI客户端隐藏特定工具或操作以减少令牌使用:
{
"disabled_tools": [
"sync",
"card_management:bury",
"card_management:unbury"
]
}"tool_name"--禁用整个工具"tool_name:action"--禁用多操作工具中的特定操作
禁用的工具将从MCP模式中完全删除——AI客户端永远看不到它们。工具/操作名称中的拼写错误将产生控制台警告。
自定义路径
集 http_path 在自定义路径下为MCP端点提供服务。当通过隧道(Cloudflare、ngrok)暴露Anki以避免完全开放的端点时很有用:
{
"http_path": "my-secret-path"
}服务器将可在以下位置访问 http://localhost:3141/my-secret-path/ 而不是根。为默认行为留空。
CORS配置
要允许基于浏览器的MCP客户端(如网络托管的MCP检查器),请添加允许的源:
{
"cors_origins": ["https://inspector.example.com", "http://localhost:5173"]
}使用 ["*"] 允许所有来源(不建议用于生产)。
这 cors_expose_headers 设置控制浏览器可以读取哪些响应标头。默认值(mcp-session-id, mcp-protocol-version)MCP Streamable HTTP协议在浏览器中工作所必需的。
媒体安全
多亏了 高桥英明 (哥伦比亚大学)负责披露媒体路径遍历漏洞。
这 store_media_file 该工具验证所有输入,以防止路径遍历和SSRF攻击:
- 文件路径 通过MIME类型检查仅限于媒体文件(图像、音频、视频)
- 网址 必须使用
http://或https://并且不能针对专用/内部网络 - 文件名 经过净化以删除路径遍历序列
通过配置进行可选硬化:
{
"media_import_dir": "/Users/me/anki-media",
"media_allowed_types": ["application/pdf"],
"media_allowed_hosts": ["192.168.1.50", "my-nas.local"]
}media_import_dir--限制文件路径导入到此目录树(空=无限制)media_allowed_types--允许图像/音频/视频之外的其他MIME类型media_allowed_hosts--允许特定主机绕过专用网络阻塞
可用工具
基本工具
| 工具 | 说明 |
|---|---|
sync | 将收藏与AnkiWeb同步 |
list_decks | 列出集合中的所有甲板 |
create_deck | 创建新甲板 |
find_notes | 使用Anki的搜索语法搜索笔记 |
notes_info | 获取有关笔记的详细信息 |
add_note | 在卡片组中添加新笔记 |
add_notes | 批量添加最多100张共享同一套牌和型号的钞票。使用Anki的本机批处理API进行原子撤消。支持部分成功——个人失败不会影响他人 |
card_management | 通过9个操作管理卡片: reposition (设置学习顺序), change_deck (在甲板之间移动), bury/unbury (躲到明天), suspend/unsuspend (无限期排除在审查之外), set_flag (颜色标志0-7), set_due_date (用DSL日期重新安排), forget_cards (重置为新) |
tag_management | 通过5个操作管理标签: add_tags/remove_tags (批量添加/删除笔记), replace_tags (将一个标签换成另一个标签), get_tags (列出全部), clear_unused_tags (删除孤儿) |
filtered_deck | 过滤甲板生命周期: create_or_update (创建或修改带有搜索词的过滤组), rebuild (重新填充), empty (将卡片放回主牌组), delete |
update_note_fields | 更新现有注释的字段 |
delete_notes | 从收藏中删除笔记 |
get_due_cards | 获取下一张到期卡以供审核(支持 skip_images/skip_audio 用于语音模式) |
present_card | 获取卡片内容以供审核 |
rate_card | 审核后对卡片进行评分(再次/难/好/容易) |
model_names | 列出可用的笔记类型 |
model_field_names | 获取笔记类型的字段名称和描述 |
model_styling | 获取注释类型的CSS样式 |
update_model_styling | 更新注释类型的CSS样式 |
create_model | 创建新的笔记类型 |
store_media_file | 通过base64、文件路径或URL存储媒体文件(图像/音频)。文件路径根据媒体类型分配列表进行验证;检查URL是否有SSRF |
get_media_files_names | 列出与模式匹配的媒体文件 |
delete_media_file | 将媒体文件移动到Anki的垃圾箱(可通过Check media恢复) |
FSRS工具
| 工具 | 说明 |
|---|---|
get_fsrs_params | 获取甲板预设的FSRS调度程序参数 |
set_fsrs_params | 更新FSRS参数(权重、所需保留、最大间隔) |
get_card_memory_state | 获取卡片的FSRS内存状态(稳定性、难度、可检索性) |
optimize_fsrs_params | 使用Anki的内置优化器运行FSRS参数优化 |
GUI工具
这些工具与Anki的用户界面交互:
| 工具 | 说明 |
|---|---|
gui_browse | 使用搜索查询打开卡浏览器 |
gui_add_cards | 打开“添加卡”对话框 |
gui_edit_note | 打开特定注释的注释编辑器 |
gui_current_card | 获取当前显示的卡的信息 |
gui_show_question | 显示当前卡片的问题侧 |
gui_show_answer | 显示当前卡片的答案面 |
gui_select_card | 在审阅者中选择特定卡片 |
gui_deck_browser | 导航到甲板浏览器 |
gui_undo | 撤消上次操作 |
资源
| 资源 | URI | 描述 |
|---|---|---|
system_info | anki://system-info | Anki版本、配置文件和调度程序信息 |
query_syntax | anki://query-syntax | Anki搜索查询语法参考 |
schema | anki://schema | 数据模型文档(实体、字段、关系) |
stats_today | anki://stats/today | 今天的学习统计 |
stats_forecast | anki://stats/forecast | 30天回顾预测 |
stats_collection | anki://stats/collection | 总体收集统计 |
fsrs_config | anki://fsrs/config | FSRS配置摘要和参数 |
鼓励
| 提示 | 描述 |
|---|---|
review_session | 引导式复习工作流程(交互式、快速或语音模式) |
需求
- Anki 25.07或更高版本 (发布Python 3.13)
- Anki 25.02及更早版本发布了Python 3.9 不支持 --MCP SDK需要Python 3.10+(#8)
建筑
该插件在后台线程中使用HTTP传输(FastMCP+uvicorn)运行MCP服务器。所有Anki操作都通过队列系统桥接到主Qt线程,遵循与AnkiConnect相同的经过验证的模式。
有关详细信息,请参阅 Anki插件开发文档.
发展
运行E2E测试
E2E测试在Docker中针对真实的Anki实例运行,使用 无头安吉.
# Install test dependencies
python -m venv .venv
source .venv/bin/activate
pip install -r requirements-dev.txt
# Build the addon
./package.sh
# Start Anki container
cd .docker && docker compose up -d && cd ..
# Run tests (waits for server automatically)
pytest tests/e2e/ -v
# Stop container
cd .docker && docker compose down或者使用Makefile快捷方式:
make e2e # Build, start container, run tests, stop
make e2e-up # Just start container
make e2e-test # Just run tests
make e2e-down # Just stop containerCI
E2E测试在任何分支和PR上自动运行 main。参见 .github/workflows/e2e.yml.
许可证
AGPL-3.0或更高版本
链接
- ankimcp.ai -项目主页
- MCP协议 -模型上下文协议规范
- Anki附加文件 -官方Anki插件开发文档
