@ankimcp/anki-mcp-server 0.15.1 → 0.16.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.
Files changed (168) hide show
  1. package/LICENSE +659 -5
  2. package/README.md +48 -13
  3. package/dist/app.module.js +3 -0
  4. package/dist/app.module.js.map +1 -1
  5. package/dist/mcp/mcp-icons.d.ts +2 -0
  6. package/dist/mcp/mcp-icons.js +11 -0
  7. package/dist/mcp/mcp-icons.js.map +1 -0
  8. package/dist/mcp/primitives/essential/index.d.ts +25 -7
  9. package/dist/mcp/primitives/essential/index.js +49 -13
  10. package/dist/mcp/primitives/essential/index.js.map +1 -1
  11. package/dist/mcp/primitives/essential/prompts/twenty-rules.prompt/content.md +2 -2
  12. package/dist/mcp/primitives/essential/tools/add-note.tool.d.ts +2 -1
  13. package/dist/mcp/primitives/essential/tools/add-note.tool.js +2 -0
  14. package/dist/mcp/primitives/essential/tools/add-note.tool.js.map +1 -1
  15. package/dist/mcp/primitives/essential/tools/add-notes.tool.d.ts +2 -1
  16. package/dist/mcp/primitives/essential/tools/add-notes.tool.js +2 -0
  17. package/dist/mcp/primitives/essential/tools/add-notes.tool.js.map +1 -1
  18. package/dist/mcp/primitives/essential/tools/{tagActions/tagActions.tool.d.ts → add-tags.tool.d.ts} +6 -9
  19. package/dist/mcp/primitives/essential/tools/add-tags.tool.js +85 -0
  20. package/dist/mcp/primitives/essential/tools/add-tags.tool.js.map +1 -0
  21. package/dist/mcp/primitives/essential/tools/change-deck.tool.d.ts +107 -0
  22. package/dist/mcp/primitives/essential/tools/change-deck.tool.js +79 -0
  23. package/dist/mcp/primitives/essential/tools/change-deck.tool.js.map +1 -0
  24. package/dist/mcp/primitives/essential/tools/clear-unused-tags.tool.d.ts +104 -0
  25. package/dist/mcp/primitives/essential/tools/clear-unused-tags.tool.js +68 -0
  26. package/dist/mcp/primitives/essential/tools/clear-unused-tags.tool.js.map +1 -0
  27. package/dist/mcp/primitives/essential/tools/collection-stats/collection-stats.tool.d.ts +2 -1
  28. package/dist/mcp/primitives/essential/tools/collection-stats/collection-stats.tool.js +2 -0
  29. package/dist/mcp/primitives/essential/tools/collection-stats/collection-stats.tool.js.map +1 -1
  30. package/dist/mcp/primitives/essential/tools/collection-stats/collection-stats.types.d.ts +1 -1
  31. package/dist/mcp/primitives/essential/tools/create-deck.tool.d.ts +106 -0
  32. package/dist/mcp/primitives/essential/tools/create-deck.tool.js +78 -0
  33. package/dist/mcp/primitives/essential/tools/create-deck.tool.js.map +1 -0
  34. package/dist/mcp/primitives/essential/tools/create-model.tool.d.ts +3 -2
  35. package/dist/mcp/primitives/essential/tools/create-model.tool.js +2 -0
  36. package/dist/mcp/primitives/essential/tools/create-model.tool.js.map +1 -1
  37. package/dist/mcp/primitives/essential/tools/{deckActions/deckActions.tool.d.ts → deck-stats.tool.d.ts} +5 -12
  38. package/dist/mcp/primitives/essential/tools/deck-stats.tool.js +108 -0
  39. package/dist/mcp/primitives/essential/tools/deck-stats.tool.js.map +1 -0
  40. package/dist/mcp/primitives/essential/tools/deckActions/actions/changeDeck.action.d.ts +1 -1
  41. package/dist/mcp/primitives/essential/tools/deckActions/actions/createDeck.action.d.ts +1 -1
  42. package/dist/mcp/primitives/essential/tools/deckActions/actions/deckStats.action.d.ts +2 -2
  43. package/dist/mcp/primitives/essential/tools/deckActions/actions/listDecks.action.d.ts +2 -2
  44. package/dist/mcp/primitives/essential/tools/delete-media-file.tool.d.ts +106 -0
  45. package/dist/mcp/primitives/essential/tools/delete-media-file.tool.js +73 -0
  46. package/dist/mcp/primitives/essential/tools/delete-media-file.tool.js.map +1 -0
  47. package/dist/mcp/primitives/essential/tools/delete-notes.tool.d.ts +2 -1
  48. package/dist/mcp/primitives/essential/tools/delete-notes.tool.js +2 -1
  49. package/dist/mcp/primitives/essential/tools/delete-notes.tool.js.map +1 -1
  50. package/dist/mcp/primitives/essential/tools/find-notes.tool.d.ts +2 -1
  51. package/dist/mcp/primitives/essential/tools/find-notes.tool.js +2 -0
  52. package/dist/mcp/primitives/essential/tools/find-notes.tool.js.map +1 -1
  53. package/dist/mcp/primitives/essential/tools/get-cards.tool.d.ts +3 -2
  54. package/dist/mcp/primitives/essential/tools/get-cards.tool.js +2 -0
  55. package/dist/mcp/primitives/essential/tools/get-cards.tool.js.map +1 -1
  56. package/dist/mcp/primitives/essential/tools/get-due-cards.tool.d.ts +3 -2
  57. package/dist/mcp/primitives/essential/tools/get-due-cards.tool.js +2 -0
  58. package/dist/mcp/primitives/essential/tools/get-due-cards.tool.js.map +1 -1
  59. package/dist/mcp/primitives/essential/tools/get-media-files-names.tool.d.ts +106 -0
  60. package/dist/mcp/primitives/essential/tools/get-media-files-names.tool.js +76 -0
  61. package/dist/mcp/primitives/essential/tools/get-media-files-names.tool.js.map +1 -0
  62. package/dist/mcp/primitives/essential/tools/get-tags.tool.d.ts +2 -1
  63. package/dist/mcp/primitives/essential/tools/get-tags.tool.js +2 -0
  64. package/dist/mcp/primitives/essential/tools/get-tags.tool.js.map +1 -1
  65. package/dist/mcp/primitives/essential/tools/list-decks.tool.d.ts +106 -0
  66. package/dist/mcp/primitives/essential/tools/list-decks.tool.js +96 -0
  67. package/dist/mcp/primitives/essential/tools/list-decks.tool.js.map +1 -0
  68. package/dist/mcp/primitives/essential/tools/mediaActions/actions/deleteMediaFile.action.d.ts +1 -1
  69. package/dist/mcp/primitives/essential/tools/mediaActions/actions/getMediaFilesNames.action.d.ts +1 -1
  70. package/dist/mcp/primitives/essential/tools/mediaActions/actions/retrieveMediaFile.action.d.ts +1 -1
  71. package/dist/mcp/primitives/essential/tools/mediaActions/actions/storeMediaFile.action.d.ts +1 -1
  72. package/dist/mcp/primitives/essential/tools/model-field-names.tool.d.ts +2 -1
  73. package/dist/mcp/primitives/essential/tools/model-field-names.tool.js +2 -0
  74. package/dist/mcp/primitives/essential/tools/model-field-names.tool.js.map +1 -1
  75. package/dist/mcp/primitives/essential/tools/model-names.tool.d.ts +2 -1
  76. package/dist/mcp/primitives/essential/tools/model-names.tool.js +2 -0
  77. package/dist/mcp/primitives/essential/tools/model-names.tool.js.map +1 -1
  78. package/dist/mcp/primitives/essential/tools/model-styling.tool.d.ts +2 -1
  79. package/dist/mcp/primitives/essential/tools/model-styling.tool.js +2 -0
  80. package/dist/mcp/primitives/essential/tools/model-styling.tool.js.map +1 -1
  81. package/dist/mcp/primitives/essential/tools/notes-info.tool.d.ts +3 -2
  82. package/dist/mcp/primitives/essential/tools/notes-info.tool.js +2 -0
  83. package/dist/mcp/primitives/essential/tools/notes-info.tool.js.map +1 -1
  84. package/dist/mcp/primitives/essential/tools/present-card.tool.d.ts +3 -2
  85. package/dist/mcp/primitives/essential/tools/present-card.tool.js +2 -0
  86. package/dist/mcp/primitives/essential/tools/present-card.tool.js.map +1 -1
  87. package/dist/mcp/primitives/essential/tools/rate-card.tool.d.ts +2 -1
  88. package/dist/mcp/primitives/essential/tools/rate-card.tool.js +2 -0
  89. package/dist/mcp/primitives/essential/tools/rate-card.tool.js.map +1 -1
  90. package/dist/mcp/primitives/essential/tools/remove-tags.tool.d.ts +107 -0
  91. package/dist/mcp/primitives/essential/tools/remove-tags.tool.js +85 -0
  92. package/dist/mcp/primitives/essential/tools/remove-tags.tool.js.map +1 -0
  93. package/dist/mcp/primitives/essential/tools/replace-tags.tool.d.ts +108 -0
  94. package/dist/mcp/primitives/essential/tools/replace-tags.tool.js +92 -0
  95. package/dist/mcp/primitives/essential/tools/replace-tags.tool.js.map +1 -0
  96. package/dist/mcp/primitives/essential/tools/retrieve-media-file.tool.d.ts +106 -0
  97. package/dist/mcp/primitives/essential/tools/retrieve-media-file.tool.js +75 -0
  98. package/dist/mcp/primitives/essential/tools/retrieve-media-file.tool.js.map +1 -0
  99. package/dist/mcp/primitives/essential/tools/review-stats/review-stats.tool.d.ts +2 -1
  100. package/dist/mcp/primitives/essential/tools/review-stats/review-stats.tool.js +2 -0
  101. package/dist/mcp/primitives/essential/tools/review-stats/review-stats.tool.js.map +1 -1
  102. package/dist/mcp/primitives/essential/tools/review-stats/review-stats.types.d.ts +1 -1
  103. package/dist/mcp/primitives/essential/tools/{mediaActions/mediaActions.tool.d.ts → store-media-file.tool.d.ts} +5 -8
  104. package/dist/mcp/primitives/essential/tools/store-media-file.tool.js +92 -0
  105. package/dist/mcp/primitives/essential/tools/store-media-file.tool.js.map +1 -0
  106. package/dist/mcp/primitives/essential/tools/sync.tool.d.ts +2 -1
  107. package/dist/mcp/primitives/essential/tools/sync.tool.js +2 -0
  108. package/dist/mcp/primitives/essential/tools/sync.tool.js.map +1 -1
  109. package/dist/mcp/primitives/essential/tools/tagActions/actions/addTags.action.d.ts +1 -1
  110. package/dist/mcp/primitives/essential/tools/tagActions/actions/clearUnusedTags.action.d.ts +1 -1
  111. package/dist/mcp/primitives/essential/tools/tagActions/actions/removeTags.action.d.ts +1 -1
  112. package/dist/mcp/primitives/essential/tools/tagActions/actions/replaceTags.action.d.ts +1 -1
  113. package/dist/mcp/primitives/essential/tools/update-model-styling.tool.d.ts +2 -1
  114. package/dist/mcp/primitives/essential/tools/update-model-styling.tool.js +2 -0
  115. package/dist/mcp/primitives/essential/tools/update-model-styling.tool.js.map +1 -1
  116. package/dist/mcp/primitives/essential/tools/update-note-fields.tool.d.ts +2 -1
  117. package/dist/mcp/primitives/essential/tools/update-note-fields.tool.js +2 -0
  118. package/dist/mcp/primitives/essential/tools/update-note-fields.tool.js.map +1 -1
  119. package/dist/mcp/primitives/gui/tools/gui-add-cards.tool.d.ts +2 -1
  120. package/dist/mcp/primitives/gui/tools/gui-add-cards.tool.js +3 -1
  121. package/dist/mcp/primitives/gui/tools/gui-add-cards.tool.js.map +1 -1
  122. package/dist/mcp/primitives/gui/tools/gui-browse.tool.d.ts +2 -1
  123. package/dist/mcp/primitives/gui/tools/gui-browse.tool.js +2 -0
  124. package/dist/mcp/primitives/gui/tools/gui-browse.tool.js.map +1 -1
  125. package/dist/mcp/primitives/gui/tools/gui-current-card.tool.d.ts +3 -2
  126. package/dist/mcp/primitives/gui/tools/gui-current-card.tool.js +2 -0
  127. package/dist/mcp/primitives/gui/tools/gui-current-card.tool.js.map +1 -1
  128. package/dist/mcp/primitives/gui/tools/gui-deck-browser.tool.d.ts +2 -1
  129. package/dist/mcp/primitives/gui/tools/gui-deck-browser.tool.js +2 -0
  130. package/dist/mcp/primitives/gui/tools/gui-deck-browser.tool.js.map +1 -1
  131. package/dist/mcp/primitives/gui/tools/gui-deck-overview.tool.d.ts +2 -1
  132. package/dist/mcp/primitives/gui/tools/gui-deck-overview.tool.js +2 -0
  133. package/dist/mcp/primitives/gui/tools/gui-deck-overview.tool.js.map +1 -1
  134. package/dist/mcp/primitives/gui/tools/gui-edit-note.tool.d.ts +2 -1
  135. package/dist/mcp/primitives/gui/tools/gui-edit-note.tool.js +2 -0
  136. package/dist/mcp/primitives/gui/tools/gui-edit-note.tool.js.map +1 -1
  137. package/dist/mcp/primitives/gui/tools/gui-select-card.tool.d.ts +2 -1
  138. package/dist/mcp/primitives/gui/tools/gui-select-card.tool.js +2 -0
  139. package/dist/mcp/primitives/gui/tools/gui-select-card.tool.js.map +1 -1
  140. package/dist/mcp/primitives/gui/tools/gui-selected-notes.tool.d.ts +2 -1
  141. package/dist/mcp/primitives/gui/tools/gui-selected-notes.tool.js +2 -0
  142. package/dist/mcp/primitives/gui/tools/gui-selected-notes.tool.js.map +1 -1
  143. package/dist/mcp/primitives/gui/tools/gui-show-answer.tool.d.ts +2 -1
  144. package/dist/mcp/primitives/gui/tools/gui-show-answer.tool.js +2 -0
  145. package/dist/mcp/primitives/gui/tools/gui-show-answer.tool.js.map +1 -1
  146. package/dist/mcp/primitives/gui/tools/gui-show-question.tool.d.ts +2 -1
  147. package/dist/mcp/primitives/gui/tools/gui-show-question.tool.js +2 -0
  148. package/dist/mcp/primitives/gui/tools/gui-show-question.tool.js.map +1 -1
  149. package/dist/mcp/primitives/gui/tools/gui-undo.tool.d.ts +2 -1
  150. package/dist/mcp/primitives/gui/tools/gui-undo.tool.js +2 -0
  151. package/dist/mcp/primitives/gui/tools/gui-undo.tool.js.map +1 -1
  152. package/dist/tsconfig.build.tsbuildinfo +1 -1
  153. package/package.json +21 -18
  154. package/dist/mcp/primitives/essential/tools/deckActions/deckActions.tool.js +0 -210
  155. package/dist/mcp/primitives/essential/tools/deckActions/deckActions.tool.js.map +0 -1
  156. package/dist/mcp/primitives/essential/tools/deckActions/index.d.ts +0 -5
  157. package/dist/mcp/primitives/essential/tools/deckActions/index.js +0 -6
  158. package/dist/mcp/primitives/essential/tools/deckActions/index.js.map +0 -1
  159. package/dist/mcp/primitives/essential/tools/mediaActions/index.d.ts +0 -5
  160. package/dist/mcp/primitives/essential/tools/mediaActions/index.js +0 -6
  161. package/dist/mcp/primitives/essential/tools/mediaActions/index.js.map +0 -1
  162. package/dist/mcp/primitives/essential/tools/mediaActions/mediaActions.tool.js +0 -156
  163. package/dist/mcp/primitives/essential/tools/mediaActions/mediaActions.tool.js.map +0 -1
  164. package/dist/mcp/primitives/essential/tools/tagActions/index.d.ts +0 -5
  165. package/dist/mcp/primitives/essential/tools/tagActions/index.js +0 -6
  166. package/dist/mcp/primitives/essential/tools/tagActions/index.js.map +0 -1
  167. package/dist/mcp/primitives/essential/tools/tagActions/tagActions.tool.js +0 -153
  168. package/dist/mcp/primitives/essential/tools/tagActions/tagActions.tool.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ankimcp/anki-mcp-server",
