Anki MCP
официальныйMCP-сервер, который позволяет AI-ассистентам взаимодействовать с Anki — приложением для интервальных повторений флеш-карт.
Что можно делать с Anki MCP?
- Review due cards — Попросите ассистента показать карточки, срок повторения которых наступил, из конкретной колоды, и провести вас по ним с помощью
get_due_cardsиpresent_card. - Rate card performance — Попросите ассистента записать качество вашего ответа (Again, Hard, Good, Easy), чтобы перенести повторения через
rate_card. - Create custom flashcards — Поручите ассистенту создать новые типы заметок с пользовательскими полями и RTL-стилизацией с помощью
createModelиupdateModelStyling, а затем массово добавить заметки черезaddNotes. - Manage note content — Ищите заметки с помощью синтаксиса запросов Anki (
deck:,tag:,is:due) черезfindNotes, затем обновляйте их поля с помощьюupdateNoteFields. - Import media into cards — Попросите ассистента загрузить изображение из локального пути или URL с помощью
storeMediaFileи вставить его в поле выбранной заметки, используяguiSelectedNotesиupdateNoteFields. - Organize decks and cards — Создавайте вложенные колоды (
Parent::Child) с помощьюcreateDeck, перемещайте карточки между колодами черезchangeDeckили приостанавливайте карточки с помощьюsuspend, чтобы пропускать их при повторении.
Документация
Сервер Anki MCP
Бесшовная интеграция Anki с AI-ассистентами через Model Context Protocol
[!IMPORTANT] Для большинства сценариев предпочтителен аддон AnkiMCP.
Аддон (GitHub) запускает MCP-сервер непосредственно внутри Anki. Не нужно устанавливать Node.js, настраивать AnkiConnect или поддерживать отдельный процесс: установите его с помощью кода
124672614, перезапустите Anki — и сервер будет работать при каждом запуске Anki. Он поддерживает локальный HTTP-доступ и удалённый доступ через встроенный туннель.Этот репозиторий — правильный выбор, когда вам конкретно нужны:
- Транспорт STDIO — Claude Desktop, Claude Code, Cursor или любой клиент, запускающий сервер как подпроцесс
- Пакет MCPB — установка в один клик через
.mcpbдля Claude DesktopДля HTTP, туннеля или веб-клиентов (claude.ai, ChatGPT) аддон — более простой и лучше поддерживаемый путь.
Этот репозиторий не прекращает поддержку. Он остаётся поддерживаемым и выпускается вместе с аддоном в рамках одного проекта ankimcp.ai.
Сервер Model Context Protocol (MCP), который позволяет AI-ассистентам взаимодействовать с Anki — приложением для интервального повторения карточек.
Преобразите свой опыт работы с Anki с помощью взаимодействия на естественном языке — как будто у вас есть личный репетитор. AI-ассистент не просто показывает вопросы и ответы; он может объяснять концепции, делать процесс обучения более увлекательным и человечным, предоставлять контекст и адаптироваться к вашему стилю обучения. Он может создавать и редактировать заметки на лету, превращая ваши учебные сессии в динамичные беседы. Скоро появится больше функций!
Примеры и обучающие материалы
Для получения подробных руководств, реальных примеров и пошаговых инструкций по использованию этого MCP-сервера с Claude Desktop посетите:
ankimcp.ai — Полная документация с практическими примерами и сценариями использования
См. docs/ для дополнительной документации, включая руководство по настройке рецензента и образец колоды Anki.
Примеры использования
Три показательных запроса, демонстрирующих потоки инструментов, которые обеспечивает этот сервер:
-
«Помоги мне повторить мою испанскую колоду». — Ассистент предлагает синхронизироваться с AnkiWeb (
sync), получает карточки, подлежащие повторению (get_due_cardsс фильтром по колоде), показывает каждую карточку (present_card) и записывает вашу оценку (rate_card). Естественный учебный диалог с объяснениями, адаптированными под вас. -
«Создай 10 карточек арабской лексики с RTL-стилизацией». — Ассистент выводит список типов заметок (
modelNames), создаёт пользовательскую RTL-модель при необходимости (createModel+updateModelStylingдля CSS справа налево), затем массово создаёт карточки (addNotes). -
«Импортируй это изображение из моей папки Загрузки на лицевую сторону выбранной заметки». — Ассистент загружает локальный файл (
storeMediaFileс путём к файлу), читает выбранную в данный момент заметку из браузера (guiSelectedNotes+notesInfo) и обновляет лицевое поле с тегом<img>(updateNoteFields).
Доступные инструменты
Сервер предоставляет 53 инструмента MCP — 42 основных инструмента для повседневных операций с Anki и 11 инструментов GUI, которые управляют интерфейсом настольного приложения Anki для рабочих процессов редактирования/создания заметок.
Основные инструменты
Повторение и обучение
sync— Синхронизация с AnkiWeb для получения последних данных и отправки измененийget_due_cards— Получение карточек, подлежащих повторению, с возможностью фильтрации по колоде (ответы опущены, если неinclude_answer: true, по умолчаниюfalse)get_cards— Получение карточек с гибкой фильтрацией по состоянию (due, new, learning, suspended, buried) и колоде (ответы опущены, если неinclude_answer: true, по умолчаниюfalse)present_card— Показ карточки для повторения с её вопросом/лицевой сторонойrate_card— Оценка производительности карточки (Again, Hard, Good, Easy) и планирование следующего повторенияforgetCards— Сброс карточек в состояние «новые», отмена их расписания без записи повторенияsetDueDate— Перенос карточек на срок в N дней ("0","3-7","1!") без записи повторенияareSuspended— Проверка состояния приостановки для одной или нескольких карточек без внесения измененийsuspend— Приостановка карточек, чтобы они пропускались при повторении до снятия приостановкиunsuspend— Снятие приостановки с карточек, чтобы они вернулись к обычному повторению
Примечание:
forgetCardsиsetDueDateизменяют расписание без записи повторения, что отличает их отrate_card. Используйте их, когда расписание карточки неверно, а не ответ: оценка карточки какAgainдля более глубокого откладывания записывает реальную ошибку и снижает фактор лёгкости, навсегда искажая как будущее расписание, так и вашу статистику.forgetCardsстирает интервал и начинает карточку заново;setDueDateсохраняет историю карточки и просто переносит следующее повторение.
Примечание: Содержимое карточки
front/backотображается для каждой карточки на основе её собственного шаблона (как показывает Anki), поэтому перевёрнутые карточки и карточки с пропусками отображаются в правильном направлении. Статический текст, добавленный вашими шаблонами карточек, также появляется в выводе.
Управление колодами
listDecks— Список всех колод, опционально со статистикой очереди изучения по каждой колодеdeckStats— Получение подробной статистики для одной колоды (очередь изучения, фактические подсчёты состояний карточек, распределения лёгкости/интервалов)createDeck— Создание новой пустой колоды (поддерживаетParent::Child, максимум 2 уровня)changeDeck— Перемещение карточек в другую колоду (создаётся, если не существует)
Примечание: Статистика колод бывает двух видов. Блок
counts(и всё, что сообщаетlistDecks) отражает браузер колод Anki: карточки подлежащие повторению сегодня, ограниченные ежедневными лимитами новых/повторяемых каждой колоды, с исключением приостановленных и отложенных карточек — поэтомуreview— это не «зрелые карточки», а категорияother— просто арифметический остаток (в основном карточки для повторения не сегодня плюс новые карточки сверх ежедневного лимита). Для фактических итогов по состояниям используйте блокstatesнаdeckStats/collection_stats, который подсчитываетnew,learning,review,suspendedиburiedчерез поиск Anki, игнорируя даты выполнения и ежедневные лимиты.
Управление заметками
addNote— Создание одной заметки с указанными полями и тегамиaddNotes— Массовое создание до 100 заметок с общей колодой и моделью (поддерживается частичный успех)findNotes— Поиск заметок с использованием синтаксиса запросов Anki (deck:,tag:,is:dueи т. д.)notesInfo— Получение подробной информации о заметках (поля, теги, тип заметки, ID карточек; CSS берётся изmodelStyling)updateNoteFields— Обновление существующих полей заметок (с учётом CSS, поддерживает HTML-содержимое)deleteNotes— Удаление заметок и всех связанных карточек (необратимо, требует подтверждения)
Управление тегами
getTags— Получение всех тегов в коллекции (используйте первый, чтобы избежать дублирования)addTags— Добавление тегов, разделённых пробелами, к указанным заметкамremoveTags— Удаление тегов, разделённых пробелами, из указанных заметокreplaceTags— Переименование тега в указанных заметкахclearUnusedTags— Удаление осиротевших тегов, не используемых ни одной заметкой (необратимо)
Управление медиафайлами
getMediaFilesNames— Список медиафайлов вcollection.media, опционально с фильтром по шаблонуretrieveMediaFile— Загрузка медиафайла как содержимого base64storeMediaFile— Загрузка медиа из данных base64, абсолютного пути к файлу или URLdeleteMediaFile— Удаление медиафайла изcollection.media(необратимо)
💡 Лучшие практики для изображений:
- ✅ Используйте пути к файлам (например,
/Users/you/image.png) — быстро и эффективно - ✅ Используйте URL (например,
https://example.com/image.jpg) — прямая загрузка - ❌ Избегайте base64 — крайне медленно и неэффективно по токенам
Просто скажите Claude, где находится изображение, и он автоматически выполнит загрузку наиболее эффективным способом.
Управление моделями/шаблонами
modelNames— Список всех доступных типов заметок/моделейmodelFieldNames— Получение имён полей для конкретного типа заметокmodelStyling— Получение информации о стилях CSS для типа заметокmodelTemplates— Получение шаблонов карточек (HTML лицевой и обратной сторон) для типа заметокcreateModel— Создание нового типа заметок с пользовательскими полями, шаблонами карточек и CSS (например, RTL-модели)updateModelStyling— Обновление стилей CSS для существующего типа заметок (применяется ко всем его карточкам)updateModelTemplates— Обновление шаблонов карточек (HTML лицевой и обратной сторон) для существующего типа заметок (применяется ко всем его карточкам)addModelField— Добавление нового поля в существующий тип заметок (добавляется в конец или вставляется в определённую позицию)removeModelField— Удаление поля из существующего типа заметок (удаляет его содержимое из всех заметок; требует явного подтверждения)renameModelField— Переименование поля в существующем типе заметок (Anki переписывает ссылки на старое имя в шаблонах карточек)repositionModelField— Изменение позиции поля в существующем типе заметок
Статистика
collection_stats— Агрегированная статистика по всем колодам с разбивкой по каждой колоде и подсчётами состояний карточек по всей коллекцииreview_stats— Анализ истории повторений (временные закономерности, показатели удержания, серии занятий)
Инструменты GUI
Инструменты, управляющие интерфейсом настольного приложения Anki. Предназначены для рабочих процессов редактирования/создания заметок и управления колодами, не для сессий повторения.
guiBrowse— Открытие браузера карточек и поиск карточекguiSelectCard— Выбор конкретной карточки в браузере карточекguiSelectedNotes— Получение ID заметок, выбранных в данный момент в браузере карточекguiAddCards— Открытие диалога добавления карточек с предустановленными данными заметкиguiEditNote— Открытие редактора заметок для конкретной заметкиguiDeckOverview— Открытие диалога обзора колоды для конкретной колодыguiDeckBrowser— Открытие диалога браузера колодguiCurrentCard— Получение информации о текущей карточке в режиме повторения (включает ответ; ошибка вне режима повторения)guiShowQuestion— Показ лицевой стороны текущей карточкиguiShowAnswer— Показ обратной стороны текущей карточкиguiUndo— Отмена последнего действия в Anki
Предварительные требования
- Anki с установленным плагином AnkiConnect
- Node.js 22.12.0+
Установка
Есть несколько способов установить сервер на вашу машину. После установки перейдите к разделу Подключение AI-клиента, чтобы подключить его к вашему AI-ассистенту — локально или удалённо.
npm (глобально или через npx)
Универсальный способ установки сервера, подходящий для любого MCP-клиента, который запускает его напрямую.
Установите глобально для клиентов, которые выполняют команду ankimcp:
npm install -g @ankimcp/anki-mcp-server
Или запустите по требованию без установки:
npx @ankimcp/anki-mcp-server
Пакет MCPB (рекомендуется для Claude Desktop)
Самый простой способ установить этот MCP-сервер для Claude Desktop:
- Загрузите последний пакет
.mcpbсо страницы Releases - В Claude Desktop установите расширение:
- Способ 1: Перейдите в Настройки → Расширения, затем перетащите файл
.mcpb - Способ 2: Перейдите в Настройки → Разработчик → Расширения → Установить расширение, затем выберите файл
.mcpb
- Способ 1: Перейдите в Настройки → Расширения, затем перетащите файл
- При необходимости настройте URL AnkiConnect (по умолчанию
http://localhost:8765) - Перезапустите Claude Desktop
Вот и всё! Пакет включает всё необходимое для запуска сервера локально.
Для рецензентов каталога MCP Anthropic: пошаговое руководство от нуля до интеграции с предварительно заполненной образцовой колодой находится в
docs/reviewer-setup.md.
Установка из исходного кода (для разработки)
Для разработки или продвинутого использования (запуск тестового набора требует Node.js 24.9+ — npm-скрипты тестирования загружают ESM-only пакеты NestJS 12 через require(esm), которые Jest поддерживает только там; требование к среде выполнения для использования сервера остаётся 22.12.0+):
npm install
npm run build
Подключение AI-клиента
Есть два способа, которыми AI-ассистент может получить доступ к этому серверу, в зависимости от того, где запущен ассистент:
- Локально — сервер работает на той же машине, что и AI-клиент (Claude Desktop, Cursor, Cline, Zed или локальная браузерная сессия). Используйте STDIO для десктопных MCP-клиентов, HTTP для локальных веб-инструментов.
- Удалённо — размещённый/удалённый AI (например, ChatGPT или Claude.ai в облаке) должен получить доступ к Anki, работающему на вашей локальной машине. Используйте управляемый Tunnel (✅ рекомендуется — с аутентификацией) или, как более лёгкую неаутентифицированную альтернативу, ngrok.
Локально
Сервер работает на том же компьютере, что и ваш AI-клиент, и общается с AnkiConnect на localhost.
STDIO (основная локальная интеграция)
STDIO — это стандартный транспорт для локальных десктопных MCP-клиентов — Claude Desktop, Cursor IDE, Cline, Zed Editor, opencode и других. Клиент запускает сервер как подпроцесс и общается через стандартный ввод/вывод.
Поддерживаемые клиенты:
- Claude Desktop
- Cursor IDE — AI-редактор кода
- Cline — расширение VS Code для AI-помощи
- Zed Editor — быстрый современный редактор кода
- opencode — терминальный AI-агент для кодирования
- Другие MCP-клиенты, поддерживающие транспорт STDIO
Для Claude Desktop MCPB-бандл — самый простой путь. Для других клиентов настройте npm-пакет с флагом --stdio.
Конфигурация — выберите один метод:
Метод 1: Использование npx (рекомендуется — без установки)
{
"mcpServers": {
"anki-mcp": {
"command": "npx",
"args": ["-y", "@ankimcp/anki-mcp-server", "--stdio"],
"env": {
"ANKI_CONNECT_URL": "http://localhost:8765"
}
}
}
}
Метод 2: Использование глобальной установки
Сначала установите глобально:
npm install -g @ankimcp/anki-mcp-server
Затем настройте:
{
"mcpServers": {
"anki-mcp": {
"command": "ankimcp",
"args": ["--stdio"],
"env": {
"ANKI_CONNECT_URL": "http://localhost:8765"
}
}
}
}
opencode использует свой собственный формат — серверы размещаются в mcp, команда — это единый массив, а переменные окружения — в environment:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"anki-mcp": {
"type": "local",
"command": ["npx", "-y", "@ankimcp/anki-mcp-server", "--stdio"],
"enabled": true,
"environment": {
"ANKI_CONNECT_URL": "http://localhost:8765"
}
}
}
}
Расположение файлов конфигурации:
- Cursor IDE:
~/.cursor/mcp.json(macOS/Linux) или%USERPROFILE%\.cursor\mcp.json(Windows) - Cline: доступно через настройки в VS Code
- Zed Editor: установите как MCP-расширение через маркетплейс расширений
- opencode:
opencode.jsonв корне вашего проекта или~/.config/opencode/opencode.jsonглобально
Для функций, специфичных для клиента, и устранения неполадок обратитесь к документации вашего MCP-клиента. Также см. Подключение к Claude Desktop для конфигурации, которая указывает напрямую на собранный dist/main-stdio.js.
HTTP (локальный веб-инструмент)
HTTP-режим запускает сервер как локальный веб-сервер, говорящий на протоколе MCP Streamable HTTP. Это транспорт, с которым веб-инструмент AI общается, когда он указывает на вашу машину, и это также то, что Удалённые опции открывают для внешнего мира. Сам по себе HTTP-режим привязывается только к localhost.
Привязка за пределами localhost? Если вы передаёте
--host 0.0.0.0(или работаете за обратным прокси/публичным доменом), сервер по умолчанию принимает только заголовкиHostloopback для защиты от DNS-rebinding — установитеALLOWED_HOSTSна имя(имена) хоста, которые используют клиенты. См. Конфигурация HTTP-режима.
Настройка — выберите один метод:
Метод 1: Использование npx (рекомендуется — без установки)
# Quick start
npx @ankimcp/anki-mcp-server
# With custom options
npx @ankimcp/anki-mcp-server --port 8080 --host 0.0.0.0
npx @ankimcp/anki-mcp-server --anki-connect http://localhost:8765
Метод 2: Использование глобальной установки
# Install once
npm install -g @ankimcp/anki-mcp-server
# Run the server
ankimcp
# With custom options
ankimcp --port 8080 --host 0.0.0.0
ankimcp --anki-connect http://localhost:8765
Метод 3: Установка из исходников (для разработки)
npm install
npm run build
npm run start:prod:http
Чтобы сделать локальный HTTP-сервер доступным для облачного AI, используйте одну из Удалённых опций ниже.
Удалённо
Размещённый/удалённый AI (например, ChatGPT или Claude.ai в облаке) не может напрямую получить доступ к localhost. Эти опции открывают ваш локальный Anki в интернет, чтобы удалённый ассистент мог с ним общаться.
Tunnel (✅ Рекомендуется)
Рекомендуемый удалённый путь — с аутентификацией и безопасный. В отличие от сырого публичного порта, туннельный режим требует входа в систему (OAuth 2.0 device flow), поэтому конечная точка не открыта для любого, кто угадает URL.
Туннельный режим позволяет веб-инструментам AI получать доступ к вашему локальному Anki без запуска собственного туннеля. Сервер подключается к управляемому туннельному сервису AnkiMCP (wss://tunnel.ankimcp.ai) через WebSocket и получает публичный URL. Аутентификация встроена — не требуется учётная запись ngrok или отдельный туннельный процесс, и вы входите один раз.
Вход (OAuth device flow):
Туннельный режим использует OAuth 2.0 Device Authorization Grant. Вход автоматически открывает ваш браузер на странице одобрения с кодом, уже встроенным в URL — ничего вводить не нужно, просто одобрите. (Если браузер не может открыться, терминал выводит URL для проверки и код для ручного ввода как запасной вариант.) При успехе учётные данные сохраняются в ~/.ankimcp/credentials.json (права доступа к файлу 0600).
# Pre-authenticate (optional — --tunnel will trigger this automatically if needed)
ankimcp --login
npx @ankimcp/anki-mcp-server --login
# Clear saved credentials
ankimcp --logout
Запуск туннеля:
# Connect to the managed tunnel service (wss://tunnel.ankimcp.ai)
ankimcp --tunnel
npx @ankimcp/anki-mcp-server --tunnel
# Override the tunnel server URL (must be ws:// or wss://) — e.g. for self-hosting
ankimcp --tunnel wss://my-tunnel.example.com
Если учётные данные отсутствуют, --tunnel автоматически сначала запускает процесс входа, затем продолжает с туннелем. Этот автоматический вход требует интерактивного терминала — когда stdout не является TTY (systemd, headless Docker, CI), сервер быстро завершается с ошибкой и просит сначала запустить ankimcp --login. После подключения выводится публичный URL туннеля; нажмите Ctrl+C для отключения. Поделитесь этим URL с вашим AI-ассистентом.
Переменные окружения туннельного режима:
| Переменная | Описание | По умолчанию |
|---|---|---|
TUNNEL_SERVER_URL | URL WebSocket туннельного сервера (значение флага --tunnel/--login переопределяет это) | wss://tunnel.ankimcp.ai |
TUNNEL_AUTH_CLIENT_ID | OAuth client ID для device flow. Продвинутое — нужно только при указании на самостоятельно размещённый туннельный/аутентификационный сервис. | (встроенный) |
Конечные точки аутентификации device-flow (/auth/device, /auth/token) выводятся из TUNNEL_SERVER_URL, поэтому указание --tunnel (или TUNNEL_SERVER_URL) на другой хост также перемещает аутентификацию на этот хост.
Как это работает: Туннельный режим запускает MCP-сервер в процессе за транспортом в памяти (TunnelTransport). Этот транспорт владеет MCP-сервером и превращает каждое переданное тело запроса в ответ, а TunnelClient соединяет его с удалённым туннельным сервисом через WebSocket — передавая MCP-запросы внутрь и ответы наружу. AnkiConnect по-прежнему доступен только на вашей локальной машине.
Версии протокола: Поскольку туннель подключает MCP-сервер в процессе, туннельный режим обслуживает только ревизию 2025 протокола MCP, в то время как STDIO и HTTP-режимы обслуживают как 2025, так и более новую ревизию 2026-07-28. Каждый инструмент ведёт себя одинаково в любом случае — но клиент, говорящий только на 2026-07-28, будет отклонён через туннель с ошибкой версии протокола; запустите STDIO или HTTP режим для такого клиента.
ngrok (неаутентифицированная альтернатива)
Если вы предпочитаете открыть локальный HTTP-режим публично без учётной записи на управляемом туннеле, встроенный флаг --ngrok запускает подпроцесс ngrok (src/services/ngrok.service.ts) и выводит публичный URL в стартовом баннере:
# One-time ngrok setup, then:
ankimcp --ngrok
Этот путь не аутентифицирован — любой, у кого есть URL, может получить доступ к вашему Anki, поэтому он менее безопасен, чем Tunnel. Предпочитайте Tunnel, если у вас нет особой причины управлять собственной конечной точкой ngrok. (Требуется глобальная установка ngrok и authtoken.)
Флаг --ngrok запускает ngrok с --host-header=rewrite, поэтому ngrok переписывает вышестоящий Host на localhost перед пересылкой. Это сохраняет запросы в пределах loopback-списка разрешённых Host (см. Защита от DNS-rebinding) без необходимости добавлять публичный домен *.ngrok в ALLOWED_HOSTS. Если вы запускаете ngrok вручную, используйте тот же флаг — ngrok http --host-header=rewrite 3000 — иначе ngrok пересылает публичное имя хоста ngrok как Host, и сервер отклоняет его с 403.
Параметры командной строки (все режимы)
ankimcp [options]
Options:
--stdio Run in STDIO mode (for MCP clients)
--tunnel [url] Connect via the managed tunnel (authenticated)
--login Authenticate for tunnel mode (OAuth device flow)
--logout Clear saved tunnel credentials
-p, --port <number> Port to listen on (HTTP mode; default: 3000, or PORT env var)
-h, --host <address> Host to bind to (HTTP mode; default: 127.0.0.1, or HOST env var)
-a, --anki-connect <url> AnkiConnect URL (default: http://localhost:8765, or ANKI_CONNECT_URL env var)
--ngrok Start ngrok tunnel (requires global ngrok installation)
--read-only Run in read-only mode (blocks content changes and rescheduling; rating, suspend and sync still work)
--help Show help message
Usage with npx (no installation needed):
npx @ankimcp/anki-mcp-server # HTTP mode
npx @ankimcp/anki-mcp-server --port 8080 # Custom port
npx @ankimcp/anki-mcp-server --stdio # STDIO mode
npx @ankimcp/anki-mcp-server --tunnel # Managed tunnel mode
npx @ankimcp/anki-mcp-server --ngrok # HTTP mode with ngrok tunnel
npx @ankimcp/anki-mcp-server --read-only # Read-only mode
Usage with global installation:
npm install -g @ankimcp/anki-mcp-server # Install once
ankimcp # HTTP mode
ankimcp --port 8080 # Custom port
ankimcp --stdio # STDIO mode
ankimcp --tunnel # Managed tunnel mode
ankimcp --ngrok # HTTP mode with ngrok tunnel
ankimcp --read-only # Read-only mode
Режим только для чтения (все режимы)
Флаг --read-only (или READ_ONLY=true) блокирует изменения содержимого заметок, колод, тегов, медиа и типов заметок, а также ручное перепланирование карточек. При включении:
- Все операции чтения работают нормально (просмотр колод, просмотр карточек, поиск заметок)
- Эти изменения всё ещё разрешены: оценка карточки во время повторения (
rate_card), приостановка/возобновление карточек (suspend,unsuspend), синхронизация с AnkiWeb (sync) и GUI-инструменты, которые навигируют по окнам Anki (guiBrowse,guiDeckOverview, …) - Изменения содержимого заблокированы (addNote, deleteNotes, createDeck, updateNoteFields и т.д.);
createDeckдля уже существующей колоды всё ещё успешен, так как ничего не записывается - Ручное перепланирование заблокировано:
forgetCards(сброс в новое) иsetDueDate guiUndoзаблокирован, так как отмена может откатить изменение коллекцииguiAddCardsиguiEditNoteзаблокированы, так как заметка, добавленная или сохранённая в диалоге, который они открывают, записывается в коллекцию- Полезно для изучения данных Anki без случайных изменений его содержимого
# HTTP mode with read-only
ankimcp --read-only
# STDIO mode with read-only
ankimcp --stdio --read-only
# Can combine with other flags
ankimcp --ngrok --read-only
Вы также можете включить режим только для чтения через переменную окружения:
READ_ONLY=true ankimcp
Или в конфигурации MCP-клиента:
{
"mcpServers": {
"anki-mcp": {
"command": "npx",
"args": ["-y", "@ankimcp/anki-mcp-server", "--stdio", "--read-only"],
"env": {
"ANKI_CONNECT_URL": "http://localhost:8765"
}
}
}
}
Подключение к Claude Desktop (локальный режим)
Вы можете настроить сервер в Claude Desktop либо:
- Перейдя: Настройки → Разработчик → Изменить конфигурацию
- Или вручную отредактировав файл конфигурации
Конфигурация
Добавьте следующее в конфигурацию Claude Desktop:
{
"mcpServers": {
"anki-mcp": {
"command": "node",
"args": ["/path/to/anki-mcp-server/dist/main-stdio.js"],
"env": {
"ANKI_CONNECT_URL": "http://localhost:8765"
}
}
}
}
Замените /path/to/anki-mcp-server на фактический путь к вашему проекту.
Расположение файлов конфигурации
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
Для получения дополнительных сведений см. официальную документацию MCP.
Переменные окружения (необязательно)
| Переменная | Описание | По умолчанию |
|---|---|---|
ANKI_CONNECT_URL | URL AnkiConnect | http://localhost:8765 |
ANKI_CONNECT_API_VERSION | Версия API | 6 |
ANKI_CONNECT_API_KEY | Ключ API, если настроен в AnkiConnect | - |
ANKI_CONNECT_TIMEOUT | Таймаут запроса в мс | 5000 |
READ_ONLY | Включить режим только для чтения (true или 1) | false |
PORT | HTTP-режим: порт для прослушивания (флаг --port имеет приоритет) | 3000 |
HOST | HTTP-режим: адрес для привязки (флаг --host имеет приоритет) | 127.0.0.1 |
ALLOWED_HOSTS | HTTP-режим: дополнительные значения заголовка Host для принятия помимо loopback (имена хостов через запятую). Требуется при привязке к LAN/публичному адресу или работе за обратным прокси. См. Конфигурация HTTP-режима. | только loopback |
ALLOWED_ORIGINS | HTTP-режим: список разрешённых шаблонов браузера Origin/Referer через запятую (поддерживаются подстановочные знаки, например https://*.ngrok.io). | http://localhost:*,http://127.0.0.1:*,https://localhost:*,https://127.0.0.1:* |
TUNNEL_SERVER_URL | URL WebSocket туннельного сервера (только туннельный режим) | wss://tunnel.ankimcp.ai |
MEDIA_ALLOWED_TYPES | Дополнительные типы MIME для разрешения импорта файловых путей (через запятую, например application/pdf) | - |
MEDIA_IMPORT_DIR | Ограничить импорт файловых путей этим каталогом | - |
MEDIA_ALLOWED_HOSTS | Разрешить конкретные хосты частной сети для импорта URL (через запятую, например 192.168.1.50,my-nas) | - |
Примеры использования
Поиск и обновление заметок
# Search for notes in a specific deck
findNotes(query: "deck:Spanish")
# Get detailed information about notes
notesInfo(notes: [1234567890, 1234567891])
# Update a note's fields (HTML content supported)
updateNoteFields(note: {
id: 1234567890,
fields: {
"Front": "<b>¿Cómo estás?</b>",
"Back": "How are you?"
}
})
# Delete notes (requires confirmation)
deleteNotes(notes: [1234567890], confirmDeletion: true)
Примеры синтаксиса запросов Anki
Инструмент findNotes поддерживает мощный синтаксис запросов Anki:
"deck:DeckName"- Все заметки в конкретной колоде"tag:important"- Заметки с тегом «important»"is:due"- Карточки, ожидающие повторения"is:new"- Новые карточки, которые ещё не изучались"added:7"- Заметки, добавленные за последние 7 дней"front:hello"- Заметки со словом «hello» в поле «front»"flag:1"- Заметки с красным флажком"prop:due<=2"- Карточки, срок повторения которых наступает в течение 2 дней"deck:Spanish tag:verb"- Заметки из испанской колоды с тегом verb (AND)"deck:Spanish OR deck:French"- Заметки из любой из двух колод
Важные примечания
Обработка CSS и HTML
- Инструмент
notesInfoвозвращает имя типа заметки для каждой заметки; сам CSS берётся изmodelStyling - Инструмент
updateNoteFieldsподдерживает HTML-содержимое в полях и сохраняет CSS-стилизацию - Каждая модель заметок имеет собственный CSS — используйте
modelStyling, чтобы получить CSS для конкретной модели
Предупреждение об обновлении
⚠️ ВАЖНО: При использовании updateNoteFields НЕ просматривайте заметку в браузере Anki во время обновления, иначе поля не обновятся должным образом. Закройте браузер или переключитесь на другую заметку перед обновлением. Подробнее см. в разделе Известные проблемы.
Безопасность удаления
Инструмент deleteNotes требует явного подтверждения (confirmDeletion: true), чтобы предотвратить случайное удаление. Удаление заметки безвозвратно удаляет ВСЕ связанные с ней карточки.
Безопасность
Проверка путей к медиафайлам и URL-адресов
Медиаинструменты (storeMediaFile, retrieveMediaFile, deleteMediaFile) и поля аудио/изображений updateNoteFields включают проверку безопасности для предотвращения злоупотреблений через инъекции в подсказки:
- Импорт файлов по пути ограничен только типами медиафайлов (изображения, аудио, видео). Не-медиафайлы (например, SSH-ключи, учётные данные, конфигурации оболочки) отклоняются на основе MIME-типа. Настройте
MEDIA_ALLOWED_TYPES, чтобы разрешить дополнительные типы файлов, илиMEDIA_IMPORT_DIR, чтобы ограничить импорт конкретным каталогом. - Импорт URL-адресов проверяется на SSRF-атаки. Запросы к частным сетям (10.x, 172.16.x, 192.168.x), loopback (127.x), link-local (169.254.x) и не-HTTP(S) схемы блокируются. Настройте
MEDIA_ALLOWED_HOSTS, чтобы разрешить конкретные хосты частных сетей. - Имена файлов очищаются для предотвращения path traversal (например, последовательности
../../удаляются).
Эти меры защиты применяются к storeMediaFile, retrieveMediaFile, deleteMediaFile и полям аудио/изображений updateNoteFields.
Уязвимость path traversal сообщена Hideaki Takahashi.
Защита от DNS-rebinding (HTTP-транспорт)
При работе в HTTP-режиме сервер проверяет заголовок Host в каждом запросе. По умолчанию принимаются только loopback-хосты (localhost, 127.0.0.1, ::1), независимо от порта. Host — это заголовок, запрещённый для браузеров, поэтому вредоносная веб-страница не может его подделать — это закрывает путь DNS-rebinding, когда перезагруженная страница достигает локального сервера с подделанным Host и без Origin, и достигает MCP-инструментов. Неразрешённый Host отклоняется с 403.
Если вы привязываетесь к 0.0.0.0, работаете за обратным прокси или открываете публичный туннельный домен, установите ALLOWED_HOSTS (имена хостов через запятую), чтобы разрешить эти хосты. При туннелировании через ngrok сервер использует --host-header=rewrite, поэтому вышестоящий сервер всё равно видит loopback Host. Полный список опций см. в разделе Конфигурация HTTP-режима.
Уязвимость DNS-rebinding сообщена avishaigo-commits и yotampe-pluto.
Политика конфиденциальности
Этот MCP-сервер работает локально на вашем компьютере и не собирает телеметрию, аналитику или данные об использовании.
Полная политика: https://ankimcp.ai/privacy/
- Сбор данных: Сервер ничего не собирает. Он проксирует запросы между вашим ИИ-ассистентом и локальным плагином AnkiConnect.
- Использование / хранение: Серверное хранение отсутствует. Все данные карточек остаются в вашей установке Anki на вашем устройстве.
- Передача третьим лицам: Нет. Сервер взаимодействует только с настроенным URL AnkiConnect (по умолчанию: localhost). Если вы включите встроенную синхронизацию AnkiWeb в Anki, она будет происходить напрямую между вашей установкой Anki и AnkiWeb — вне области действия этого сервера.
- Хранение: Не применимо — сервер не хранит никаких данных.
- Контакт: support@ankimcp.ai
Известные проблемы
Полный список известных проблем и ограничений см. в нашей документации:
Документация по известным проблемам
Критические ограничения
Обновление заметок не работает при просмотре в браузере
⚠️ ВАЖНО: При обновлении заметок с помощью updateNoteFields обновление молча завершится ошибкой, если заметка в данный момент просматривается в окне браузера Anki. Это ограничение вышестоящего AnkiConnect.
Обходной путь: Всегда закрывайте браузер или переходите к другой заметке перед обновлением.
Подробнее и о других известных проблемах см. в полной документации.
Устранение неполадок
Ошибка ERR_REQUIRE_ESM
Если вы видите ошибку:
Error [ERR_REQUIRE_ESM]: require() of ES Module not supported
Это означает, что ваша версия Node.js не поддерживается. Сервер требует Node.js 22.12.0+.
Примечание: Минимальная поддерживаемая среда выполнения — Node.js 22.12.0. Node.js 20 (Iron) достиг конца жизненного цикла 2026-04-30 и больше не поддерживается.
Проверьте свою версию:
node --version
Решение: Обновите Node.js до версии 22.12.0+. Вы можете скачать её с nodejs.org или использовать менеджер версий, например nvm.
Разработка
Режимы транспорта
Этот сервер поддерживает три режима MCP-транспорта через отдельные точки входа:
Режим STDIO (по умолчанию)
- Для локальных MCP-клиентов, таких как Claude Desktop
- Использует стандартный ввод/вывод для связи
- Точка входа:
dist/main-stdio.js - Запуск:
npm run start:prod:stdioилиnode dist/main-stdio.js - MCPB-пакет: использует режим STDIO
Режим HTTP (Streamable HTTP)
- Для удалённых MCP-клиентов и веб-интеграций
- Использует протокол MCP Streamable HTTP
- Точка входа:
dist/main-http.js - Запуск:
npm run start:prod:httpилиnode dist/main-http.js - Порт по умолчанию: 3000 (настраивается через переменную окружения
PORT) - Хост по умолчанию:
127.0.0.1(настраивается через переменную окруженияHOST) - MCP-конечная точка:
http://127.0.0.1:3000/(корневой путь)
Режим туннеля (управляемый WebSocket-туннель)
- Для веб-ИИ-ассистентов через управляемый туннельный сервис AnkiMCP со встроенной аутентификацией
- MCP-сервер работает в процессе за транспортом в памяти;
TunnelTransportвладеет MCP-сервером, аTunnelClientсоединяет его с туннельным сервисом через WebSocket - Протокол: обслуживает только ревизию MCP 2025 (STDIO и HTTP также обслуживают 2026-07-28)
- Точка входа:
dist/main-tunnel.js - Запуск:
node dist/main-tunnel.js --tunnel(илиankimcp --tunnel) - Аутентификация:
ankimcp --login/ankimcp --logout; учётные данные хранятся в~/.ankimcp/credentials.json(0600) - Разработка:
npm run start:dev:tunnel(режим наблюдения, запускает--tunnel --debug)
Сборка
npm run build # Builds once, creates dist/ with all three entry points
main-stdio.js, main-http.js и main-tunnel.js собираются в один и тот же каталог dist/. Выбирайте, что запускать, в зависимости от ваших потребностей.
Конфигурация HTTP-режима
Переменные окружения:
PORT- Порт HTTP-сервера (по умолчанию: 3000)HOST- Адрес привязки (по умолчанию: 127.0.0.1 для localhost)ALLOWED_HOSTS- Дополнительные значения заголовкаHostчерез запятую, которые принимаются помимо встроенного набора loopback (localhost,127.0.0.1,::1). Только имена хостов, без учёта порта. По умолчанию: только loopback.ALLOWED_ORIGINS- Разрешённый список шаблонов браузераOrigin/Refererчерез запятую; поддерживаются подстановочные знаки (например,https://*.ngrok.io). По умолчанию:http://localhost:*,http://127.0.0.1:*,https://localhost:*,https://127.0.0.1:*.LOG_LEVEL- Уровень журналирования (по умолчанию: info)
Безопасность:
- Проверка заголовка Host (защита от DNS-rebinding) — каждый HTTP-запрос должен содержать заголовок
Host, соответствующий разрешённому списку. По умолчанию принимаются только loopback-хосты (localhost,127.0.0.1,::1), независимо от порта.Host— это заголовок, запрещённый для браузеров, поэтому вредоносная веб-страница не может его подделать — это закрывает путь DNS-rebinding, когда перезагруженная страница достигает сервера с подделаннымHostи безOrigin. НеразрешённыйHostотклоняется с403. - Проверка заголовка Origin — браузерные запросы с присутствующим, но неразрешённым
Origin/Refererотклоняются. Запросы безOrigin(curl, Postman, MCP-over-HTTP клиенты) разрешены; проверка Host является защитой от rebinding. - По умолчанию привязывается к localhost (127.0.0.1).
- В текущей версии аутентификация отсутствует (планируется поддержка OAuth).
Предоставление доступа к HTTP-режиму за пределами localhost — если вы привязываетесь к LAN/публичному адресу или размещаете сервер за обратным прокси или публичным доменом, вы обязаны установить ALLOWED_HOSTS на имя(имена) хостов, которые будут использовать клиенты, иначе каждый не-loopback запрос будет отклонён с 403:
# Bind to all interfaces and accept the machine's LAN name + a public domain
ALLOWED_HOSTS=my-nas.local,anki.example.com PORT=8080 HOST=0.0.0.0 node dist/main-http.js
Когда вы привязываетесь к 0.0.0.0/:: без ALLOWED_HOSTS, сервер регистрирует предупреждение при запуске о том, что будут приниматься только loopback-заголовки Host.
Docker / обратный прокси / публичный домен: применяется то же правило. В Docker запросы обычно приходят с опубликованным именем хоста контейнера или
Hostпрокси, поэтому установитеALLOWED_HOSTSсоответствующим образом. Обратный прокси (nginx, Caddy, Traefik) должен либо пересылать исходныйHostи иметь это имя хоста в спискеALLOWED_HOSTS, либо переписывать вышестоящийHostнаlocalhost. Встроенная интеграция--ngrokобрабатывает это автоматически (см. ниже).
Пример: Режимы запуска
# Development - STDIO mode (watch mode with auto-rebuild)
npm run start:dev:stdio
# Development - HTTP mode (watch mode with auto-rebuild)
npm run start:dev:http
# Production - STDIO mode
npm run start:prod:stdio
# or
node dist/main-stdio.js
# Production - HTTP mode
npm run start:prod:http
# or
PORT=8080 HOST=0.0.0.0 node dist/main-http.js
Создание MCPB-пакета
Чтобы создать распространяемый MCPB-пакет:
npm run mcpb:bundle
Эта команда:
- Синхронизирует версию из
package.jsonвmanifest.json - Удаляет старые файлы
.mcpb - Собирает TypeScript-проект
- Упаковывает
dist/иnode_modules/в файл.mcpb - Запускает
mcpb cleanдля удаления devDependencies (оптимизирует пакет с ~47MB до ~10MB)
Выходной файл будет назван anki-mcp-server-X.X.X.mcpb и может распространяться для установки в один клик.
Что входит в пакет
MCPB-пакет включает:
- Скомпилированный JavaScript (каталог
dist/— включает все три точки входа) - Только производственные зависимости (
node_modules/— devDependencies удалены с помощьюmcpb clean) - Метаданные пакета (
package.json) - Конфигурацию манифеста (
manifest.json— настроен на использованиеmain-stdio.js) - Иконку (
icon.png)
Исходные файлы, тесты и конфигурации разработки автоматически исключаются через .mcpbignore.
Журналирование в Claude Desktop
При запуске как MCPB-расширение в Claude Desktop журналы записываются в:
Расположение журналов: ~/Library/Logs/Claude/ (macOS)
Журналы разделены на несколько файлов:
- main.log - Общие журналы приложения Claude Desktop
- mcp-server-Anki MCP Server.log - Сообщения MCP-протокола для этого расширения
- mcp.log - Объединённые MCP-журналы со всех серверов
Примечание: Вывод регистратора pino (сообщения INFO, ERROR, WARN из кода сервера) идёт в stderr и появляется в MCP-специфичных файлах журналов. Claude Desktop определяет, какой файл журнала получает какие сообщения, но в целом:
- Запуск приложения и связь по MCP-протоколу → MCP-специфичный журнал
- Внутреннее журналирование сервера (pino) → И MCP-специфичный журнал, и иногда main.log
Для просмотра журналов в реальном времени:
tail -f ~/Library/Logs/Claude/mcp-server-Anki\ MCP\ Server.log
Отладка MCP-сервера
Вы можете отлаживать MCP-сервер с помощью MCP Inspector и подключения отладчика из вашей IDE (WebStorm, VS Code и т. д.).
Примечание для HTTP-режима: При тестировании HTTP-режима (Streamable HTTP) с MCP Inspector используйте «Connection Type: Via Proxy», чтобы избежать ошибок CORS.
Шаг 1: Настройка отладочного сервера в MCP Inspector
mcp-inspector-config.json уже включает конфигурацию отладочного сервера:
{
"mcpServers": {
"stdio-server-debug": {
"type": "stdio",
"command": "node",
"args": ["--inspect-brk=9229", "dist/main-stdio.js"],
"env": {
"MCP_SERVER_NAME": "anki-mcp-stdio-debug",
"MCP_SERVER_VERSION": "1.0.0",
"LOG_LEVEL": "debug"
},
"note": "Anki MCP server with debugging enabled on port 9229"
}
}
}
Шаг 2: Запуск сервера отладки
Запустите MCP Inspector с сервером отладки:
npm run inspector:debug
Это запустит сервер с включенной отладкой Node.js на порту 9229 и приостановит выполнение на первой строке.
Шаг 3: Подключение отладчика из вашей IDE
WebStorm
- Перейдите в Run → Edit Configurations
- Добавьте новую конфигурацию Attach to Node.js/Chrome
- Установите порт на
9229 - Нажмите Debug для подключения
VS Code
- Откройте панель отладки (Ctrl+Shift+D / Cmd+Shift+D)
- Выберите конфигурацию Debug MCP Server (Attach)
- Нажмите F5 для подключения
Шаг 4: Установка точек останова и отладка
После подключения вы можете:
- Устанавливать точки останова в исходных файлах TypeScript
- Пошагово выполнять код
- Проверять переменные и стек вызовов
- Использовать консоль отладки для вычисления выражений
Отладчик будет работать с source maps, что позволяет отлаживать исходный код TypeScript, а не скомпилированный JavaScript.
Отладка с Claude Desktop
Вы также можете отлаживать MCP-сервер, пока он работает внутри Claude Desktop, включив отладчик Node.js и подключив вашу IDE.
Шаг 1: Настройка Claude Desktop для отладки
Обновите конфигурацию Claude Desktop для включения отладки:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"anki-mcp": {
"command": "node",
"args": [
"--inspect=9229",
"<path_to_project>/anki-mcp-server/dist/main-stdio.js"
],
"env": {
"ANKI_CONNECT_URL": "http://localhost:8765"
}
}
}
}
Ключевое изменение: Добавьте --inspect=9229 перед путём к dist/main-stdio.js
Параметры отладки:
--inspect=9229— запустить отладчик немедленно, не блокируя (рекомендуется)--inspect-brk=9229— приостановить выполнение до подключения отладчика (для отладки проблем запуска)
Шаг 2: Перезапуск Claude Desktop
После сохранения конфигурации перезапустите Claude Desktop. MCP-сервер теперь будет работать с включенной отладкой на порту 9229.
Шаг 3: Подключение отладчика из вашей IDE
WebStorm
- Перейдите в Run → Edit Configurations
- Нажмите кнопку + и выберите Attach to Node.js/Chrome
- Настройте:
- Name:
Attach to Anki MCP (Claude Desktop) - Host:
localhost - Port:
9229 - Attach to:
Node.js < 8илиChrome or Node.js > 6.3(в зависимости от версии WebStorm)
- Name:
- Нажмите OK
- Нажмите Debug (Shift+F9) для подключения
VS Code
- Добавьте в
.vscode/launch.json:
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "attach",
"name": "Attach to Anki MCP (Claude Desktop)",
"port": 9229,
"skipFiles": ["<node_internals>/**"],
"sourceMaps": true,
"outFiles": ["${workspaceFolder}/dist/**/*.js"]
}
]
}
- Откройте панель отладки (Ctrl+Shift+D / Cmd+Shift+D)
- Выберите Attach to Anki MCP (Claude Desktop)
- Нажмите F5 для подключения
Шаг 4: Отладка в реальном времени
После подключения вы можете:
- Устанавливать точки останова в исходных файлах TypeScript (например,
src/mcp/primitives/essential/tools/create-model.tool.ts) - Использовать Claude Desktop в обычном режиме — точки останова сработают при вызове инструментов
- Пошагово выполнять код
- Проверять переменные и стек вызовов
- Использовать консоль отладки
Пример: Установите точку останова в create-model.tool.ts на строке 119, затем попросите Claude создать новую модель. Отладчик остановится на вашей точке останова!
Примечание: Отладчик остаётся подключённым, пока работает Claude Desktop. Вы можете отключиться/подключиться в любое время без перезапуска Claude Desktop.
Команды сборки
npm run build # Build the project (compile TypeScript to JavaScript)
npm run start:dev:stdio # STDIO mode with watch (auto-rebuild)
npm run start:dev:http # HTTP mode with watch (auto-rebuild)
npm run type-check # Run TypeScript type checking
npm run lint # Run ESLint
npm run mcpb:bundle # Sync version, clean, build, and create MCPB bundle
Локальное тестирование npm-пакета
Протестируйте npm-пакет локально перед публикацией:
# 1. Create local package
npm run pack:local # Builds and creates @ankimcp/anki-mcp-server-*.tgz
# 2. Install globally from local package
npm run install:local # Installs from ./@ankimcp/anki-mcp-server-*.tgz
# 3. Test the command
ankimcp # Runs HTTP server on port 3000
# 4. Uninstall when done testing
npm run uninstall:local # Removes global installation
Как это работает:
npm packсоздаёт файл.tgz, идентичный тому, что создал бы npm publish- Установка из
.tgzимитирует то, что получат пользователи изnpm install -g ankimcp - Это позволяет протестировать полный пользовательский опыт перед публикацией в npm
Команды тестирования
npm test # Run all tests
npm run test:unit # Run unit tests only
npm run test:tools # Run tool-specific tests
npm run test:workflows # Run workflow integration tests
npm run test:e2e # Run end-to-end tests
npm run test:cov # Run tests with coverage report
npm run test:watch # Run tests in watch mode
npm run test:debug # Run tests with debugger
npm run test:ci # Run tests for CI (silent, with coverage)
Покрытие тестами
Проект поддерживает минимальные пороги покрытия 70% для:
- Ветвей
- Функций
- Строк
- Операторов
Отчёты о покрытии создаются в каталоге coverage/.
Версионирование
Этот проект следует Semantic Versioning с подходом разработки до версии 1.0:
-
0.x.x — бета/разработочные версии (текущая фаза)
- 0.1.x — исправления ошибок и патчи
- 0.2.0+ — новые функции или незначительные улучшения
- Критические изменения допустимы в версиях 0.x
-
1.0.0 — первый стабильный релиз
- Будет выпущен, когда API станет стабильным и протестированным
- Критические изменения потребуют увеличения мажорной версии (2.0.0 и т.д.)
Текущий статус: 0.27.0 — активная бета-разработка. Недавние функции включают анализ повторений по всей коллекции (review_stats теперь агрегирует данные по всем колодам, когда deck опущен), управление полями моделей (addModelField, removeModelField, renameModelField, repositionModelField), массовое создание заметок (addNotes), встроенный ngrok-туннелинг (флаг --ngrok), управление медиафайлами, управление моделями/шаблонами и комплексная статистика колод. API может меняться на основе отзывов и тестирования.
Эволюция спецификации MCPB
Этот проект нацелен на спецификацию пакета MCPB от Anthropic, которая всё ещё развивается. Мы отслеживаем спецификацию на https://github.com/modelcontextprotocol/mcpb и можем вводить критические изменения для соответствия. Критические изменения допустимы в рамках схемы версионирования 0.x.x.
Похожие проекты
Если вы изучаете интеграции Anki MCP, вот другие проекты в этой области:
scorzeth/anki-mcp-server
- Статус: Похоже, заброшен (нет недавних обновлений)
- Ранняя реализация интеграции Anki MCP
nailuoGG/anki-mcp-server
- Подход: Лёгкая реализация в одном файле
- Архитектура: Процедурная структура кода со всеми инструментами в одном файле
- Подходит для: Простых случаев использования, минимальных зависимостей
Чем этот проект отличается:
- Архитектура корпоративного уровня: Построен на NestJS с внедрением зависимостей
- Модульный дизайн: Каждый инструмент — отдельный класс с чётким разделением ответственности
- Поддерживаемость: Легко расширять новыми функциями без изменения существующего кода
- Тестирование: Комплексный набор тестов с требованием покрытия 70%
- Безопасность типов: Строгий TypeScript с валидацией Zod
- Обработка ошибок: Надёжная обработка ошибок с полезной обратной связью для пользователя
- Готовность к продакшену: Правильное логирование, отчёты о прогрессе и поддержка пакетов MCPB
- Масштабируемость: Лёгкий рост от базовых инструментов до сложных рабочих процессов
Случай использования: Если вам нужна надёжная основа для создания продвинутых интеграций Anki или вы планируете значительно расширить функциональность, архитектурный подход этого проекта упрощает поддержку и масштабирование с течением времени.
Полезные ссылки
- Документация Model Context Protocol
- Документация API AnkiConnect
- Загрузка Claude Desktop
- Создание расширений для рабочего стола (блог Anthropic)
- Репозиторий MCP-серверов
- Документация NestJS
- Официальный сайт Anki
Лицензия и атрибуция
Этот проект лицензирован под лицензией MIT — см. LICENSE для полного текста.
Copyright © 2026 Anatoly Tarnavsky.
Атрибуция третьих сторон
-
Anki® является зарегистрированным товарным знаком Ankitects Pty Ltd. Этот проект — неофициальный сторонний инструмент и не связан с Ankitects Pty Ltd, не одобрен и не спонсируется ею. Логотип Anki используется по альтернативной лицензии для ссылки на Anki со ссылкой на https://apps.ankiweb.net. Для официального приложения Anki посетите https://apps.ankiweb.net.
-
Model Context Protocol (MCP) — открытый стандарт от Anthropic. Логотип MCP взят из официального репозитория документации MCP и используется по лицензии MIT. Для получения дополнительной информации о MCP посетите https://modelcontextprotocol.io.
-
Это независимый проект, который соединяет технологии Anki и MCP. Все товарные знаки, знаки обслуживания, торговые наименования, названия продуктов и логотипы являются собственностью их соответствующих владельцев.