AnkiConnect Server
Headless AnkiConnect-compatible REST API server with AnkiWeb sync support and MCP server integration.
❓ Problem & Solution
Problem: Traditional AnkiConnect requires the Anki desktop app running, works only on localhost, and can't be deployed to servers.
Solution: This headless server provides direct collection access without Anki desktop, supports remote deployment, and includes automatic AnkiWeb sync.
✨ Features
- Server Deployment - Run on VPS, Raspberry Pi, or cloud without GUI
- AI Integration - MCP server for AI assistant access to your cards
- Full AnkiConnect API Compatibility - Version 6 API with all standard actions
- Headless Operation - No Qt/GUI required, perfect for servers and containers
- AnkiWeb Sync - Automatic synchronization with AnkiWeb (optional)
- MCP Server - Model Context Protocol integration for AI assistants
📋 Table of Contents
⚙️ Configuration
Set environment variables before running the server:
| Variable | Required | Default | Description |
|---|---|---|---|
ANKI_COLLECTION_PATH |
Yes | - | Path to your .anki2 collection file |
ANKICONNECT_PORT |
No | 8765 |
Server port |
ANKICONNECT_BIND |
No | 127.0.0.1 |
Bind address (use 0.0.0.0 for external access) |
ANKICONNECT_ANKIWEB_USER |
No | - | AnkiWeb username (required for sync) |
ANKICONNECT_ANKIWEB_PASS |
No | - | AnkiWeb password (required for sync) |
ANKICONNECT_ANKIWEB_URL |
No | - | Custom sync server URL (optional) |
Example .env File
# Required: Path to your Anki collection
ANKI_COLLECTION_PATH=/path/to/collection.anki21
# Optional: Server configuration
ANKICONNECT_PORT=8765
ANKICONNECT_BIND=127.0.0.1
# Optional: AnkiWeb sync credentials
ANKICONNECT_ANKIWEB_USER=your@email.com
ANKICONNECT_ANKIWEB_PASS=your_password
# Optional: Custom sync server
ANKIWEB_URL=https://your-sync-server.com
🚀 Usage
Quick Start with uvx (No Installation)
# Run the API server
ANKI_COLLECTION_PATH=/path/to/collection.anki21 \
ANKICONNECT_ANKIWEB_USER=your@email.com \
ANKICONNECT_ANKIWEB_PASS=your_password \
uvx anki-connect-server api
# Run the MCP server
ANKI_COLLECTION_PATH=/path/to/collection.anki21 \
ANKICONNECT_ANKIWEB_USER=your@email.com \
ANKICONNECT_ANKIWEB_PASS=your_password \
uvx anki-connect-server mcp
📚 API Reference
The server exposes a single POST endpoint at /api that accepts AnkiConnect-style JSON requests.
Request Format
{
"action": "actionName",
"version": 6,
"params": {
"param1": "value1",
"param2": "value2"
}
}
Response Format
{
"result": <action_result>,
"error": null
}
On error:
{
"result": null,
"error": "Error message"
}
Examples
Get Deck Names
curl -X POST http://localhost:8765/api \
-H "Content-Type: application/json" \
-d '{"action": "deckNames", "version": 6}'
Create a Deck
curl -X POST http://localhost:8765/api \
-H "Content-Type: application/json" \
-d '{"action": "createDeck", "version": 6, "params": {"deck": "My New Deck"}}'
Add a Note
curl -X POST http://localhost:8765/api \
-H "Content-Type: application/json" \
-d '{
"action": "addNote",
"version": 6,
"params": {
"note": {
"deckName": "Default",
"modelName": "Basic",
"fields": {
"Front": "Hello",
"Back": "World"
},
"tags": ["api"]
}
}
}'
Sync with AnkiWeb
curl -X POST http://localhost:8765/api \
-H "Content-Type: application/json" \
-d '{"action": "sync", "version": 6}'
Batch Multiple Actions
curl -X POST http://localhost:8765/api \
-H "Content-Type: application/json" \
-d '{
"action": "multi",
"version": 6,
"params": {
"actions": [
{"action": "deckNames", "params": {}},
{"action": "modelNames", "params": {}}
]
}
}'
Supported Actions
Misc
version- Get API versionsync- Sync with AnkiWebsyncStatus- Get sync statussyncMedia- Sync media onlymulti- Execute multiple actionsimportPackage- Import.apkgfileexportPackage- Export deck to.apkg
Decks
deckNames- Get all deck namesdeckNamesAndIds- Get deck names with IDscreateDeck- Create a new deckdeleteDecks- Delete deckschangeDeck- Move cards to different deckgetDecks- Get decks for cardsgetDeckConfig- Get deck configurationsaveDeckConfig- Save deck configurationsetDeckConfigId- Assign config to deckscloneDeckConfigId- Clone deck configremoveDeckConfigId- Remove deck config
Models
modelNames- Get all model namesmodelNamesAndIds- Get model names with IDsmodelFieldNames- Get field names for modelmodelFieldsOnTemplates- Get fields used in templatescreateModel- Create a new note modelmodelTemplates- Get card templatesmodelStyling- Get CSS stylingupdateModelTemplates- Update templatesupdateModelStyling- Update CSS
Notes
addNote- Add a single noteaddNotes- Add multiple notescanAddNotes- Check if notes can be addedupdateNoteFields- Update note fieldsfindNotes- Search for notesnotesInfo- Get note detailsdeleteNotes- Delete notesaddTags- Add tags to notesremoveTags- Remove tags from notesgetTags- Get all tags
Cards
findCards- Search for cardscardsToNotes- Get note IDs from card IDscardsInfo- Get card detailssuspend- Suspend cardsunsuspend- Unsuspend cardsareSuspended- Check if cards are suspendedareDue- Check if cards are duegetIntervals- Get card intervals
Media
getMediaDirPath- Get media directory pathstoreMediaFile- Store a media file (base64)retrieveMediaFile- Retrieve a media filedeleteMediaFile- Delete a media file
🤖 MCP Server
The server includes a Model Context Protocol (MCP) integration for AI assistants.
Starting the MCP Server
ANKI_COLLECTION_PATH=/path/to/collection.anki21 \
ANKICONNECT_ANKIWEB_USER=your@email.com \
ANKICONNECT_ANKIWEB_PASS=your_password \
uvx anki-connect-server mcp
Available MCP Tools
get_deck_names- Get all deck namesget_deck_names_and_ids- Get decks with IDscreate_deck- Create a new deckdelete_decks- Delete decksget_model_names- Get all model namesget_model_field_names- Get fields for a modeladd_note- Add a new notefind_notes- Search for notesget_notes_info- Get note detailsdelete_notes- Delete notesfind_cards- Search for cardsget_cards_info- Get card detailssuspend_cards/unsuspend_cards- Manage card suspensionare_suspended/are_due- Check card statusget_card_intervals- Get card intervalsget_all_tags- Get all tagsadd_tags/remove_tags- Manage tagsget_media_dir_path- Get media directorystore_media_file/retrieve_media_file/delete_media_file- Media operationschange_deck- Move cards between deckscards_to_notes- Convert card IDs to note IDsget_deck_config- Get deck configurationget_model_templates/get_model_styling- Model customizationget_api_version- Get API versionimport_package/export_package- Import/export deckssync/sync_media/get_sync_status- Sync operations
Adding to Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"anki-connect-server": {
"command": "uvx",
"args": ["anki-connect-server", "mcp"],
"env": {
"ANKI_COLLECTION_PATH": "/path/to/collection.anki21",
"ANKICONNECT_ANKIWEB_USER": "your@email.com",
"ANKICONNECT_ANKIWEB_PASS": "your_password"
}
}
}
}
🐳 Docker
Using Pre-built Image
docker run -d \
-p 8765:8765 \
-v /path/to/collection.anki21:/data/collection.anki21 \
-e ANKI_COLLECTION_PATH=/data/collection.anki21 \
-e ANKICONNECT_ANKIWEB_USER=your@email.com \
-e ANKICONNECT_ANKIWEB_PASS=your_password \
--name anki-connect-server \
glechic/anki-connect-server:latest
Docker Compose
version: '3.8'
services:
anki-connect-server:
image: glechic/anki-connect-server:latest
ports:
- "8765:8765"
volumes:
- ./collection.anki21:/data/collection.anki21
environment:
- ANKI_COLLECTION_PATH=/data/collection.anki21
- ANKICONNECT_ANKIWEB_USER=${ANKIWEB_USER}
- ANKICONNECT_ANKIWEB_PASS=${ANKIWEB_PASS}
restart: unless-stopped
Building from Source
docker build -t anki-connect-server .
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file anki_connect_server-0.3.0.tar.gz.
File metadata
- Download URL: anki_connect_server-0.3.0.tar.gz
- Upload date:
- Size: 36.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.7.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
624b7374731581dab66960fb680bbea1392e45f77478e9d1939ae690bdae22d8
|
|
| MD5 |
ddeecabc641f43432189a6d93e88d717
|
|
| BLAKE2b-256 |
a0f19d1c40cc63a089471408ed358882924c36503fdf5a2db162ac4eb56859f4
|
File details
Details for the file anki_connect_server-0.3.0-py3-none-any.whl.
File metadata
- Download URL: anki_connect_server-0.3.0-py3-none-any.whl
- Upload date:
- Size: 22.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.7.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d3fd0bb47f7c5976da5f5c3d1fe3bdf1640112a5e76746b614d21121457196ca
|
|
| MD5 |
6846609aa6964938d33dbe5e2523b936
|
|
| BLAKE2b-256 |
c91eaf27e40ff821d27904cca1c00fb38bc36eadf790137c94363d49d489c625
|