@spacholski1225/anki-connect-mcp 1.0.5 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +260 -245
- package/dist/index.js +3 -361
- package/dist/methods/anki.js +84 -15
- package/dist/server.js +77 -0
- package/dist/tools/cards.js +88 -116
- package/dist/tools/decks.js +141 -139
- package/dist/tools/define.js +35 -0
- package/dist/tools/gui.js +93 -0
- package/dist/tools/misc.js +48 -171
- package/dist/tools/models.js +37 -50
- package/dist/tools/notes.js +104 -120
- package/dist/types/anki/index.js +7 -7
- package/package.json +51 -49
- package/dist/tools/graphical.js +0 -133
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2025 Szymon Pacholski
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Szymon Pacholski
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,245 +1,260 @@
|
|
|
1
|
-
# Anki Connect MCP Server
|
|
2
|
-
|
|
3
|
-
A Model Context Protocol (MCP) server that provides seamless integration with Anki through the AnkiConnect add-on. This server enables AI assistants and other MCP clients to interact with your Anki flashcard collection programmatically.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
-
|
|
10
|
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
###
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
1.
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
"
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
"
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
"
|
|
169
|
-
"
|
|
170
|
-
"
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
]
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
-
|
|
210
|
-
-
|
|
211
|
-
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
-
|
|
219
|
-
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
-
|
|
244
|
-
-
|
|
245
|
-
|
|
1
|
+
# Anki Connect MCP Server
|
|
2
|
+
|
|
3
|
+
A Model Context Protocol (MCP) server that provides seamless integration with Anki through the AnkiConnect add-on. This server enables AI assistants and other MCP clients to interact with your Anki flashcard collection programmatically.
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
## What is Anki Connect?
|
|
8
|
+
|
|
9
|
+
[AnkiConnect](https://ankiweb.net/shared/info/2055492159) is a powerful Anki add-on that exposes Anki's functionality through a REST API. It allows external applications to:
|
|
10
|
+
|
|
11
|
+
- Create, modify, and delete flashcards
|
|
12
|
+
- Manage decks and their configurations
|
|
13
|
+
- Control Anki's GUI programmatically
|
|
14
|
+
- Search and retrieve card information
|
|
15
|
+
- Manage tags and note types
|
|
16
|
+
- Perform bulk operations on cards and notes
|
|
17
|
+
|
|
18
|
+
## What is MCP (Model Context Protocol)?
|
|
19
|
+
|
|
20
|
+
The Model Context Protocol is a standardized way for AI assistants to connect to external data sources and tools. This MCP server acts as a bridge between MCP clients (like Claude Desktop) and AnkiConnect, allowing AI assistants to help you manage your Anki flashcards naturally through conversation.
|
|
21
|
+
|
|
22
|
+
## Features
|
|
23
|
+
|
|
24
|
+
Every tool comes with a description, a title and MCP annotations (`readOnlyHint` / `destructiveHint`), so clients can auto-approve read-only tools and ask before destructive ones. On connect the server also sends instructions for the agent: Anki search syntax, note IDs vs card IDs, and the recommended flow for adding cards.
|
|
25
|
+
|
|
26
|
+
Errors are reported as tool errors (`isError: true`): `AnkiConnect error: ...` when Anki rejects a request, and `Could not reach AnkiConnect at <url>...` when Anki is not running.
|
|
27
|
+
|
|
28
|
+
### Default tools
|
|
29
|
+
|
|
30
|
+
- **Notes:** `add_note`, `add_notes`, `can_add_notes`, `update_note_fields`, `add_tags`, `remove_tags`, `find_notes`, `notes_info`
|
|
31
|
+
- **Cards:** `find_cards`, `cards_info`, `cards_to_notes`, `suspend`, `unsuspend`, `are_suspended`, `are_due`, `get_intervals`
|
|
32
|
+
- **Decks:** `deck_names`, `deck_names_and_ids`, `get_decks`, `change_deck`, `delete_decks`, `get_deck_config`
|
|
33
|
+
- **Models:** `model_names`, `model_names_and_ids`, `model_field_names`, `model_fields_on_templates`
|
|
34
|
+
- **Misc:** `version`, `get_tags`
|
|
35
|
+
|
|
36
|
+
`find_notes` and `find_cards` return `{ ids, total, truncated }` and accept an optional `limit` (default 100). `cards_info` strips the card CSS from the question and answer.
|
|
37
|
+
|
|
38
|
+
### Optional tool groups
|
|
39
|
+
|
|
40
|
+
| Group | Enabled by | Tools |
|
|
41
|
+
|-------|-----------|-------|
|
|
42
|
+
| GUI | `ANKI_MCP_ENABLE_GUI=1` | `gui_browse`, `gui_add_cards`, `gui_current_card`, `gui_start_card_timer`, `gui_show_question`, `gui_show_answer`, `gui_answer_card`, `gui_deck_overview`, `gui_deck_browser`, `gui_deck_review`, `gui_exit_anki` |
|
|
43
|
+
| Advanced | `ANKI_MCP_ENABLE_ADVANCED=1` | `multi`, `upgrade`, `save_deck_config`, `set_deck_config_id`, `clone_deck_config_id`, `remove_deck_config_id` |
|
|
44
|
+
|
|
45
|
+
## Configuration
|
|
46
|
+
|
|
47
|
+
| Variable | Default | Purpose |
|
|
48
|
+
|----------|---------|---------|
|
|
49
|
+
| `ANKI_CONNECT_URL` | `http://localhost:8765` | AnkiConnect address |
|
|
50
|
+
| `ANKI_CONNECT_API_KEY` | – | Sent as `key` with every request; set it when AnkiConnect has `apiKey` configured |
|
|
51
|
+
| `ANKI_MCP_ENABLE_GUI` | off | `1` or `true` enables the GUI tools |
|
|
52
|
+
| `ANKI_MCP_ENABLE_ADVANCED` | off | `1` or `true` enables the advanced tools |
|
|
53
|
+
|
|
54
|
+
### Upgrading from 1.x
|
|
55
|
+
|
|
56
|
+
- `create_flashcard` was removed; use `add_note` with `deckName`, `modelName` and `fields`.
|
|
57
|
+
- GUI tools, `multi`, `upgrade` and deck-config editing tools are hidden unless their group is enabled.
|
|
58
|
+
- Tool results contain only AnkiConnect's `result` (no `{result, error}` envelope); errors come back as tool errors.
|
|
59
|
+
- `find_notes` / `find_cards` return `{ ids, total, truncated }` instead of a plain array.
|
|
60
|
+
- Node.js 20 or newer is required.
|
|
61
|
+
|
|
62
|
+
## Prerequisites
|
|
63
|
+
|
|
64
|
+
### 1. Install AnkiConnect Add-on
|
|
65
|
+
|
|
66
|
+
1. Open Anki
|
|
67
|
+
2. Go to **Tools** → **Add-ons**
|
|
68
|
+
3. Click **Get Add-ons...**
|
|
69
|
+
4. Enter the code: `2055492159`
|
|
70
|
+
5. Click **OK** and restart Anki
|
|
71
|
+
|
|
72
|
+
### 2. Configure AnkiConnect (Optional)
|
|
73
|
+
|
|
74
|
+
AnkiConnect works out of the box, but you can customize its settings:
|
|
75
|
+
|
|
76
|
+
1. Go to **Tools** → **Add-ons**
|
|
77
|
+
2. Select **AnkiConnect** and click **Config**
|
|
78
|
+
3. Modify settings if needed (default port is 8765)
|
|
79
|
+
4. Restart Anki after making changes
|
|
80
|
+
|
|
81
|
+
## Installation
|
|
82
|
+
|
|
83
|
+
1. Clone this repository:
|
|
84
|
+
```bash
|
|
85
|
+
git clone https://github.com/spacholski1225/anki-connect-mcp.git
|
|
86
|
+
cd anki-connect-mcp
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
2. Install dependencies:
|
|
90
|
+
```bash
|
|
91
|
+
npm install
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
3. Build the project:
|
|
95
|
+
```bash
|
|
96
|
+
npm run build
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## MCP Client Configuration
|
|
100
|
+
|
|
101
|
+
### Claude Desktop
|
|
102
|
+
|
|
103
|
+
To use this MCP server with Claude Desktop, add the following configuration to your MCP settings file:
|
|
104
|
+
|
|
105
|
+
**Location of MCP configuration file:**
|
|
106
|
+
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
107
|
+
- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
108
|
+
- **Linux**: `~/.config/Claude/claude_desktop_config.json`
|
|
109
|
+
|
|
110
|
+
**Configuration Options:**
|
|
111
|
+
|
|
112
|
+
#### Option 1: Using Node.js (Local Installation)
|
|
113
|
+
```json
|
|
114
|
+
{
|
|
115
|
+
"mcpServers": {
|
|
116
|
+
"anki-connect-mcp": {
|
|
117
|
+
"command": "node",
|
|
118
|
+
"args": [
|
|
119
|
+
"dist/index.js"
|
|
120
|
+
],
|
|
121
|
+
"env": {},
|
|
122
|
+
"disabled": false,
|
|
123
|
+
"alwaysAllow": [
|
|
124
|
+
"deck_names",
|
|
125
|
+
"cards_info",
|
|
126
|
+
"deck_names_and_ids",
|
|
127
|
+
"find_notes"
|
|
128
|
+
]
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
#### Option 2: Using npx (NPM Package)
|
|
135
|
+
|
|
136
|
+
**Then configure your MCP client:**
|
|
137
|
+
```json
|
|
138
|
+
{
|
|
139
|
+
"mcpServers": {
|
|
140
|
+
"anki-connect": {
|
|
141
|
+
"command": "npx",
|
|
142
|
+
"args": [
|
|
143
|
+
"@spacholski1225/anki-connect-mcp"
|
|
144
|
+
],
|
|
145
|
+
"env": {},
|
|
146
|
+
"disabled": false,
|
|
147
|
+
"alwaysAllow": [
|
|
148
|
+
"deck_names",
|
|
149
|
+
"cards_info",
|
|
150
|
+
"deck_names_and_ids",
|
|
151
|
+
"find_notes"
|
|
152
|
+
]
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
#### Option 3: Using Docker
|
|
159
|
+
```json
|
|
160
|
+
{
|
|
161
|
+
"mcpServers": {
|
|
162
|
+
"anki-connect": {
|
|
163
|
+
"command": "docker",
|
|
164
|
+
"args": [
|
|
165
|
+
"run",
|
|
166
|
+
"--rm",
|
|
167
|
+
"-i",
|
|
168
|
+
"--network=host",
|
|
169
|
+
"-e", "ANKI_CONNECT_URL=http://host.docker.internal:8765",
|
|
170
|
+
"spacholski/anki-connect-mcp:latest"
|
|
171
|
+
],
|
|
172
|
+
"env": {},
|
|
173
|
+
"disabled": false,
|
|
174
|
+
"alwaysAllow": [
|
|
175
|
+
"deck_names",
|
|
176
|
+
"cards_info",
|
|
177
|
+
"deck_names_and_ids",
|
|
178
|
+
"find_notes"
|
|
179
|
+
]
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
**Docker-Specific AnkiConnect Configuration:**
|
|
186
|
+
|
|
187
|
+
When using the Docker option, you **must** configure AnkiConnect with specific settings to allow Docker container access:
|
|
188
|
+
|
|
189
|
+
1. Go to **Tools** → **Add-ons** in Anki
|
|
190
|
+
2. Select **AnkiConnect** and click **Config**
|
|
191
|
+
3. Update the configuration with the following settings:
|
|
192
|
+
|
|
193
|
+
```json
|
|
194
|
+
{
|
|
195
|
+
"apiKey": null,
|
|
196
|
+
"apiLogPath": null,
|
|
197
|
+
"ignoreOriginList": [],
|
|
198
|
+
"webBindAddress": "0.0.0.0",
|
|
199
|
+
"webBindPort": 8765,
|
|
200
|
+
"webCorsOriginList": [
|
|
201
|
+
"http://localhost",
|
|
202
|
+
"http://host.docker.internal",
|
|
203
|
+
"http://host.docker.internal:3000"
|
|
204
|
+
]
|
|
205
|
+
}
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
**Key Docker Configuration Points:**
|
|
209
|
+
- **`webBindAddress: "0.0.0.0"`** - Allows AnkiConnect to accept connections from any IP address (required for Docker containers)
|
|
210
|
+
- **`webCorsOriginList`** - Must include `"http://host.docker.internal"` and related origins to allow cross-origin requests from Docker containers
|
|
211
|
+
- Restart Anki after making these configuration changes
|
|
212
|
+
|
|
213
|
+
**Important Notes:**
|
|
214
|
+
- **For Node.js option**: Replace the path in `args` with the actual path to your built `index.js` file
|
|
215
|
+
- **For npx option**: Uses the published NPM package `@spacholski1225/anki-connect-mcp` - no local installation required
|
|
216
|
+
- **For Docker option**: Uses the pre-built Docker image `spacholski/anki-connect-mcp:latest`
|
|
217
|
+
- The `alwaysAllow` array contains tools that won't require confirmation each time
|
|
218
|
+
- Make sure Anki is running with AnkiConnect enabled before using the MCP server
|
|
219
|
+
- For Docker option, the `--network=host` flag allows the container to access AnkiConnect on the host machine
|
|
220
|
+
|
|
221
|
+
## Usage Examples
|
|
222
|
+
|
|
223
|
+
Once configured with an MCP client like Claude Desktop, you can interact with your Anki collection naturally:
|
|
224
|
+
|
|
225
|
+
- *"Create a flashcard about the capital of France in my Geography deck"*
|
|
226
|
+
- *"Show me all my deck names"*
|
|
227
|
+
- *"Find all cards tagged with 'vocabulary'"*
|
|
228
|
+
- *"Suspend all cards in the 'Difficult Words' deck"*
|
|
229
|
+
- *"Open the deck browser in Anki"* (needs `ANKI_MCP_ENABLE_GUI=1`)
|
|
230
|
+
|
|
231
|
+
## Troubleshooting
|
|
232
|
+
|
|
233
|
+
### Common Issues
|
|
234
|
+
|
|
235
|
+
1. **Connection refused**: Make sure Anki is running and AnkiConnect is installed
|
|
236
|
+
2. **Port conflicts**: Check if port 8765 is available or configure AnkiConnect to use a different port
|
|
237
|
+
3. **Permission errors**: Ensure the MCP server has proper file system permissions
|
|
238
|
+
4. **Tool not found**: Verify the MCP client configuration and restart the client
|
|
239
|
+
|
|
240
|
+
## Development
|
|
241
|
+
|
|
242
|
+
```bash
|
|
243
|
+
npm run typecheck # type-check sources and tests
|
|
244
|
+
npm test # protocol-level tests against a fake AnkiConnect
|
|
245
|
+
npm run build
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
## Contributing
|
|
249
|
+
|
|
250
|
+
Contributions are welcome! Please feel free to submit issues, feature requests, or pull requests.
|
|
251
|
+
|
|
252
|
+
## License
|
|
253
|
+
|
|
254
|
+
MIT License
|
|
255
|
+
|
|
256
|
+
## References
|
|
257
|
+
|
|
258
|
+
- [AnkiConnect Documentation](https://foosoft.net/projects/anki-connect/)
|
|
259
|
+
- [Model Context Protocol Specification](https://modelcontextprotocol.io/)
|
|
260
|
+
- [MCP SDK Documentation](https://github.com/modelcontextprotocol/typescript-sdk)
|