Skip to main content
Glama

Anki MCP サーバー

AnkiConnect を介して Anki に接続し、リーチタグ付きカードを取得する、Claude Desktop 用の MCP (Model Context Protocol) サーバー。

特徴

  • AnkiConnect API経由でAnkiに接続します

  • 「リーチ」タグが付いたカードを取得します

  • カードに日付スタンプ付きのレビュータグを追加します

  • クロードによる分析のための包括的なカードデータを提供する

  • Claude Desktopで使用可能

Related MCP server: Anki MCP

前提条件

  • Ankiをインストールして実行中

  • AnkiにAnkiConnectアドオンをインストールする

  • Node.jsとnpm

インストール

  1. このリポジトリをクローンします:

    git clone https://github.com/yourusername/anki-mcp-server.git
    cd anki-mcp-server
  2. 依存関係をインストールします:

    npm install
  3. プロジェクトをビルドします。

    npm run build

構成

サーバーは環境変数を使用して設定できます。提供されているサンプルファイルをコピーして、独自の設定を作成してください。

cp .env.example .env

次に、 .envファイルを編集して設定をカスタマイズします。

環境変数

説明

デフォルト値

ANKI_CONNECT_URL

Anki Connect APIのURL

http://localhost:8765

ANKI_CONNECT_VERSION

使用するAnki Connect APIのバージョン

6

ANKI_MOCK_MODE

テスト用にモックモードを有効にする (true/false)

false

環境変数が設定されていない場合、サーバーはデフォルト値を使用します。

AnkiConnect のローカル IP アドレスを見つける

localhostへの接続がうまくいかない場合は、代わりにコンピューターのローカル IP アドレスを使用する必要があります.envファイルを次のように設定してください。

ANKI_CONNECT_URL=http://YOUR_LOCAL_IP:8765

ローカル IP アドレスを見つけるには:

  • macOS : ターミナルを開き、 ifconfigまたはipconfig getifaddr en0 (WiFi の場合) を実行します。

  • Windows : コマンドプロンプトを開き、 ipconfigを実行します。

  • Linux : ターミナルを開き、 ip addr showまたはhostname -Iを実行します。

出力で192.168.xxや10.xxxなどの IPv4 アドレスを探します。

テスト構成

テスト用に、別の構成ファイル.env.testが提供されています。

cp .env.example .env.test

テスト固有の値を設定するには、 .env.testを編集します。

ANKI_CONNECT_URL=http://localhost:8765
ANKI_CONNECT_VERSION=6
ANKI_MOCK_MODE=true

テストモードで実行するには:

npm run start:test

使用法

  1. AnkiConnectがインストールされた状態でAnkiが動作していることを確認してください

  2. MCP サーバーを実行します。

    npm start

Claudeデスクトップの設定

この MCP サーバーを Claude Desktop で使用するには:

  1. クロードデスクトップを開く

  2. 次の場所にある 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

  3. mcpServersセクションに次の構成を追加します。

{
  "mcpServers": {
    "anki": {
      "command": "node",
      "args": ["path/to/anki-mcp-server/dist/index.js"]
    }
  }
}

"path/to/anki-mcp-server"このリポジトリをクローンした実際のパスに置き換えます。

MCPツールの使用

設定が完了すると、Claude で次のツールを使用できるようになります。

使用例

Could you analyze my Anki leech cards and suggest ways to improve my study?

クロードは MCP サーバーを使用してリーチ カードを取得し、分析します。

利用可能なツール

リーチカードを取得する

Anki からリーチとしてタグ付けされたカードを取得します。

パラメータ:

  • detailed (オプション、ブール値、デフォルト:true):包括的なカードデータを返すか、IDのみを返すか

  • count (オプション、数値): 返されるランダムカードの数 (デフォルトはすべてのカード)

タグレビュー済みカード

指定したカードに日付入りの「レビュー済み」タグを追加します。これにより、Claude でレビューしたカードを追跡できます。

パラメータ:

  • card_ids (必須、数字の配列): レビュー済みとしてタグ付けするカードIDの配列

  • custom_tag_prefix (オプション、文字列、デフォルト: "レビュー"): タグのカスタム プレフィックス

タグの形式は見直し_YYYYMMDD (または指定されている場合はカスタムプレフィックス) になります。

Claude での使用例:

I've reviewed these cards, please tag them as reviewed: [1234567890, 1234567891]