3
- "version": "0.15.1",
3
+ "version": "0.16.0",
4
4
  "description": "Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards",
5
5
  "author": "Anatoly Tarnavsky",
6
6
  "private": false,
@@ -12,6 +12,8 @@
12
12
  },
13
13
  "scripts": {
14
14
  "build": "nest build",
15
+ "prebuild": "npm run generate:icon",
16
+ "generate:icon": "node scripts/generate-icon.mjs",
15
17
  "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
16
18
  "start:dev:stdio": "nest start --watch --entryFile main-stdio",
17
19
  "start:dev:http": "nest start --watch --entryFile main-http",
@@ -51,14 +53,14 @@
51
53
  "prepare": "husky"
52
54
  },
53
55
  "dependencies": {
54
- "@modelcontextprotocol/sdk": "1.28.0",
55
- "@nestjs/common": "^11.1.17",
56
- "@nestjs/config": "^4.0.3",
57
- "@nestjs/core": "^11.1.17",
56
+ "@modelcontextprotocol/sdk": "1.29.0",
57
+ "@nestjs/common": "^11.1.19",
58
+ "@nestjs/config": "^4.0.4",
59
+ "@nestjs/core": "11.1.19",
58
60
  "@nestjs/jwt": "^11.0.2",
59
61
  "@nestjs/passport": "^11.0.5",
60
- "@nestjs/platform-express": "^11.1.17",
61
- "@rekog/mcp-nest": "^1.9.8",
62
+ "@nestjs/platform-express": "^11.1.19",
63
+ "@rekog/mcp-nest": "^1.9.9",
62
64
  "commander": "^14.0.3",
63
65
  "ipaddr.js": "^2.3.0",
64
66
  "jsonwebtoken": "^9.0.3",
@@ -81,32 +83,33 @@
81
83
  "@anthropic-ai/mcpb": "^2.1.2",
82
84
  "@eslint/eslintrc": "^3.3.5",
83
85
  "@eslint/js": "^10.0.1",
84
- "@modelcontextprotocol/inspector": "^0.21.1",
85
- "@nestjs/cli": "^11.0.16",
86
- "@nestjs/schematics": "^11.0.9",
87
- "@nestjs/testing": "^11.1.17",
86
+ "@modelcontextprotocol/inspector": "^0.21.2",
87
+ "@nestjs/cli": "^11.0.21",
88
+ "@nestjs/schematics": "^11.1.0",
89
+ "@nestjs/testing": "^11.1.19",
88
90
  "@types/express": "^5.0.6",
89
91
  "@types/jest": "^30.0.0",
90
92
  "@types/jsonwebtoken": "^9.0.10",
91
93
  "@types/mdast": "^4.0.4",
92
- "@types/node": "^25.5.0",
94
+ "@types/node": "^25.6.0",
93
95
  "@types/supertest": "^7.2.0",
94
96
  "@types/update-notifier": "^6.0.8",
95
- "eslint": "^10.1.0",
97
+ "eslint": "^10.2.1",
96
98
  "eslint-config-prettier": "^10.1.8",
97
99
  "eslint-plugin-prettier": "^5.5.5",
98
- "globals": "^17.4.0",
100
+ "globals": "^17.5.0",
99
101
  "husky": "^9.1.7",
100
102
  "jest": "^30.3.0",
101
- "prettier": "^3.8.1",
103
+ "prettier": "^3.8.3",
104
+ "sharp": "^0.34.5",
102
105
  "source-map-support": "^0.5.21",
103
106
  "supertest": "^7.2.2",
104
- "ts-jest": "^29.4.6",
105
- "ts-loader": "^9.5.4",
107
+ "ts-jest": "^29.4.9",
108
+ "ts-loader": "^9.5.7",
106
109
  "ts-node": "^10.9.2",
107
110
  "tsconfig-paths": "^4.2.0",
108
111
  "typescript": "^5.9.3",
109
- "typescript-eslint": "^8.57.2"
112
+ "typescript-eslint": "^8.59.0"
110
113
  },
