返回市场
ANKI-MCP-服务器

ANKI-MCP-服务器

作者:greycodee2 星标更新:2025-04-27

项目介绍

Anki MCP 服务器

Python 版本 MCP 规范

概述

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

功能

  • 提供了一整套作为MCP工具的Anki操作。
  • 管理与本地Anki-Connect实例的通信。
  • 提供以下工具:
    • 牌组管理(列出、创建、删除、移动卡片、获取统计信息)
    • 卡片管理(查找、获取信息、挂起、取消挂起、检查状态、遗忘、重新学习)
    • 笔记管理(添加、更新、查找、获取信息、管理标签、删除)
    • 模型管理(列出名称、列出字段)
    • 杂项操作(请求权限、获取版本、同步)

预备条件

  1. Anki: 您必须在系统上安装并运行Anki。
  2. Anki-Connect 插件: 必须在Anki中安装并运行Anki-Connect插件。默认情况下,它监听 http://127.0.0.1:8765
  3. Python: 兼容的Python版本(参见 pyproject.toml)。
  4. uv: 推荐用于管理Python环境和依赖项(uv 安装)。

安装

  1. 克隆仓库:
    git clone <repository-url> # 根据实际情况替换URL
    cd anki-mcp-server
    
  2. 安装依赖项:
    uv sync
    

运行服务器

在启动服务器之前,请确保已启用Anki-Connect插件并正在运行Anki。

您可以使用多种方式运行服务器:

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

    uv run python main.py
    

    这将使用标准IO传输启动服务器,适合直接集成或测试。

  2. 开发模式(使用MCP Inspector):

    uv run mcp dev main.py
    

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

  3. 安装到Claude桌面:

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

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

使用方法

一旦服务器运行并与MCP客户端(如通过 mcp install 的Claude桌面或其他使用MCP协议的应用程序)连接:

  1. 请求权限: 第一个动作通常是 anki_request_permission。如果客户端的来源未被Anki-Connect信任,将在Anki中弹出确认对话框。
  2. 使用工具: 调用可用工具(如下所述)以与您的Anki收藏进行交互。

配置

  • Anki-Connect URL: 服务器通过 main.py 中定义的 ANKICONNECT_URL 常量连接到Anki-Connect(默认: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许可证)。