Anki连接服务器

Anki MCP Server是一个模型上下文协议(MCP)服务器,通过Anki-Connect插件与Anki间隔重复软件进行交互,管理卡片、牌组和笔记。

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

使用说明

Anki MCP服务器

概述

该项目提供了一个模型上下文协议(MCP)服务器,充当到 安基 通过间隔重复软件 Anki Connect 它允许MCP兼容的客户端(如AI助手或其他应用程序)与您的Anki收藏进行交互,管理套牌、卡片和笔记。

特性

  • 将一套全面的Anki操作作为MCP工具公开。
  • 管理与本地Anki Connect实例的通信。
  • 提供以下工具:
    • 牌组管理(列表、创建、删除、移动卡片、获取统计数据)
    • 卡片管理(查找、获取信息、暂停、取消暂停、检查状态、忘记、重新学习)
    • 笔记管理(添加、更新、查找、获取信息、管理标签、删除)
    • 模型管理(列表名称、列表字段)
    • 其他操作(请求权限、获取版本、同步)

先决条件

  1. 安基: 您必须在系统上安装并运行Anki。
  2. Anki Connect附加组件: Anki Connect插件必须安装在Anki中并运行。默认情况下,它会监听 http://127.0.0.1:8765.
  3. python 兼容的Python版本(参见 pyproject.toml).
  4. 紫外线: 建议用于管理Python环境和依赖关系(紫外线装置).

安装

  1. 克隆存储库:
    git clone <repository-url> # Replace with the actual URL if applicable
    cd anki-mcp-server
    
  2. 安装依赖项:
    uv sync
    

运行服务器

在启动服务器之前,确保Anki在启用Anki Connect插件的情况下运行。

您可以通过多种方式运行服务器:

  1. 直接执行(使用uv):

    uv run python main.py
    

    这将使用stdio传输启动服务器,适用于直接集成或测试。

  2. 开发模式(使用MCP检查器):

    uv run mcp dev main.py
    

    这将启动服务器并打开MCP检查器工具,允许您交互式地测试可用的工具和资源。

  3. 为Claude Desktop安装:

    uv run mcp install main.py --name "Anki Bridge"
    

    这将服务器安装到Claude Desktop(如果可用)中,使Anki工具可以在助手中访问。

用法

一旦服务器运行并连接到MCP客户端(如Claude Desktop通过 mcp install 或使用MCP协议的另一个应用程序):

  1. 请求权限: 第一个动作通常应该是 anki_request_permission。如果Anki Connect不信任客户端的来源,Anki中将会出现一个确认弹出窗口。
  2. 使用工具: 调用下面列出的可用工具与您的Anki系列进行交互。

配置

  • Anki连接URL: 服务器使用由定义的URL连接到Anki Connect ANKICONNECT_URL 常数in main.py (默认值: http://127.0.0.1:8765).如果您的Anki Connect设置使用了不同的地址或端口,请修改此设置。

可用工具

服务器公开以下工具,镜像Anki-Connect API操作:

甲板动作

  • anki_deck_names:获取甲板名称的完整列表。
  • anki_deck_names_and_ids:获取甲板名称及其ID。
  • anki_create_deck(deck_name: str):创建新的空甲板。
  • anki_change_deck(card_ids: List[int], deck_name: str):将卡片移动到不同的牌组。
  • anki_delete_decks(deck_names: List[str]):删除指定的牌组及其卡片。
  • anki_get_deck_stats(deck_names: List[str]):获取指定甲板的统计信息。

卡片操作

  • anki_find_cards(query: str):使用Anki搜索查询查找卡片。
  • anki_cards_info(card_ids: List[int]):获取有关多张卡的详细信息。
  • anki_cards_to_notes(card_ids: List[int]):获取给定卡ID的注释ID。
  • anki_suspend_cards(card_ids: List[int]):暂停指定的卡。
  • anki_unsuspend_cards(card_ids: List[int]):取消使用指定的卡。
  • anki_are_suspended(card_ids: List[int]):检查卡是否被暂停。
  • anki_are_due(card_ids: List[int]):检查卡片是否需要审核。
  • anki_forget_cards(card_ids: List[int]):将指定的卡重置为新卡。
  • anki_relearn_cards(card_ids: List[int]):将指定的卡片置于重新学习状态。

注释操作

  • anki_add_note(...):使用指定的面板、模型、字段、选项、标记和介质创建新的Anki注释。
  • anki_update_note_fields(...):修改现有注释的字段和介质。
  • anki_find_notes(query: str):使用Anki搜索查询查找笔记。
  • anki_notes_info(note_ids: List[int]):获取有关多个笔记的详细信息。
  • anki_get_note_tags(note_id: int):获取特定注释的标记。
  • anki_add_tags(note_ids: List[int], tags: str):在笔记中添加空格分隔的标记。
  • anki_remove_tags(note_ids: List[int], tags: str):从笔记中删除空格分隔的标记。
  • anki_update_note_tags(note_id: int, tags: List[str]):设置注释的标签,替换旧标签。
  • anki_delete_notes(note_ids: List[int]):删除指定的笔记及其卡片。

模型动作

  • anki_model_names():获取模型(注释类型)名称的列表。
  • anki_model_field_names(model_name: str):获取给定模型的字段名列表。

其他操作

  • anki_request_permission():请求使用Anki-Connect API的权限。应该先打电话。
  • anki_version():获取Anki-Connect API的版本。
  • anki_sync():将本地Anki集合与AnkiWeb同步。

贡献

欢迎投稿!请参阅项目的贡献指南(如有)。

许可证

指定分发此项目所依据的许可证(例如,MIT许可证)。