Skip to main content
Glama
stefanwille

Anki MCP Server

by stefanwille
README.md
# Anki MCP Server

[npm](https://www.npmjs.com/package/stefanwille-anki-mcp-server)

A Model Context Protocol (MCP) server for managing [Anki](https://apps.ankiweb.net/) flashcards. Connects to [AnkiConnect](https://foosoft.net/projects/anki-connect/) to enable AI assistants to create, read, and update flashcards.

## Prerequisites

- [Anki](https://apps.ankiweb.net/) with [AnkiConnect](https://ankiweb.net/shared/info/2055492159) add-on installed
- Node.js 24+ ([Download](https://nodejs.org/en/download))
- Anki running, with AnkiConnect on `http://127.0.0.1:8765` (default)

## Installation in Claude Desktop

- Open Claude Desktop
- Go to: "Claude" / "Settings..."
- Tab "Developer"
- Click "Edit Config"

Edit your Claude Desktop config (`claude_desktop_config.json`), and add:

```json
{
  "mcpServers": {
    "anki": {
      "command": "npx",
      "args": ["-y", "stefanwille-anki-mcp-server@latest"]
    }
  }
}
```

Restart Claude Desktop to activate.

## Troubleshooting

### "Failed to spawn process" / "command not found: npx" on macOS

Claude Desktop launches with a restricted `PATH` that doesn't include Node.js when installed via version managers like **Volta** or **nvm**. You'll see errors like:

```
Failed to spawn process: No such file or directory
```

or

```
node: command not found
```

**Fix:** Use the full path to `npx` and add the Node.js bin directory explicitly via `env`:

```json
{
  "mcpServers": {
    "anki": {
      "command": "/Users/YOUR_USERNAME/.volta/bin/npx",
      "args": ["-y", "stefanwille-anki-mcp-server@latest"],
      "env": {
        "PATH": "/Users/YOUR_USERNAME/.volta/bin:/usr/local/bin:/usr/bin:/bin"
      }
    }
  }
}
```

Replace `YOUR_USERNAME` with your macOS username and adjust the path if you use **nvm** (`~/.nvm/versions/node/vX.X.X/bin/`) or another version manager.

Find your actual `npx` path by running in a terminal:

```bash
which npx
```

## Example Prompts

- "What decks do I have in Anki?"
- "Show the cards in my Spanish vocabulary deck"
- "Check all cards in deck 'Italiano::Capitulo 3' for grammatical errors and correct them"
- "Create a card in my Italian deck with 'ciao' on the front and 'hello' on the back"
- "Extract the vocabulary from the photo and add it to my Italian deck with Italian on the front and German on the back: ..."
- "Create a new deck called 'Physics::Quantum Mechanics'"
- "Rename my 'Math' deck to 'Mathematics'"
- "Give me an exercise that requires me to use the Italian words in the deck 'Italienisch::Capitulo 6::Italienisch 38 - 2025-08-01'"

## Tools


| Tool           | Description                                  |
| -------------- | -------------------------------------------- |
| `get_decks`    | Get all deck names from Anki                 |
| `create_deck`  | Create a new deck                            |
| `delete_deck`  | Delete a deck and all its cards (including sub-decks) |
| `list_cards`   | List cards in a deck with front/back content |
| `create_cards` | Create one or more basic cards in a deck     |
| `update_card`  | Update an existing card's content            |
| `rename_deck`  | Rename a deck                                |


## Development

### Prerequisites

- Node.js 24+
- pnpm ([Installation](https://pnpm.io/installation))

### Build from Source

```bash
git clone https://github.com/stefanwille/anki-mcp-server.git
cd anki-mcp-server
pnpm install
pnpm build
```

### Watch Mode

```bash
pnpm watch
```

Rebuilds automatically on file changes.

### Install Locally

Update Claude Desktop config to point directly to the built file:

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

Replace `/absolute/path/to/anki-mcp-server` with your actual clone location.

### Publish to npm

Create a GitHub release to trigger the npm publish workflow:

```bash
pnpm login 
# If pnpm login produces a 404 page, try pnpm login again
pnpm version patch  # or minor, major
git push && git push --tags
gh release create v$(node -p "require('./package.json').version") --generate-notes
```

This triggers the GitHub Actions workflow that publishes to npm automatically using [trusted publishing](https://docs.npmjs.com/trusted-publishers) (OIDC), not access tokens.

## License

MIT

TDQS

B3.3/5.0

Scored across 8 tools

Disambiguation5/5

Each tool targets a distinct operation on either decks or cards. There is no overlap: deck tools (create, delete, rename, list) are clearly separate from card tools (create, update, delete, list). No two tools could be confused.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern with lowercase and underscores. Verbs like create, delete, get, list, rename, update are used appropriately. No style mixing or inconsistent naming.

Tool Count5/5

With 8 tools, the server covers essential deck and card operations without being excessive. The number is well-scoped for a focused Anki integration, neither too thin nor too heavy.

Completeness3/5

Core CRUD operations for decks and cards are present, but notable gaps exist: there is no way to retrieve a single card's details (only list cards in a deck), and card creation is limited to the Basic model. Features like moving cards between decks or searching are missing, leaving some workflows incomplete.

Maintenance

ActivityInactive
ResponsivenessNo issues