トラブルシューティング

  • 「Ankiに接続できませんでした」 - Ankiが実行中であり、AnkiConnectが正しくインストールされていることを確認してください

  • 「リーチカードが見つかりません」 - Ankiに「リーチ」タグの付いたカードがありません

  • localhost との接続の問題- localhostを使用して接続できない場合:

    1. 構成セクションの説明に従ってローカルIPアドレスを見つけます

    2. ANKI_CONNECT_URL=http://YOUR_LOCAL_IP:8765使用するように.envファイルを更新します。

    3. AnkiConnectがあなたのIPアドレスからの接続を許可するように設定されていることを確認してください

    4. これらの変更を行った後、MCPサーバーを再起動します。

  • タグが表示されない- tag_reviewed_cardsツールに有効なカード ID を指定していることを確認してください

テストモード

実際の Anki データに影響を与えずにテストするには、モック モードを使用できます。

  1. .envファイルでANKI_MOCK_MODE=trueを設定するか、提供されている.env.testファイルを使用します。

  2. npm run start:testでサーバーを実行します。

モックモードでは、サーバーはAnkiに実際に接続することなく、Ankiのすべての操作をシミュレートします。これは、データ変更のリスクを負うことなくClaudeとの統合をテストするのに役立ちます。

発達

ホット リロードを使用して開発モードでサーバーを実行するには:

npm run dev

モックモードを有効にした開発の場合:

npm run dev:test

ライセンス

マサチューセッツ工科大学

Available Tools

2 tools
get_leech_cardsB

Retrieve cards tagged as leeches from Anki

ParametersJSON Schema
NameRequiredDescriptionDefault
detailedNoWhether to return detailed card information or just IDs
countNoNumber of random cards to return (defaults to all)

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden for behavioral disclosure. While 'Retrieve' implies a read operation, it doesn't specify whether this requires authentication, how results are returned (format, pagination), error conditions, or performance characteristics. The description is minimal and lacks behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with zero wasted words. It's appropriately sized for a simple retrieval tool and front-loads the essential information. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a retrieval tool with 2 parameters and 100% schema coverage but no annotations or output schema, the description provides basic purpose but lacks behavioral context and usage guidance. It's minimally adequate but has clear gaps in explaining how the tool behaves and when to use it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters thoroughly. The description adds no parameter-specific information beyond what's in the schema. Baseline 3 is appropriate when the schema does the heavy lifting, though no additional semantic context is provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Retrieve') and target resource ('cards tagged as leeches from Anki'), making the purpose immediately understandable. It doesn't explicitly differentiate from its sibling tool 'tag_reviewed_cards', but the distinction is implied through the different operations (retrieval vs tagging).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives or in what context. The description only states what the tool does, without mentioning prerequisites, timing considerations, or relationship to the sibling tool beyond their different names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tag_reviewed_cardsC

Add a 'reviewed on date' tag to specified cards

ParametersJSON Schema
NameRequiredDescriptionDefault
card_idsYesArray of card IDs to tag as reviewed
custom_tag_prefixNoCustom prefix for the tag (default: '見直し')

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It implies a mutation ('Add'), but doesn't clarify if this is destructive (e.g., overwrites existing tags), requires authentication, has side effects, or includes error handling. The description is minimal and lacks critical behavioral details for a write operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero waste. It's front-loaded with the core action and resource, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's mutation nature (adding tags), no annotations, and no output schema, the description is incomplete. It doesn't cover behavioral aspects like permissions, side effects, or return values, leaving significant gaps for an AI agent to understand how to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents both parameters (card_ids and custom_tag_prefix). The description adds no additional parameter semantics beyond implying the tag format ('reviewed on date'), which is already suggested by the schema's default value for custom_tag_prefix. Baseline 3 is appropriate as the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Add') and target resource ('tag to specified cards'), with the specific tag content 'reviewed on date' mentioned. However, it doesn't differentiate from the sibling tool 'get_leech_cards' (which presumably retrieves rather than modifies cards), so it doesn't fully distinguish from alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description doesn't mention the sibling tool 'get_leech_cards' or any other context for selection, nor does it specify prerequisites like required permissions or system states.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updates
    • First observedget_leech_cards
    • First observedtag_reviewed_cards

TDQS

B3.1/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have completely distinct purposes: one retrieves cards with a specific tag, while the other adds a tag to cards. There is no overlap in functionality or ambiguity between them.

Naming Consistency5/5

Both tools follow a consistent verb_noun pattern (get_leech_cards, tag_reviewed_cards) with clear actions and objects, making them predictable and easy to understand.

Tool Count2/5

With only 2 tools, the server feels thin for an Anki integration, lacking basic operations like creating cards, reviewing cards, or managing decks. This minimal set limits agent workflows significantly.

Completeness2/5

The toolset is severely incomplete for an Anki server, missing core CRUD operations for cards, decks, and reviews. Agents cannot perform essential tasks like adding new cards or scheduling reviews, leading to dead ends.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers