Skip to main content
Glama

AnkiMCP 서버 (애드온)

Model Context Protocol (MCP)를 통해 사용자의 컬렉션을 AI 어시스턴트에 노출하는 Anki 애드온입니다.

이것은 무엇인가요?

AnkiMCP 서버는 Anki 내부에서 로컬 MCP 서버를 실행하여 Claude와 같은 AI 어시스턴트가 사용자의 플래시카드 컬렉션과 상호작용할 수 있도록 합니다. 이를 통해 AI 기반 학습 세션, 카드 생성 및 컬렉션 관리가 가능해집니다.

ankimcp.ai 프로젝트의 일부입니다.

Related MCP server: Anki MCP Server

첫 실행 시 참고 사항

첫 실행 시, 이 애드온은 PyPI에서 pydantic_core(~2MB)를 다운로드합니다. 이는 pydantic_core에 단일 애드온 파일로 번들링할 수 없는 플랫폼별 바이너리(Windows/macOS/Linux)가 포함되어 있기 때문에 필요합니다.

기능

  • 로컬 HTTP 서버 - 기본적으로 http://127.0.0.1:3141/에서 실행

  • MCP 프로토콜 - 모든 MCP 클라이언트(Claude Desktop 등)와 호환

  • 자동 시작 - Anki가 열리면 서버가 자동으로 시작

  • 터널 친화적 - Cloudflare Tunnel, ngrok 등과 함께 작동

  • 크로스 플랫폼 - macOS, Windows 및 Linux(x64 및 ARM)에서 작동

설치

AnkiWeb에서 설치 (권장)

  1. Anki를 열고 *도구 → 애드온 → 애드온 가져오기...*로 이동합니다.

  2. 코드 입력: 124672614

  3. Anki를 재시작합니다.

GitHub 릴리스에서 설치

  1. 릴리스에서 anki_mcp_server.ankiaddon을 다운로드합니다.

  2. 더블 클릭하여 설치하거나 *도구 → 애드온 → 파일에서 설치...*를 사용합니다.

  3. Anki를 재시작합니다.

NixOS

flakes 사용 (권장)

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 ])
    ];
  };
}

flakes 미사용

# 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 Desktop과 연결

Node.js가 설치되어 있어야 합니다. Claude Desktop 설정(~/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 Code와 연결

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 Inspector 등)를 허용하려면 허용된 오리진을 추가하세요:

{
  "cors_origins": ["https://inspector.example.com", "http://localhost:5173"]
}

모든 오리진을 허용하려면 ["*"]를 사용하세요(프로덕션 환경에서는 권장하지 않음).

cors_expose_headers 설정은 브라우저가 읽을 수 있는 응답 헤더를 제어합니다. 기본값(mcp-session-id, mcp-protocol-version)은 브라우저에서 MCP Streamable HTTP 프로토콜이 작동하는 데 필요합니다.

미디어 보안

미디어 경로 탐색 취약점을 책임감 있게 공개해 주신 Hideaki Takahashi(컬럼비아 대학교)님께 감사드립니다.

store_media_file 도구는 경로 탐색 및 SSRF 공격을 방지하기 위해 모든 입력을 검증합니다:

  • 파일 경로는 MIME 유형 검사를 통해 미디어 파일(이미지, 오디오, 비디오)로만 제한됩니다.

  • URLhttp:// 또는 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

복습 후 카드 평가 (Again/Hard/Good/Easy)

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 휴지통으로 이동 (미디어 확인을 통해 복구 가능)

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 작업은 AnkiConnect와 동일하게 검증된 패턴을 따라 큐 시스템을 통해 메인 Qt 스레드로 브리지됩니다.

자세한 내용은 Anki 애드온 개발 문서를 참조하세요.

개발

E2E 테스트 실행

E2E 테스트는 headless-anki를 사용하여 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 container

CI

E2E 테스트는 모든 브랜치에 대한 푸시 및 main에 대한 PR 시 자동으로 실행됩니다. .github/workflows/e2e.yml을 참조하세요.

라이선스

AGPL-3.0-or-later

링크

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

No tool schema history has been recorded yet.

Maintenance

ActivityActive
ResponsivenessResponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    An MCP server that enables AI assistants to interact with the Anki flashcard application for studying, deck management, and note creation. It supports natural language interaction for reviewing cards, searching content, and managing media files across local and remote environments.
    1,716
    467
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to manage Anki flashcard collections by creating, searching, and updating cards through a standardized interface. It supports media handling, batch operations, and review scheduling via the AnkiConnect add-on.
    6
    2
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ankimcp/anki-mcp-server-addon'

If you have feedback or need assistance with the MCP directory API, please join our Discord server