Anki MCP
公式AIアシスタントが間隔反復フラッシュカードアプリケーションAnkiと対話できるようにするMCPサーバー。
Anki MCPで何ができますか?
- 復習カードを会話形式で確認 — アシスタントに
get_due_cardsで期限切れカードを取得させ、present_cardで各カードを提示し、rate_cardで評価を記録してもらいます。 - フラッシュカードの作成と一括追加 — アシスタントに
addNotesでノートを一括作成させ、必要に応じてcreateModelとupdateModelStylingでカスタムモデルを先に構築します。 - 既存ノートの検索と編集 — Ankiのクエリ構文で
findNotesを使用し、notesInfoで詳細を確認し、updateNoteFieldsでフィールドを更新します。 - デッキとスケジュールの管理 —
createDeckでデッキを作成し、changeDeckでカードを移動、またはsetDueDateとforgetCardsでカードを再スケジュールします。 - ノートへのメディア取り込み — アシスタントに
storeMediaFileでローカル画像やURLをアップロードさせ、ノートのフィールドに埋め込んでもらいます。 - Anki GUIの操作 —
guiBrowseとguiEditNoteでブラウザやエディタを開き、guiSelectedNotesで選択中のノートを取得します。
ドキュメント
Anki MCP サーバー
AIアシスタントとAnkiを、Model Context Protocolを通じてシームレスに統合します
ベータ版 - このプロジェクトは活発に開発中です。APIと機能は変更される可能性があります。
AIアシスタントがAnki(間隔反復フラッシュカードアプリケーション)と対話できるようにするModel Context Protocol(MCP)サーバーです。
自然言語での対話を通じてAnki体験を変革しましょう。まるで専属チューターがいるかのようです。AIアシスタントは単に質問と回答を提示するだけでなく、概念を説明し、学習プロセスをより魅力的で人間らしいものにし、文脈を提供し、あなたの学習スタイルに適応します。その場でノートを作成・編集でき、学習セッションをダイナミックな会話に変えます。さらに多くの機能が近日公開予定です!
例とチュートリアル
このMCPサーバーをClaude Desktopで使用するための包括的なガイド、実践的な例、ステップバイステップのチュートリアルについては、以下をご覧ください:
ankimcp.ai - 実践的な例とユースケースを含む完全なドキュメント
補足ドキュメントについてはdocs/を参照してください。レビューアーセットアップガイドとサンプルのAnkiデッキも含まれています。
使用例
このサーバーが有効にするツールフローを示す代表的なプロンプトを3つ紹介します:
-
「スペイン語のデッキを復習するのを手伝って。」 — アシスタントはAnkiWebと同期し(
sync)、期限切れのカードを取得し(get_due_cards、デッキフィルター付き)、各カードを提示し(present_card)、あなたの評価を記録します(rate_card)。あなたに合わせた説明付きの自然な学習会話が行われます。 -
「RTLスタイルのアラビア語ボキャブラリーカードを10枚作成して。」 — アシスタントはノートタイプを一覧表示し(
modelNames)、必要に応じてカスタムRTLモデルを作成し(createModel+updateModelStyling、右から左へのCSS用)、カードを一括作成します(addNotes)。 -
「ダウンロードフォルダからこの画像を選択中のノートの表面にインポートして。」 — アシスタントはローカルファイルをアップロードし(
storeMediaFile、ファイルパス付き)、ブラウザから現在選択中のノートを読み取り(guiSelectedNotes+notesInfo)、<img>タグ付きで表面フィールドを更新します(updateNoteFields)。
利用可能なツール
このサーバーは50個のMCPツールを公開しています — 日常的なAnki操作のための39個の必須ツールと、ノート編集・作成ワークフローのためにAnkiデスクトップインターフェースを操作する11個のGUIツールです。
必須ツール
復習と学習
sync- AnkiWebと同期して最新データを取得し、変更をプッシュしますget_due_cards- 復習期限が来たカードを取得します。デッキでフィルタリング可能(include_answer: trueでない限り回答は省略、デフォルトはfalse)get_cards- 状態(期限切れ、新規、学習中、一時停止、埋没)とデッキによる柔軟なフィルタリングでカードを取得します(include_answer: trueでない限り回答は省略、デフォルトはfalse)present_card- 復習用のカードを質問/表面側で表示しますrate_card- カードのパフォーマンスを評価し(Again、Hard、Good、Easy)、次の復習をスケジュールしますforgetCards- カードを新規状態にリセットし、復習を記録せずにスケジュールを破棄しますsetDueDate- カードをN日後に期限が来るように再スケジュールします("0"、"3-7"、"1!")、復習を記録せずに
注:
forgetCardsとsetDueDateは復習を記録せずにスケジュールを変更します。これがrate_cardとの違いです。カードのスケジュールが間違っている場合に使用してください。答えではなく:カードをAgainと評価してより深く埋没させると、実際の失敗が記録され、イーズファクターが低下し、将来のスケジュールと統計の両方が永続的に歪みます。forgetCardsは間隔を消去してカードを最初からやり直します。setDueDateはカードの履歴を保持し、次の復習を移動するだけです。
注: カードの
front/backコンテンツは、各カードの独自テンプレートからレンダリングされます(Ankiが表示するように)。そのため、反転カードや穴埋めカードは正しい方向で表示されます。カードテンプレートによって追加された静的テキストも出力に表示されます。
デッキ管理
listDecks- すべてのデッキを一覧表示します。オプションでデッキごとの学習キューの統計付きdeckStats- 単一デッキの包括的な統計を取得します(学習キュー、実際のカード状態数、イーズ/間隔分布)createDeck- 新しい空のデッキを作成します(Parent::Childをサポート、最大2レベル)changeDeck- カードを別のデッキに移動します(存在しない場合は作成されます)
注: デッキ統計には2つの種類があります。
countsブロック(およびlistDecksが報告するすべて)はAnkiのデッキブラウザを反映しています:今日期限が来るカードで、各デッキの毎日の新規/復習制限によって制限され、一時停止と埋没のカードは除外されます。つまり、reviewは「成熟したカード」ではなく、otherバケットは単なる算術的な残りです(主に今日期限が来ない復習カードと毎日の制限を超えた新規カード)。状態ごとの真の合計については、deckStats/collection_statsのstatesブロックを使用してください。これはAnki検索を介してnew、learning、review、suspended、buriedを数え、期限日と毎日の制限を無視します。
ノート管理
addNote- 指定されたフィールドとタグで単一のノートを作成しますaddNotes- デッキとモデルを共有する最大100ノートを一括作成します(部分的な成功をサポート)findNotes- Ankiクエリ構文を使用してノートを検索します(deck:、tag:、is:dueなど)notesInfo- ノートの詳細情報を取得します(フィールド、タグ、CSSスタイリング)updateNoteFields- 既存のノートフィールドを更新します(CSS対応、HTMLコンテンツをサポート)deleteNotes- ノートと関連するすべてのカードを削除します(破壊的、確認が必要)
タグ管理
getTags- コレクション内のすべてのタグを取得します(重複を避けるために最初に使用)addTags- 指定されたノートにスペース区切りのタグを追加しますremoveTags- 指定されたノートからスペース区切りのタグを削除しますreplaceTags- 指定されたノート間でタグを名前変更しますclearUnusedTags- どのノートにも使用されていない孤立タグを削除します(破壊的)
メディア管理
getMediaFilesNames-collection.media内のメディアファイルを一覧表示します。オプションでパターンでフィルタリングretrieveMediaFile- メディアファイルをbase64コンテンツとしてダウンロードしますstoreMediaFile- base64データ、絶対ファイルパス、またはURLからメディアをアップロードしますdeleteMediaFile-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- 既存のノートタイプのフィールド名を変更します(古い名前を参照するカードテンプレートは別途更新する必要があります)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に推奨)
Claude Desktop用にこのMCPサーバーをインストールする最も簡単な方法:
- Releasesページから最新の
.mcpbバンドルをダウンロードします - Claude Desktopで拡張機能をインストールします:
- 方法1:設定 → 拡張機能に移動し、
.mcpbファイルをドラッグ&ドロップします - 方法2:設定 → 開発者 → 拡張機能 → 拡張機能をインストールに移動し、
.mcpbファイルを選択します
- 方法1:設定 → 拡張機能に移動し、
- 必要に応じてAnkiConnect URLを設定します(デフォルトは
http://localhost:8765) - Claude Desktopを再起動します
これで完了です!バンドルにはサーバーをローカルで実行するために必要なものがすべて含まれています。
Anthropic MCPディレクトリのレビューアー向け: 事前にデータが入ったサンプルデッキを使ったゼロから統合までのウォークスルーは
docs/reviewer-setup.mdにあります。
ソースからインストール(開発用)
開発または高度な使用法の場合(テストスイートの実行にはNode.js 24.9以上が必要です — npmテストスクリプトはrequire(esm)を介してESM専用のNestJS 12パッケージをロードします。これはJestがそのバージョンでのみサポートしています。サーバーを使用するためのランタイム要件は22.12.0以上のままです):
npm install
npm run build
AIクライアントの接続
AIアシスタントがこのサーバーに到達する方法は2つあり、アシスタントが実行される場所によって異なります:
- ローカル — サーバーはAIクライアント(Claude Desktop、Cursor、Cline、Zed、またはローカルブラウザセッション)と同じマシンで実行されます。デスクトップMCPクライアントにはSTDIOを、ローカルWebベースのツールにはHTTPを使用します。
- リモート — ホスト型/リモートAI(例:クラウド上のChatGPTやClaude.ai)がローカルマシンで実行されているAnkiに到達する必要があります。管理されたトンネル(✅推奨 — 認証付き)を使用するか、より軽量な認証なしの代替としてngrokを使用します。
ローカル
サーバーはAIクライアントと同じコンピューターで実行され、localhostでAnkiConnectと通信します。
STDIO(主要なローカル統合)
STDIOはローカルデスクトップMCPクライアントの標準トランスポートです — Claude Desktop、Cursor IDE、Cline、Zed Editorなど。クライアントはサーバーをサブプロセスとして起動し、標準入出力を介して通信します。 対応クライアント:
- Claude Desktop
- Cursor IDE - AI搭載コードエディタ
- Cline - AI支援のためのVS Code拡張機能
- Zed Editor - 高速でモダンなコードエディタ
- STDIOトランスポートをサポートするその他のMCPクライアント
Claude Desktopの場合、MCPBバンドルが最も簡単な方法です。他のクライアントの場合は、--stdioフラグを指定してnpmパッケージを設定してください。
設定 - いずれかの方法を選択:
方法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"
}
}
}
}
設定ファイルの場所:
- Cursor IDE:
~/.cursor/mcp.json(macOS/Linux) または%USERPROFILE%\.cursor\mcp.json(Windows) - Cline: VS Codeの設定UIからアクセス可能
- Zed Editor: 拡張機能マーケットプレイスからMCP拡張機能としてインストール
クライアント固有の機能やトラブルシューティングについては、お使いのMCPクライアントのドキュメントを参照してください。ビルド済みのdist/main-stdio.jsを直接指す設定については、Claude Desktopに接続も参照してください。
HTTP(ローカルWebベースAI)
HTTPモードは、MCP Streamable HTTPプロトコルを話すローカルWebサーバーとしてサーバーを実行します。これは、WebベースのAIツールがあなたのマシンを指すときに通信するトランスポートであり、Remoteオプションが外部に公開するものと同じです。単独では、HTTPモードはlocalhostのみにバインドします。
localhost以外にバインドしますか?
--host 0.0.0.0を渡す場合(またはリバースプロキシ/パブリックドメインの背後で実行する場合)、サーバーはDNSリバインディング保護のため、デフォルトでループバックHostヘッダーのみを受け入れます — クライアントが使用するホスト名に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から到達可能にするには、以下のRemoteオプションのいずれかを使用します。
Remote
ホスト型/リモートAI(クラウドで実行されているChatGPTやClaude.aiなど)は、localhostに直接到達できません。これらのオプションは、あなたのローカルAnkiをインターネットに公開し、リモートアシスタントが通信できるようにします。
Tunnel(✅推奨)
推奨されるリモートパス — 認証付きで安全です。 生のパブリックポートとは異なり、トンネルモードではログイン(OAuth 2.0デバイスフロー)が必要なため、URLを推測した人にはエンドポイントが開かれません。
トンネルモードでは、WebベースのAIアシスタントが、独自のトンネルを実行せずにあなたのローカルAnkiに到達できます。サーバーは管理されたAnkiMCPトンネルサービス(wss://tunnel.ankimcp.ai)にWebSocket経由で接続し、パブリックURLが割り当てられます。認証は組み込まれています — ngrokアカウントや別のトンネルプロセスは不要で、一度ログインするだけです。
ログイン(OAuthデバイスフロー):
トンネルモードはOAuth 2.0デバイス認可グラントを使用します。ログインすると、ブラウザが自動的に承認ページを開き、コードが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、ヘッドレスDocker、CI)、サーバーは即座に失敗し、最初にankimcp --loginを実行するよう求めます。接続されると、パブリックトンネルURLが表示されます。切断するにはCtrl+Cを押します。そのURLをAIアシスタントと共有してください。
トンネルモードの環境変数:
| 変数 | 説明 | デフォルト |
|---|---|---|
TUNNEL_SERVER_URL | トンネルサーバーのWebSocket URL(--tunnel/--loginフラグ値がこれを上書きします) | wss://tunnel.ankimcp.ai |
TUNNEL_AUTH_CLIENT_ID | デバイスフロー用のOAuthクライアントID。上級者向け — セルフホスト型トンネル/認証サービスを指す場合にのみ必要です。 | (組み込み) |
デバイスフローの認証エンドポイント(/auth/device、/auth/token)はTUNNEL_SERVER_URLから派生するため、--tunnel(またはTUNNEL_SERVER_URL)を別のホストに指定すると、認証もそのホストに移動します。
仕組み: トンネルモードは、インメモリトランスポート(TunnelTransport)の背後でMCPサーバーをプロセス内で実行します。そのトランスポートがMCPサーバーを所有し、リレーされた各リクエストボディをレスポンスに変換し、TunnelClientがそれをWebSocket経由でリモートトンネルサービスにブリッジします — MCPリクエストを中継し、レスポンスを返します。AnkiConnectは依然としてローカルマシン上でのみ到達可能です。
プロトコルリビジョン: トンネルはMCPサーバーをプロセス内で接続するため、トンネルモードはMCPプロトコルの2025リビジョンのみを提供します。一方、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よりも安全性が低くなります。独自のngrokエンドポイントを管理する特別な理由がない限り、Tunnelを優先してください。(グローバルなngrokインストールとauthtokenが必要です。)
--ngrokフラグは--host-header=rewriteでngrokを起動するため、ngrokは転送前にアップストリームのHostをlocalhostに書き換えます。これにより、ALLOWED_HOSTSにパブリックの*.ngrokドメインを追加しなくても、リクエストがループバックHost許可リスト内に保たれます(DNSリバインディング保護を参照)。ngrokを手動で実行する場合は、同じフラグ — ngrok http --host-header=rewrite 3000 — を使用してください。そうしないと、ngrokはパブリックのngrokホスト名をHostとして転送し、サーバーは403で拒否します。
CLIオプション(全モード)
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 all write operations)
--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フラグは、Ankiコレクションへの変更を防ぎます。有効にすると:
- すべての読み取り操作は正常に機能します(デッキの閲覧、カードの表示、ノートの検索)
- レビュー操作は許可されます(sync、answerCards、suspend/unsuspend)
- コンテンツの変更はブロックされます(addNote、deleteNotes、createDeck、updateNoteFieldsなど)
- 誤った変更のリスクなしに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 | AnkiConnect URL | http://localhost:8765 |
ANKI_CONNECT_API_VERSION | APIバージョン | 6 |
ANKI_CONNECT_API_KEY | AnkiConnectで設定されている場合のAPIキー | - |
ANKI_CONNECT_TIMEOUT | リクエストタイムアウト(ms) | 5000 |
READ_ONLY | 読み取り専用モードを有効にする(trueまたは1) | false |
PORT | HTTPモード: リッスンするポート(--portフラグが優先されます) | 3000 |
HOST | HTTPモード: バインドするアドレス(--hostフラグが優先されます) | 127.0.0.1 |
ALLOWED_HOSTS | HTTPモード: ループバック以外に受け入れる追加のHostヘッダー値(カンマ区切りのホスト名)。LAN/パブリックアドレスにバインドする場合やリバースプロキシの背後で実行する場合に必要です。HTTPモード設定を参照してください。 | ループバックのみ |
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 | トンネルサーバーのWebSocket URL(トンネルモードのみ) | 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」を含むノート"flag:1"- 赤いフラグが付いたノート"prop:due<=2"- 2日以内に期限が来るカード"deck:Spanish tag:verb"- スペイン語デッキのノートで動詞タグが付いたもの(AND)"deck:Spanish OR deck:French"- いずれかのデッキのノート
重要な注意事項
CSSとHTMLの処理
notesInfoツールは、適切なレンダリング認識のためのCSSスタイル情報を返しますupdateNoteFieldsツールはフィールドのHTMLコンテンツをサポートし、CSSスタイルを保持します- 各ノートモデルには独自のCSSスタイルがあります - モデル固有のCSSを取得するには
modelStylingを使用してください
更新に関する警告
⚠️ 重要: 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)、ループバック(127.x)、リンクローカル(169.254.x)、および非HTTP(S)スキームへのリクエストはブロックされます。特定のプライベートネットワークホストを許可するには
MEDIA_ALLOWED_HOSTSを設定してください。 - ファイル名はパストラバーサルを防ぐためにサニタイズされます(例:
../../シーケンスは削除されます)。
これらの保護はstoreMediaFile、retrieveMediaFile、deleteMediaFile、およびupdateNoteFieldsのオーディオ/ピクチャフィールドに適用されます。
パストラバーサルの脆弱性はHideaki Takahashiによって報告されました。
DNSリバインディング保護(HTTPトランスポート)
HTTPモードで実行する場合、サーバーはすべてのリクエストでHostヘッダーを検証します。デフォルトでは、ポートに関係なくループバックホスト(localhost、127.0.0.1、::1)のみが受け入れられます。Hostはブラウザで禁止されているヘッダーであるため、悪意のあるWebページはこれを偽造できません。これにより、リバウンドされたページが偽造されたHostとOriginなしでローカルサーバーに到達し、MCPツールに到達するDNSリバインディング経路が閉じられます。許可されていないHostは403で拒否されます。
0.0.0.0にバインドする場合、リバースプロキシの背後で実行する場合、またはパブリックトンネルドメインを公開する場合は、ALLOWED_HOSTS(カンマ区切りのホスト名)を設定して、これらのホストを許可します。ngrokでトンネリングする場合、サーバーは--host-header=rewriteを使用するため、アップストリームは引き続きループバックHostを認識します。オプションの完全なリストについては、HTTPモード設定を参照してください。
avishaigo-commitsおよびyotampe-plutoによって報告されたDNSリバインディングの脆弱性。
プライバシーポリシー
このMCPサーバーはお使いのマシン上でローカルに実行され、テレメトリ、分析、または使用状況データを収集しません。
完全なポリシー: https://ankimcp.ai/privacy/
- データ収集: サーバーは何も収集しません。AIアシスタントとローカルのAnkiConnectプラグイン間のリクエストをプロキシするだけです。
- 使用状況/保存: サーバー側での保存はありません。すべてのフラッシュカードデータは、お使いのデバイス上のAnkiインストールに残ります。
- 第三者との共有: なし。サーバーは、設定したAnkiConnect URL(デフォルト: localhost)とのみ通信します。Ankiの組み込みAnkiWeb同期を有効にした場合、それは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などのバージョンマネージャーを使用できます。
開発
トランスポートモード
このサーバーは、個別のエントリポイントを介して3つのMCPトランスポートモードをサポートしています:
STDIOモード(デフォルト)
- Claude DesktopなどのローカルMCPクライアント用
- 通信に標準入出力を使用
- エントリポイント:
dist/main-stdio.js - 実行:
npm run start:prod:stdioまたはnode dist/main-stdio.js - MCPBバンドル: STDIOモードを使用
HTTPモード(ストリーミングHTTP)
- リモートMCPクライアントおよびWebベースの統合用
- 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トンネルサービスを介したWebベースのAIアシスタント用
- MCPサーバーはインメモリトランスポートの背後でプロセス内で実行されます。
TunnelTransportがMCPサーバーを所有し、TunnelClientがWebSocketを介してトンネルサービスにブリッジします - プロトコル: 2025 MCPリビジョンのみを提供(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- 組み込みのループバックセット(localhost、127.0.0.1、::1)に加えて受け入れる追加のHostヘッダー値のカンマ区切りリスト。ホスト名のみでポート非依存。デフォルト: ループバックのみ。ALLOWED_ORIGINS- ブラウザのOrigin/Refererパターンのカンマ区切り許可リスト。ワイルドカード対応(例:https://*.ngrok.io)。デフォルト:http://localhost:*,http://127.0.0.1:*,https://localhost:*,https://127.0.0.1:*。LOG_LEVEL- ログレベル(デフォルト: info)
セキュリティ:
- ホストヘッダー検証(DNSリバインディング保護) — すべてのHTTPリクエストには、許可リストに一致する
Hostヘッダーが必要です。デフォルトでは、ポートに関係なくループバックホスト(localhost、127.0.0.1、::1)のみが受け入れられます。Hostはブラウザで禁止されているヘッダーであるため、悪意のあるWebページはこれを偽造できません。これにより、リバウンドされたページが偽造されたHostとOriginなしでサーバーに到達するDNSリバインディング経路が閉じられます。許可されていないHostは403で拒否されます。 - オリジンヘッダー検証 — 存在するが許可されていない
Origin/Refererを持つブラウザリクエストは拒否されます。Originのないリクエスト(curl、Postman、MCP-over-HTTPクライアント)は許可されます。ホスト検証がリバインディングに対する防御です。 - デフォルトでlocalhost(127.0.0.1)にバインドします。
- 現在のバージョンでは認証なし(OAuthサポートは計画中)。
HTTPモードをlocalhostの外部に公開する — LAN/パブリックアドレスにバインドする場合、またはサーバーをリバースプロキシやパブリックドメインの背後に置く場合は、クライアントが使用するホスト名をALLOWED_HOSTSに設定する必要があります。そうしないと、ループバック以外のすべてのリクエストが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なしでバインドすると、サーバーはループバックの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/ディレクトリ - 3つのエントリポイントすべてを含む) - 本番依存関係のみ(
node_modules/- devDependenciesはmcpb cleanによって削除) - パッケージメタデータ(
package.json) - マニフェスト設定(
manifest.json-main-stdio.jsを使用するように設定) - アイコン(
icon.png)
ソースファイル、テスト、開発設定は、.mcpbignoreを介して自動的に除外されます。
Claude Desktopでのログ記録
Claude DesktopでMCPB拡張機能として実行する場合、ログは次の場所に書き込まれます:
ログの場所: ~/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 Inspectorを使用して、IDE(WebStorm、VS Codeなど)からデバッガーをアタッチしてMCPサーバーをデバッグできます。
HTTPモードの注: MCP InspectorでHTTPモード(Streamable HTTP)をテストする場合、CORSエラーを回避するために「Connection Type: Via Proxy」を使用してください。
ステップ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
これにより、ポート9229でNode.jsデバッグを有効にしてサーバーが起動し、最初の行で実行が一時停止します。
ステップ3: IDEからデバッガーをアタッチ
WebStorm
- 実行 → 設定の編集に移動
- 新しいAttach to Node.js/Chrome設定を追加
- ポートを
9229に設定 - デバッグをクリックしてアタッチ
VS Code
- デバッグパネルを開く(Ctrl+Shift+D / Cmd+Shift+D)
- **Debug MCP Server (Attach)**設定を選択
- F5を押してアタッチ
ステップ4: ブレークポイントを設定してデバッグ
アタッチ後、以下が可能です:
- TypeScriptソースファイルにブレークポイントを設定
- コード実行をステップ実行
- 変数と呼び出しスタックを検査
- デバッグコンソールを使用して式を評価
デバッガーはソースマップで動作し、コンパイルされたJavaScriptではなく元のTypeScriptコードをデバッグできます。
Claude Desktopでのデバッグ
Node.jsデバッガーを有効にしてIDEをアタッチすることで、Claude Desktop内で実行中のMCPサーバーをデバッグすることもできます。
ステップ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"
}
}
}
}
主な変更: dist/main-stdio.jsへのパスの前に--inspect=9229を追加
デバッグオプション:
--inspect=9229- デバッガーをすぐに起動、ブロックしない(推奨)--inspect-brk=9229- デバッガーがアタッチするまで実行を一時停止(起動問題のデバッグ用)
ステップ2: Claude Desktopを再起動
設定を保存した後、Claude Desktopを再起動します。MCPサーバーはポート9229でデバッグが有効になった状態で実行されます。
ステップ3: IDEからデバッガーをアタッチ
WebStorm
- 実行 → 設定の編集に移動
- +ボタンをクリックしてAttach to Node.js/Chromeを選択
- 設定:
- 名前:
Attach to Anki MCP (Claude Desktop) - ホスト:
localhost - ポート:
9229 - 接続先:
Node.js < 8またはChrome or Node.js > 6.3(WebStormのバージョンによって異なります)
- 名前:
- OKをクリック
- デバッグ(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は、npm publishが作成するものと同一の.tgzファイルを作成します.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/ ディレクトリに生成されます。
バージョニング
このプロジェクトは、セマンティックバージョニングに従い、1.0未満の開発アプローチを採用しています:
-
0.x.x - ベータ/開発バージョン(現在のフェーズ)
- 0.1.x - バグ修正とパッチ
- 0.2.0+ - 新機能または軽微な改善
- 破壊的変更は0.xバージョンでは許容されます
-
1.0.0 - 最初の安定版リリース
- APIが安定しテストされた時点でリリースされます
- 破壊的変更にはメジャーバージョンの引き上げが必要です(2.0.0など)
現在のステータス: 0.22.0 - アクティブなベータ開発中。最近の機能には、コレクション全体のレビュー分析(review_stats は deck が省略された場合にすべてのデッキを集計)、モデルフィールド管理(addModelField、removeModelField、renameModelField、repositionModelField)、バッチノート作成(addNotes)、統合ngrokトンネリング(--ngrok フラグ)、メディアファイル管理、モデル/テンプレート管理、包括的なデッキ統計が含まれます。APIはフィードバックとテストに基づいて変更される場合があります。
MCPB仕様の進化
このプロジェクトは、まだ進化中のAnthropicのMCPBバンドル仕様を対象としています。仕様はhttps://github.com/modelcontextprotocol/mcpbで追跡しており、準拠を維持するために破壊的変更を導入する場合があります。破壊的変更は0.x.xバージョニングスキームの下で許可されています。
類似プロジェクト
Anki MCP統合を探している場合、この分野の他のプロジェクトは以下のとおりです:
scorzeth/anki-mcp-server
- ステータス: 放棄されていると思われます(最近の更新なし)
- Anki MCP統合の初期実装
nailuoGG/anki-mcp-server
- アプローチ: 軽量な単一ファイル実装
- アーキテクチャ: すべてのツールが1つのファイルにある手続き型コード構造
- 適している用途: シンプルなユースケース、最小限の依存関係
このプロジェクトが異なる点:
- エンタープライズグレードのアーキテクチャ: 依存性注入を備えたNestJS上に構築
- モジュール設計: 各ツールは関心事の明確な分離を持つ独立したクラス
- 保守性: 既存のコードに触れることなく新機能を簡単に拡張可能
- テスト: 70%のカバレッジ要件を持つ包括的なテストスイート
- 型安全性: Zod検証を備えた厳格なTypeScript
- エラーハンドリング: 有益なユーザーフィードバックを備えた堅牢なエラーハンドリング
- 本番対応: 適切なロギング、進捗レポート、MCPBバンドルサポート
- スケーラビリティ: 基本的なツールから複雑なワークフローへ簡単に成長可能
ユースケース: 高度なAnki統合を構築するための強固な基盤が必要な場合、または機能を大幅に拡張する予定がある場合、このプロジェクトのアーキテクチャアプローチにより、長期的な保守とスケーリングが容易になります。
便利なリンク
- Model Context Protocolドキュメント
- AnkiConnect APIドキュメント
- Claude Desktopダウンロード
- デスクトップ拡張機能の構築(Anthropicブログ)
- MCPサーバーリポジトリ
- NestJSドキュメント
- Anki公式ウェブサイト
ライセンスと帰属
このプロジェクトはMITライセンスの下でライセンスされています — 全文はLICENSEを参照してください。
Copyright © 2026 Anatoly Tarnavsky.
サードパーティの帰属
-
Anki® はAnkitects Pty Ltdの登録商標です。このプロジェクトは非公式のサードパーティツールであり、Ankitects Pty Ltdとは提携、承認、または後援されていません。Ankiロゴは、https://apps.ankiweb.netへのリンク付きでAnkiを参照するための代替ライセンスの下で使用されています。公式のAnkiアプリケーションについては、https://apps.ankiweb.netを訪問してください。
-
Model Context Protocol (MCP) はAnthropicによるオープンスタンダードです。MCPロゴは公式のMCPドキュメントリポジトリからのもので、MITライセンスの下で使用されています。MCPの詳細については、https://modelcontextprotocol.ioを訪問してください。
-
これはAnkiとMCPテクノロジーを橋渡しする独立したプロジェクトです。すべての商標、サービスマーク、商号、製品名、およびロゴは、それぞれの所有者の財産です。