111
114
  "jest": {
112
115
  "moduleFileExtensions": [
@@ -1,210 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var DeckActionsTool_1;
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.DeckActionsTool = void 0;
14
- const common_1 = require("@nestjs/common");
15
- const mcp_nest_1 = require("@rekog/mcp-nest");
16
- const zod_1 = require("zod");
17
- const anki_connect_client_1 = require("../../../../clients/anki-connect.client");
18
- const anki_utils_1 = require("../../../../utils/anki.utils");
19
- const changeDeck_action_1 = require("./actions/changeDeck.action");
20
- const listDecks_action_1 = require("./actions/listDecks.action");
21
- const createDeck_action_1 = require("./actions/createDeck.action");
22
- const deckStats_action_1 = require("./actions/deckStats.action");
23
- let DeckActionsTool = DeckActionsTool_1 = class DeckActionsTool {
24
- ankiClient;
25
- logger = new common_1.Logger(DeckActionsTool_1.name);
26
- constructor(ankiClient) {
27
- this.ankiClient = ankiClient;
28
- }
29
- async execute(params, context) {
30
- try {
31
- this.logger.log(`Executing deck action: ${params.action}`);
32
- let result;
33
- switch (params.action) {
34
- case "listDecks":
35
- await context.reportProgress({ progress: 10, total: 100 });
36
- result = await (0, listDecks_action_1.listDecks)({ includeStats: params.includeStats }, this.ankiClient);
37
- await context.reportProgress({ progress: 100, total: 100 });
38
- break;
39
- case "createDeck":
40
- if (!params.deckName) {
41
- throw new Error("deckName is required for createDeck action");
42
- }
43
- await context.reportProgress({ progress: 25, total: 100 });
44
- result = await (0, createDeck_action_1.createDeck)({ deckName: params.deckName }, this.ankiClient);
45
- await context.reportProgress({ progress: 100, total: 100 });
46
- break;
47
- case "deckStats":
48
- if (!params.deck) {
49
- throw new Error("deck name is required for deckStats action");
50
- }
51
- await context.reportProgress({ progress: 10, total: 100 });
52
- result = await (0, deckStats_action_1.deckStats)({
53
- deck: params.deck,
54
- easeBuckets: params.easeBuckets,
55
- intervalBuckets: params.intervalBuckets,
56
- }, this.ankiClient, async (progress) => {
57
- await context.reportProgress({ progress, total: 100 });
58
- });
59
- await context.reportProgress({ progress: 100, total: 100 });
60
- break;
61
- case "changeDeck":
62
- if (!params.cards || params.cards.length === 0) {
63
- throw new Error("cards array is required for changeDeck action");
64
- }
65
- if (!params.deck) {
66
- throw new Error("deck name is required for changeDeck action");
67
- }
68
- await context.reportProgress({ progress: 25, total: 100 });
69
- result = await (0, changeDeck_action_1.changeDeck)({ cards: params.cards, deck: params.deck }, this.ankiClient);
70
- await context.reportProgress({ progress: 100, total: 100 });
71
- break;
72
- default: {
73
- const _exhaustive = params.action;
74
- throw new Error(`Unknown action: ${_exhaustive}`);
75
- }
76
- }
77
- this.logger.log(`Successfully executed ${params.action}`);
78
- return result;
79
- }
80
- catch (error) {
81
- this.logger.error(`Failed to execute ${params.action}`, error);
82
- return (0, anki_utils_1.createErrorResponse)(error, {
83
- action: params.action,
84
- hint: "Make sure Anki is running and the deck name/card IDs are valid",
85
- });
86
- }
87
- }
88
- };
89
- exports.DeckActionsTool = DeckActionsTool;
90
- __decorate([
91
- (0, mcp_nest_1.Tool)({
92
- name: "deckActions",
93
- description: `Manage Anki deck operations. Supports four actions:
94
- - listDecks: List all decks, optionally with statistics (includeStats: boolean)
95
- - createDeck: Create a new empty deck (deckName: string, max 2 levels like "Parent::Child")
96
- - deckStats: Get comprehensive statistics for a single deck including card counts, ease and interval distributions (deck: string, optional easeBuckets/intervalBuckets arrays)
97
- - changeDeck: Move cards to a different deck (cards: number[], deck: string)
98
-
99
- Remember to sync first at the start of a session for latest data.`,
100
- parameters: zod_1.z.object({
101
- action: zod_1.z
102
- .enum(["listDecks", "createDeck", "deckStats", "changeDeck"])
103
- .describe("The deck action to perform"),
104
- includeStats: zod_1.z
105
- .boolean()
106
- .optional()
107
- .describe("[listDecks] Include card count statistics for each deck"),
108
- deckName: zod_1.z
109
- .string()
110
- .optional()
111
- .describe('[createDeck] The name of the deck to create. Use "::" for parent::child structure (max 2 levels)'),
112
- deck: zod_1.z
113
- .string()
114
- .optional()
115
- .describe('[deckStats/changeDeck] Deck name (e.g., "Japanese::JLPT N5")'),
116
- easeBuckets: zod_1.z
117
- .array(zod_1.z.number().positive())
118
- .max(20)
119
- .optional()
120
- .describe("[deckStats] Bucket boundaries for ease factor distribution. Default: [2.0, 2.5, 3.0]"),
121
- intervalBuckets: zod_1.z
122
- .array(zod_1.z.number().positive())
123
- .max(20)
124
- .optional()
125
- .describe("[deckStats] Bucket boundaries for interval distribution in days. Default: [7, 21, 90]"),
126
- cards: zod_1.z
127
- .array(zod_1.z.number())
128
- .optional()
129
- .describe("[changeDeck] Array of card IDs to move"),
130
- }),
131
- outputSchema: zod_1.z.object({
132
- success: zod_1.z.boolean(),
133
- decks: zod_1.z
134
- .array(zod_1.z.object({
135
- name: zod_1.z.string(),
136
- stats: zod_1.z
137
- .object({
138
- deck_id: zod_1.z.number(),
139
- name: zod_1.z.string(),
140
- new_count: zod_1.z.number(),
141
- learn_count: zod_1.z.number(),
142
- review_count: zod_1.z.number(),
143
- total_new: zod_1.z.number(),
144
- total_cards: zod_1.z.number(),
145
- })
146
- .optional(),
147
- }))
148
- .optional(),
149
- total: zod_1.z.number().optional(),
150
- summary: zod_1.z
151
- .object({
152
- total_cards: zod_1.z.number(),
153
- new_cards: zod_1.z.number(),
154
- learning_cards: zod_1.z.number(),
155
- review_cards: zod_1.z.number(),
156
- })
157
- .optional(),
158
- message: zod_1.z.string().optional(),
159
- deckId: zod_1.z.number().optional(),
160
- deckName: zod_1.z.string().optional(),
161
- created: zod_1.z.boolean().optional(),
162
- exists: zod_1.z.boolean().optional(),
163
- parentDeck: zod_1.z.string().optional(),
164
- childDeck: zod_1.z.string().optional(),
165
- deck: zod_1.z.string().optional(),
166
- counts: zod_1.z
167
- .object({
168
- total: zod_1.z.number(),
169
- new: zod_1.z.number(),
170
- learning: zod_1.z.number(),
171
- review: zod_1.z.number(),
172
- })
173
- .optional(),
174
- ease: zod_1.z
175
- .object({
176
- mean: zod_1.z.number(),
177
- median: zod_1.z.number(),
178
- min: zod_1.z.number(),
179
- max: zod_1.z.number(),
180
- count: zod_1.z.number(),
181
- buckets: zod_1.z.record(zod_1.z.string(), zod_1.z.number()),
182
- })
183
- .optional(),
184
- intervals: zod_1.z
185
- .object({
186
- mean: zod_1.z.number(),
187
- median: zod_1.z.number(),
188
- min: zod_1.z.number(),
189
- max: zod_1.z.number(),
190
- count: zod_1.z.number(),
191
- buckets: zod_1.z.record(zod_1.z.string(), zod_1.z.number()),
192
- })
193
- .optional(),
194
- cardsAffected: zod_1.z.number().optional(),
195
- targetDeck: zod_1.z.string().optional(),
196
- }),
197
- annotations: {
198
- readOnlyHint: false,
199
- destructiveHint: false,
200
- },
201
- }),
202
- __metadata("design:type", Function),
203
- __metadata("design:paramtypes", [Object, Object]),
204
- __metadata("design:returntype", Promise)
205
- ], DeckActionsTool.prototype, "execute", null);
206
- exports.DeckActionsTool = DeckActionsTool = DeckActionsTool_1 = __decorate([
207
- (0, common_1.Injectable)(),
208
- __metadata("design:paramtypes", [anki_connect_client_1.AnkiConnectClient])
209
- ], DeckActionsTool);
210
- //# sourceMappingURL=deckActions.tool.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deckActions.tool.js","sourceRoot":"","sources":["../../../../../../src/mcp/primitives/essential/tools/deckActions/deckActions.tool.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- export { DeckActionsTool } from "./deckActions.tool";
2
- export type { ChangeDeckParams, ChangeDeckResult, } from "./actions/changeDeck.action";
3
- export type { ListDecksParams, ListDecksResult, } from "./actions/listDecks.action";
4
- export type { CreateDeckParams, CreateDeckResult, } from "./actions/createDeck.action";
5
- export type { DeckStatsParams, DeckStatsResult, AnkiDeckStatsResponse, } from "./actions/deckStats.action";
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DeckActionsTool = void 0;
4
- var deckActions_tool_1 = require("./deckActions.tool");
5
- Object.defineProperty(exports, "DeckActionsTool", { enumerable: true, get: function () { return deckActions_tool_1.DeckActionsTool; } });
6
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/mcp/primitives/essential/tools/deckActions/index.ts"],"names":[],"mappings":";;;AAIA,uDAAqD;AAA5C,mHAAA,eAAe,OAAA"}
@@ -1,5 +0,0 @@
1
- export { MediaActionsTool } from "./mediaActions.tool";
2
- export type { StoreMediaFileParams, StoreMediaFileResult, } from "./actions/storeMediaFile.action";
3
- export type { RetrieveMediaFileParams, RetrieveMediaFileResult, } from "./actions/retrieveMediaFile.action";
4
- export type { GetMediaFilesNamesParams, GetMediaFilesNamesResult, } from "./actions/getMediaFilesNames.action";
5
- export type { DeleteMediaFileParams, DeleteMediaFileResult, } from "./actions/deleteMediaFile.action";
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MediaActionsTool = void 0;
4
- var mediaActions_tool_1 = require("./mediaActions.tool");
5
- Object.defineProperty(exports, "MediaActionsTool", { enumerable: true, get: function () { return mediaActions_tool_1.MediaActionsTool; } });
6
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/mcp/primitives/essential/tools/mediaActions/index.ts"],"names":[],"mappings":";;;AAIA,yDAAuD;AAA9C,qHAAA,gBAAgB,OAAA"}
@@ -1,156 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var MediaActionsTool_1;
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.MediaActionsTool = void 0;
14
- const common_1 = require("@nestjs/common");
15
- const mcp_nest_1 = require("@rekog/mcp-nest");
16
- const zod_1 = require("zod");
17
- const anki_connect_client_1 = require("../../../../clients/anki-connect.client");
18
- const anki_utils_1 = require("../../../../utils/anki.utils");
19
- const storeMediaFile_action_1 = require("./actions/storeMediaFile.action");
20
- const retrieveMediaFile_action_1 = require("./actions/retrieveMediaFile.action");
21
- const getMediaFilesNames_action_1 = require("./actions/getMediaFilesNames.action");
22
- const deleteMediaFile_action_1 = require("./actions/deleteMediaFile.action");
23
- let MediaActionsTool = MediaActionsTool_1 = class MediaActionsTool {
24
- ankiClient;
25
- logger = new common_1.Logger(MediaActionsTool_1.name);
26
- constructor(ankiClient) {
27
- this.ankiClient = ankiClient;
28
- }
29
- async execute(params, context) {
30
- try {
31
- this.logger.log(`Executing media action: ${params.action}`);
32
- let result;
33
- switch (params.action) {
34
- case "storeMediaFile":
35
- if (!params.filename) {
36
- throw new Error("filename is required for storeMediaFile action");
37
- }
38
- await context.reportProgress({ progress: 25, total: 100 });
39
- result = await (0, storeMediaFile_action_1.storeMediaFile)({
40
- filename: params.filename,
41
- data: params.data,
42
- path: params.path,
43
- url: params.url,
44
- deleteExisting: params.deleteExisting,
45
- }, this.ankiClient);
46
- await context.reportProgress({ progress: 100, total: 100 });
47
- break;
48
- case "retrieveMediaFile":
49
- if (!params.filename) {
50
- throw new Error("filename is required for retrieveMediaFile action");
51
- }
52
- await context.reportProgress({ progress: 50, total: 100 });
53
- result = await (0, retrieveMediaFile_action_1.retrieveMediaFile)({ filename: params.filename }, this.ankiClient);
54
- await context.reportProgress({ progress: 100, total: 100 });
55
- break;
56
- case "getMediaFilesNames":
57
- await context.reportProgress({ progress: 50, total: 100 });
58
- result = await (0, getMediaFilesNames_action_1.getMediaFilesNames)({ pattern: params.pattern }, this.ankiClient);
59
- await context.reportProgress({ progress: 100, total: 100 });
60
- break;
61
- case "deleteMediaFile":
62
- if (!params.filename) {
63
- throw new Error("filename is required for deleteMediaFile action");
64
- }
65
- await context.reportProgress({ progress: 50, total: 100 });
66
- result = await (0, deleteMediaFile_action_1.deleteMediaFile)({ filename: params.filename }, this.ankiClient);
67
- await context.reportProgress({ progress: 100, total: 100 });
68
- break;
69
- default: {
70
- const _exhaustive = params.action;
71
- throw new Error(`Unknown action: ${_exhaustive}`);
72
- }
73
- }
74
- this.logger.log(`Successfully executed ${params.action}`);
75
- return result;
76
- }
77
- catch (error) {
78
- this.logger.error(`Failed to execute ${params.action}`, error);
79
- return (0, anki_utils_1.createErrorResponse)(error, {
80
- action: params.action,
81
- hint: "Make sure Anki is running and the media file/path is valid",
82
- });
83
- }
84
- }
85
- };
86
- exports.MediaActionsTool = MediaActionsTool;
87
- __decorate([
88
- (0, mcp_nest_1.Tool)({
89
- name: "mediaActions",
90
- description: `Manage Anki media files (audio/images). Supports four actions:
91
- - storeMediaFile: Upload media to Anki (supports base64 data, file paths, or URLs)
92
- - retrieveMediaFile: Download media from Anki as base64
93
- - getMediaFilesNames: List media files (optionally filter by pattern)
94
- - deleteMediaFile: Remove media file from Anki
95
-
96
- Perfect for workflows like ElevenLabs TTS → Anki audio flashcards.`,
97
- parameters: zod_1.z.object({
98
- action: zod_1.z
99
- .enum([
100
- "storeMediaFile",
101
- "retrieveMediaFile",
102
- "getMediaFilesNames",
103
- "deleteMediaFile",
104
- ])
105
- .describe("The media action to perform"),
106
- filename: zod_1.z
107
- .string()
108
- .optional()
109
- .describe("Filename (required for storeMediaFile, retrieveMediaFile, deleteMediaFile)"),
110
- data: zod_1.z
111
- .string()
112
- .optional()
113
- .describe("[storeMediaFile only] Base64-encoded file content"),
114
- path: zod_1.z
115
- .string()
116
- .optional()
117
- .describe("[storeMediaFile only] Absolute path to a local media file (images, audio, video only)"),
118
- url: zod_1.z
119
- .string()
120
- .optional()
121
- .describe("[storeMediaFile only] URL to download file from"),
122
- deleteExisting: zod_1.z
123
- .boolean()
124
- .optional()
125
- .default(true)
126
- .describe("[storeMediaFile only] Overwrite existing file (default: true)"),
127
- pattern: zod_1.z
128
- .string()
129
- .optional()
130
- .describe('[getMediaFilesNames only] Filter pattern (e.g., "*.mp3")'),
131
- }),
132
- outputSchema: zod_1.z.object({
133
- success: zod_1.z.boolean(),
134
- filename: zod_1.z.string().optional(),
135
- message: zod_1.z.string(),
136
- prefixedWithUnderscore: zod_1.z.boolean().optional(),
137
- data: zod_1.z.string().nullable().optional(),
138
- found: zod_1.z.boolean().optional(),
139
- files: zod_1.z.array(zod_1.z.string()).optional(),
140
- count: zod_1.z.number().optional(),
141
- pattern: zod_1.z.string().optional(),
142
- }),
143
- annotations: {
144
- readOnlyHint: false,
145
- destructiveHint: true,
146
- },
147
- }),
148
- __metadata("design:type", Function),
149
- __metadata("design:paramtypes", [Object, Object]),
150
- __metadata("design:returntype", Promise)
151
- ], MediaActionsTool.prototype, "execute", null);
152
- exports.MediaActionsTool = MediaActionsTool = MediaActionsTool_1 = __decorate([
153
- (0, common_1.Injectable)(),
154
- __metadata("design:paramtypes", [anki_connect_client_1.AnkiConnectClient])
155
- ], MediaActionsTool);
156
- //# sourceMappingURL=mediaActions.tool.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mediaActions.tool.js","sourceRoot":"","sources":["../../../../../../src/mcp/primitives/essential/tools/mediaActions/mediaActions.tool.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- export { TagActionsTool } from "./tagActions.tool";
2
- export type { AddTagsParams, AddTagsResult } from "./actions/addTags.action";
3
- export type { RemoveTagsParams, RemoveTagsResult, } from "./actions/removeTags.action";
4
- export type { ReplaceTagsParams, ReplaceTagsResult, } from "./actions/replaceTags.action";
5
- export type { ClearUnusedTagsParams, ClearUnusedTagsResult, } from "./actions/clearUnusedTags.action";
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TagActionsTool = void 0;
4
- var tagActions_tool_1 = require("./tagActions.tool");
5
- Object.defineProperty(exports, "TagActionsTool", { enumerable: true, get: function () { return tagActions_tool_1.TagActionsTool; } });
6
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/mcp/primitives/essential/tools/tagActions/index.ts"],"names":[],"mappings":";;;AAIA,qDAAmD;AAA1C,iHAAA,cAAc,OAAA"}