@ankimcp/anki-mcp-server 0.8.5 → 0.9.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/dist/cli.js CHANGED
@@ -15,7 +15,7 @@ function getPackageJson() {
15
15
  return JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(__dirname, "../package.json"), "utf-8"));
16
16
  }
17
17
  catch {
18
- return { version: "0.0.0", name: "anki-mcp-http" };
18
+ return { version: "0.0.0", name: "ankimcp" };
19
19
  }
20
20
  }
21
21
  function getVersion() {
@@ -41,25 +41,25 @@ Transport Modes:
41
41
  STDIO Mode: For desktop MCP clients (Cursor, Cline, Zed)
42
42
 
43
43
  Examples - HTTP Mode:
44
- $ anki-mcp-http # Use defaults
45
- $ anki-mcp-http --port 8080 # Custom port
46
- $ anki-mcp-http --host 0.0.0.0 --port 3000 # Listen on all interfaces
47
- $ anki-mcp-http --anki-connect http://localhost:8765
44
+ $ ankimcp # Use defaults
45
+ $ ankimcp --port 8080 # Custom port
46
+ $ ankimcp --host 0.0.0.0 --port 3000 # Listen on all interfaces
47
+ $ ankimcp --anki-connect http://localhost:8765
48
48
 
49
49
  Examples - HTTP Mode with Ngrok:
50
- $ anki-mcp-http --ngrok # Start with ngrok tunnel
51
- $ anki-mcp-http --port 8080 --ngrok # Custom port + ngrok
52
- $ anki-mcp-http --host 0.0.0.0 --ngrok # Public host + ngrok
50
+ $ ankimcp --ngrok # Start with ngrok tunnel
51
+ $ ankimcp --port 8080 --ngrok # Custom port + ngrok
52
+ $ ankimcp --host 0.0.0.0 --ngrok # Public host + ngrok
53
53
 
54
54
  Examples - STDIO Mode:
55
- $ anki-mcp-http --stdio # For use with npx in MCP clients
55
+ $ ankimcp --stdio # For use with npx in MCP clients
56
56
 
57
57
  # MCP client configuration (Cursor, Cline, Zed, etc.):
58
58
  {
59
59
  "mcpServers": {
60
60
  "anki-mcp": {
61
61
  "command": "npx",
62
- "args": ["-y", "anki-mcp-http", "--stdio"]
62
+ "args": ["-y", "ankimcp", "--stdio"]
63
63
  }
64
64
  }
65
65
  }
@@ -68,7 +68,7 @@ Ngrok Setup (one-time):
68
68
  1. Install: npm install -g ngrok
69
69
  2. Get auth token from: https://dashboard.ngrok.com/get-started/your-authtoken
70
70
  3. Setup: ngrok config add-authtoken <your-token>
71
- 4. Run: anki-mcp-http --ngrok
71
+ 4. Run: ankimcp --ngrok
72
72
  `);
73
73
  program.parse();
74
74
  const options = program.opts();
@@ -102,13 +102,13 @@ ${!ngrokUrl
102
102
  Usage with ngrok:
103
103
  1. Install: npm install -g ngrok
104
104
  2. Setup: ngrok config add-authtoken <your-token>
105
- 3. Run: anki-mcp-http --ngrok
105
+ 3. Run: ankimcp --ngrok
106
106
  `
107
107
  : `
108
108
  Share this URL with your AI assistant:
109
109
  ${ngrokUrl}
110
110
  `}
111
- Run 'anki-mcp-http --help' for more options.
111
+ Run 'ankimcp --help' for more options.
112
112
  `);
113
113
  }
114
114
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;AA0BA,0CAEC;AAED,oCAuEC;AAED,oDAsCC;AA7ID,yCAAoC;AACpC,2BAAkC;AAClC,+BAA4B;AAC5B,sEAA6C;AAS7C,SAAS,cAAc;IACrB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CACf,IAAA,iBAAY,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAC1D,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;IACrD,CAAC;AACH,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,cAAc,EAAE,CAAC,OAAO,CAAC;AAClC,CAAC;AAED,SAAgB,eAAe;IAC7B,IAAA,yBAAc,EAAC,EAAE,GAAG,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AACrD,CAAC;AAED,SAAgB,YAAY;IAC1B,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,SAAS,CAAC;SACf,WAAW,CAAC,yDAAyD,CAAC;SACtE,OAAO,CAAC,UAAU,EAAE,CAAC;SACrB,MAAM,CACL,SAAS,EACT,6DAA6D,CAC9D;SACA,MAAM,CAAC,qBAAqB,EAAE,+BAA+B,EAAE,MAAM,CAAC;SACtE,MAAM,CAAC,sBAAsB,EAAE,6BAA6B,EAAE,WAAW,CAAC;SAC1E,MAAM,CACL,0BAA0B,EAC1B,iBAAiB,EACjB,uBAAuB,CACxB;SACA,MAAM,CACL,SAAS,EACT,yDAAyD,CAC1D;SACA,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCL,CACI,CAAC;IAEJ,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAc,CAAC;IAE3C,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC;QAC3C,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK;KAC9B,CAAC;AACJ,CAAC;AAED,SAAgB,oBAAoB,CAClC,OAAmB,EACnB,QAAiB;IAEjB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,wBAAwB,OAAO,EAAE,CAAC;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,MAAM,WAAW,GACf,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAExE,OAAO,CAAC,GAAG,CAAC;;GAEX,WAAW;;;+BAGiB,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI;wBACnC,OAAO,CAAC,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,2BAA2B,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE;;;0BAGzE,OAAO,CAAC,IAAI;0BACZ,OAAO,CAAC,IAAI;0BACZ,OAAO,CAAC,WAAW;0EAC6B,QAAQ,CAAC,CAAC,CAAC,6BAA6B,QAAQ,iDAAiD,CAAC,CAAC,CAAC,EAAE;EAE9K,CAAC,QAAQ;QACP,CAAC,CAAC;;;;;CAKL;QACG,CAAC,CAAC;;IAEF,QAAQ;CAEZ;;CAEC,CAAC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;AA0BA,0CAEC;AAED,oCAuEC;AAED,oDAsCC;AA7ID,yCAAoC;AACpC,2BAAkC;AAClC,+BAA4B;AAC5B,sEAA6C;AAS7C,SAAS,cAAc;IACrB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CACf,IAAA,iBAAY,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAC1D,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC/C,CAAC;AACH,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,cAAc,EAAE,CAAC,OAAO,CAAC;AAClC,CAAC;AAED,SAAgB,eAAe;IAC7B,IAAA,yBAAc,EAAC,EAAE,GAAG,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AACrD,CAAC;AAED,SAAgB,YAAY;IAC1B,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,SAAS,CAAC;SACf,WAAW,CAAC,yDAAyD,CAAC;SACtE,OAAO,CAAC,UAAU,EAAE,CAAC;SACrB,MAAM,CACL,SAAS,EACT,6DAA6D,CAC9D;SACA,MAAM,CAAC,qBAAqB,EAAE,+BAA+B,EAAE,MAAM,CAAC;SACtE,MAAM,CAAC,sBAAsB,EAAE,6BAA6B,EAAE,WAAW,CAAC;SAC1E,MAAM,CACL,0BAA0B,EAC1B,iBAAiB,EACjB,uBAAuB,CACxB;SACA,MAAM,CACL,SAAS,EACT,yDAAyD,CAC1D;SACA,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCL,CACI,CAAC;IAEJ,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAc,CAAC;IAE3C,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC;QAC3C,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK;KAC9B,CAAC;AACJ,CAAC;AAED,SAAgB,oBAAoB,CAClC,OAAmB,EACnB,QAAiB;IAEjB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,wBAAwB,OAAO,EAAE,CAAC;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,MAAM,WAAW,GACf,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAExE,OAAO,CAAC,GAAG,CAAC;;GAEX,WAAW;;;+BAGiB,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI;wBACnC,OAAO,CAAC,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,2BAA2B,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE;;;0BAGzE,OAAO,CAAC,IAAI;0BACZ,OAAO,CAAC,IAAI;0BACZ,OAAO,CAAC,WAAW;0EAC6B,QAAQ,CAAC,CAAC,CAAC,6BAA6B,QAAQ,iDAAiD,CAAC,CAAC,CAAC,EAAE;EAE9K,CAAC,QAAQ;QACP,CAAC,CAAC;;;;;CAKL;QACG,CAAC,CAAC;;IAEF,QAAQ;CAEZ;;CAEC,CAAC,CAAC;AACH,CAAC"}
@@ -7,6 +7,7 @@ export { SyncTool } from "./tools/sync.tool";
7
7
  export { ListDecksTool } from "./tools/list-decks.tool";
8
8
  export { CreateDeckTool } from "./tools/create-deck.tool";
9
9
  export { GetDueCardsTool } from "./tools/get-due-cards.tool";
10
+ export { GetCardsTool } from "./tools/get-cards.tool";
10
11
  export { PresentCardTool } from "./tools/present-card.tool";
11
12
  export { RateCardTool } from "./tools/rate-card.tool";
12
13
  export { ModelNamesTool } from "./tools/model-names.tool";
@@ -21,7 +21,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
21
21
  };
22
22
  var McpPrimitivesAnkiEssentialModule_1;
23
23
  Object.defineProperty(exports, "__esModule", { value: true });
24
- exports.McpPrimitivesAnkiEssentialModule = exports.SystemInfoResource = exports.TwentyRulesPrompt = exports.ReviewSessionPrompt = exports.MediaActionsTool = exports.DeleteNotesTool = exports.UpdateNoteFieldsTool = exports.NotesInfoTool = exports.FindNotesTool = exports.AddNoteTool = exports.UpdateModelStylingTool = exports.CreateModelTool = exports.ModelStylingTool = exports.ModelFieldNamesTool = exports.ModelNamesTool = exports.RateCardTool = exports.PresentCardTool = exports.GetDueCardsTool = exports.CreateDeckTool = exports.ListDecksTool = exports.SyncTool = exports.AnkiConnectError = exports.AnkiConnectClient = exports.ANKI_CONFIG = void 0;
24
+ exports.McpPrimitivesAnkiEssentialModule = exports.SystemInfoResource = exports.TwentyRulesPrompt = exports.ReviewSessionPrompt = exports.MediaActionsTool = exports.DeleteNotesTool = exports.UpdateNoteFieldsTool = exports.NotesInfoTool = exports.FindNotesTool = exports.AddNoteTool = exports.UpdateModelStylingTool = exports.CreateModelTool = exports.ModelStylingTool = exports.ModelFieldNamesTool = exports.ModelNamesTool = exports.RateCardTool = exports.PresentCardTool = exports.GetCardsTool = exports.GetDueCardsTool = exports.CreateDeckTool = exports.ListDecksTool = exports.SyncTool = exports.AnkiConnectError = exports.AnkiConnectClient = exports.ANKI_CONFIG = void 0;
25
25
  var anki_config_interface_1 = require("../../config/anki-config.interface");
26
26
  Object.defineProperty(exports, "ANKI_CONFIG", { enumerable: true, get: function () { return anki_config_interface_1.ANKI_CONFIG; } });
27
27
  __exportStar(require("../../types/anki.types"), exports);
@@ -37,6 +37,8 @@ var create_deck_tool_1 = require("./tools/create-deck.tool");
37
37
  Object.defineProperty(exports, "CreateDeckTool", { enumerable: true, get: function () { return create_deck_tool_1.CreateDeckTool; } });
38
38
  var get_due_cards_tool_1 = require("./tools/get-due-cards.tool");
39
39
  Object.defineProperty(exports, "GetDueCardsTool", { enumerable: true, get: function () { return get_due_cards_tool_1.GetDueCardsTool; } });
40
+ var get_cards_tool_1 = require("./tools/get-cards.tool");
41
+ Object.defineProperty(exports, "GetCardsTool", { enumerable: true, get: function () { return get_cards_tool_1.GetCardsTool; } });
40
42
  var present_card_tool_1 = require("./tools/present-card.tool");
41
43
  Object.defineProperty(exports, "PresentCardTool", { enumerable: true, get: function () { return present_card_tool_1.PresentCardTool; } });
42
44
  var rate_card_tool_1 = require("./tools/rate-card.tool");
@@ -75,6 +77,7 @@ const sync_tool_2 = require("./tools/sync.tool");
75
77
  const list_decks_tool_2 = require("./tools/list-decks.tool");
76
78
  const create_deck_tool_2 = require("./tools/create-deck.tool");
77
79
  const get_due_cards_tool_2 = require("./tools/get-due-cards.tool");
80
+ const get_cards_tool_2 = require("./tools/get-cards.tool");
78
81
  const present_card_tool_2 = require("./tools/present-card.tool");
79
82
  const rate_card_tool_2 = require("./tools/rate-card.tool");
80
83
  const model_names_tool_2 = require("./tools/model-names.tool");
@@ -97,6 +100,7 @@ const MCP_PRIMITIVES = [
97
100
  list_decks_tool_2.ListDecksTool,
98
101
  create_deck_tool_2.CreateDeckTool,
99
102
  get_due_cards_tool_2.GetDueCardsTool,
103
+ get_cards_tool_2.GetCardsTool,
100
104
  present_card_tool_2.PresentCardTool,
101
105
  rate_card_tool_2.RateCardTool,
102
106
  model_names_tool_2.ModelNamesTool,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/mcp/primitives/essential/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AACA,4EAAiE;AAAxD,oHAAA,WAAW,OAAA;AAIpB,yDAAuC;AAGvC,yDAAuC;AAGvC,yEAG2C;AAFzC,wHAAA,iBAAiB,OAAA;AACjB,uHAAA,gBAAgB,OAAA;AAIlB,+CAA6C;AAApC,qGAAA,QAAQ,OAAA;AACjB,2DAAwD;AAA/C,gHAAA,aAAa,OAAA;AACtB,6DAA0D;AAAjD,kHAAA,cAAc,OAAA;AACvB,iEAA6D;AAApD,qHAAA,eAAe,OAAA;AACxB,+DAA4D;AAAnD,oHAAA,eAAe,OAAA;AACxB,yDAAsD;AAA7C,8GAAA,YAAY,OAAA;AACrB,6DAA0D;AAAjD,kHAAA,cAAc,OAAA;AACvB,yEAAqE;AAA5D,6HAAA,mBAAmB,OAAA;AAC5B,iEAA8D;AAArD,sHAAA,gBAAgB,OAAA;AACzB,+DAA4D;AAAnD,oHAAA,eAAe,OAAA;AACxB,+EAA2E;AAAlE,mIAAA,sBAAsB,OAAA;AAC/B,uDAAoD;AAA3C,4GAAA,WAAW,OAAA;AACpB,2DAAwD;AAA/C,gHAAA,aAAa,OAAA;AACtB,2DAAwD;AAA/C,gHAAA,aAAa,OAAA;AACtB,2EAAuE;AAA9D,+HAAA,oBAAoB,OAAA;AAC7B,+DAA4D;AAAnD,oHAAA,eAAe,OAAA;AACxB,qDAAwD;AAA/C,gHAAA,gBAAgB,OAAA;AAGzB,yEAAsE;AAA7D,4HAAA,mBAAmB,OAAA;AAC5B,qEAAkE;AAAzD,wHAAA,iBAAiB,OAAA;AAG1B,yEAAsE;AAA7D,0HAAA,kBAAkB,OAAA;AAG3B,2CAAiE;AACjE,2EAAsE;AACtE,iDAA6C;AAC7C,6DAAwD;AACxD,+DAA0D;AAC1D,mEAA6D;AAC7D,iEAA4D;AAC5D,2DAAsD;AACtD,+DAA0D;AAC1D,2EAAqE;AACrE,mEAA8D;AAC9D,iEAA4D;AAC5D,iFAA2E;AAC3E,yDAAoD;AACpD,6DAAwD;AACxD,6DAAwD;AACxD,6EAAuE;AACvE,iEAA4D;AAC5D,uDAAwD;AACxD,2EAAsE;AACtE,uEAAkE;AAClE,2EAAsE;AAEtE,MAAM,cAAc,GAAG;IAErB,uCAAiB;IAEjB,oBAAQ;IACR,+BAAa;IACb,iCAAc;IACd,oCAAe;IACf,mCAAe;IACf,6BAAY;IACZ,iCAAc;IACd,4CAAmB;IACnB,qCAAgB;IAChB,mCAAe;IACf,kDAAsB;IACtB,2BAAW;IACX,+BAAa;IACb,+BAAa;IACb,8CAAoB;IACpB,mCAAe;IACf,+BAAgB;IAEhB,2CAAmB;IACnB,uCAAiB;IAEjB,yCAAkB;CACnB,CAAC;AAOK,IAAM,gCAAgC,wCAAtC,MAAM,gCAAgC;IAC3C,MAAM,CAAC,OAAO,CACZ,OAAgD;QAEhD,OAAO;YACL,MAAM,EAAE,kCAAgC;YACxC,SAAS,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,cAAc,CAAC;YAC1D,OAAO,EAAE,cAAc;SACxB,CAAC;IACJ,CAAC;CACF,CAAA;AAVY,4EAAgC;2CAAhC,gCAAgC;IAD5C,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,gCAAgC,CAU5C"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/mcp/primitives/essential/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AACA,4EAAiE;AAAxD,oHAAA,WAAW,OAAA;AAIpB,yDAAuC;AAGvC,yDAAuC;AAGvC,yEAG2C;AAFzC,wHAAA,iBAAiB,OAAA;AACjB,uHAAA,gBAAgB,OAAA;AAIlB,+CAA6C;AAApC,qGAAA,QAAQ,OAAA;AACjB,2DAAwD;AAA/C,gHAAA,aAAa,OAAA;AACtB,6DAA0D;AAAjD,kHAAA,cAAc,OAAA;AACvB,iEAA6D;AAApD,qHAAA,eAAe,OAAA;AACxB,yDAAsD;AAA7C,8GAAA,YAAY,OAAA;AACrB,+DAA4D;AAAnD,oHAAA,eAAe,OAAA;AACxB,yDAAsD;AAA7C,8GAAA,YAAY,OAAA;AACrB,6DAA0D;AAAjD,kHAAA,cAAc,OAAA;AACvB,yEAAqE;AAA5D,6HAAA,mBAAmB,OAAA;AAC5B,iEAA8D;AAArD,sHAAA,gBAAgB,OAAA;AACzB,+DAA4D;AAAnD,oHAAA,eAAe,OAAA;AACxB,+EAA2E;AAAlE,mIAAA,sBAAsB,OAAA;AAC/B,uDAAoD;AAA3C,4GAAA,WAAW,OAAA;AACpB,2DAAwD;AAA/C,gHAAA,aAAa,OAAA;AACtB,2DAAwD;AAA/C,gHAAA,aAAa,OAAA;AACtB,2EAAuE;AAA9D,+HAAA,oBAAoB,OAAA;AAC7B,+DAA4D;AAAnD,oHAAA,eAAe,OAAA;AACxB,qDAAwD;AAA/C,gHAAA,gBAAgB,OAAA;AAGzB,yEAAsE;AAA7D,4HAAA,mBAAmB,OAAA;AAC5B,qEAAkE;AAAzD,wHAAA,iBAAiB,OAAA;AAG1B,yEAAsE;AAA7D,0HAAA,kBAAkB,OAAA;AAG3B,2CAAiE;AACjE,2EAAsE;AACtE,iDAA6C;AAC7C,6DAAwD;AACxD,+DAA0D;AAC1D,mEAA6D;AAC7D,2DAAsD;AACtD,iEAA4D;AAC5D,2DAAsD;AACtD,+DAA0D;AAC1D,2EAAqE;AACrE,mEAA8D;AAC9D,iEAA4D;AAC5D,iFAA2E;AAC3E,yDAAoD;AACpD,6DAAwD;AACxD,6DAAwD;AACxD,6EAAuE;AACvE,iEAA4D;AAC5D,uDAAwD;AACxD,2EAAsE;AACtE,uEAAkE;AAClE,2EAAsE;AAEtE,MAAM,cAAc,GAAG;IAErB,uCAAiB;IAEjB,oBAAQ;IACR,+BAAa;IACb,iCAAc;IACd,oCAAe;IACf,6BAAY;IACZ,mCAAe;IACf,6BAAY;IACZ,iCAAc;IACd,4CAAmB;IACnB,qCAAgB;IAChB,mCAAe;IACf,kDAAsB;IACtB,2BAAW;IACX,+BAAa;IACb,+BAAa;IACb,8CAAoB;IACpB,mCAAe;IACf,+BAAgB;IAEhB,2CAAmB;IACnB,uCAAiB;IAEjB,yCAAkB;CACnB,CAAC;AAOK,IAAM,gCAAgC,wCAAtC,MAAM,gCAAgC;IAC3C,MAAM,CAAC,OAAO,CACZ,OAAgD;QAEhD,OAAO;YACL,MAAM,EAAE,kCAAgC;YACxC,SAAS,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,cAAc,CAAC;YAC1D,OAAO,EAAE,cAAc;SACxB,CAAC;IACJ,CAAC;CACF,CAAA;AAVY,4EAAgC;2CAAhC,gCAAgC;IAD5C,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,gCAAgC,CAU5C"}
@@ -0,0 +1,81 @@
1
+ import type { Context } from "@rekog/mcp-nest";
2
+ import { z } from "zod";
3
+ import { AnkiConnectClient } from "@/mcp/clients/anki-connect.client";
4
+ declare const CardStateEnum: z.ZodEnum<["due", "new", "learning", "suspended", "buried"]>;
5
+ type CardState = z.infer<typeof CardStateEnum>;
6
+ export declare class GetCardsTool {
7
+ private readonly ankiClient;
8
+ private readonly logger;
9
+ constructor(ankiClient: AnkiConnectClient);
10
+ getCards({ deck_name, card_state, limit, }: {
11
+ deck_name?: string;
12
+ card_state?: CardState;
13
+ limit?: number;
14
+ }, context: Context): Promise<{
15
+ [x: string]: unknown;
16
+ content: ({
17
+ type: "text";
18
+ text: string;
19
+ _meta?: {
20
+ [x: string]: unknown;
21
+ } | undefined;
22
+ } | {
23
+ type: "image";
24
+ data: string;
25
+ mimeType: string;
26
+ _meta?: {
27
+ [x: string]: unknown;
28
+ } | undefined;
29
+ } | {
30
+ type: "audio";
31
+ data: string;
32
+ mimeType: string;
33
+ _meta?: {
34
+ [x: string]: unknown;
35
+ } | undefined;
36
+ } | {
37
+ uri: string;
38
+ name: string;
39
+ type: "resource_link";
40
+ description?: string | undefined;
41
+ mimeType?: string | undefined;
42
+ _meta?: {
43
+ [x: string]: unknown;
44
+ } | undefined;
45
+ icons?: {
46
+ src: string;
47
+ mimeType?: string | undefined;
48
+ sizes?: string[] | undefined;
49
+ }[] | undefined;
50
+ title?: string | undefined;
51
+ } | {
52
+ type: "resource";
53
+ resource: {
54
+ uri: string;
55
+ text: string;
56
+ mimeType?: string | undefined;
57
+ _meta?: {
58
+ [x: string]: unknown;
59
+ } | undefined;
60
+ } | {
61
+ uri: string;
62
+ blob: string;
63
+ mimeType?: string | undefined;
64
+ _meta?: {
65
+ [x: string]: unknown;
66
+ } | undefined;
67
+ };
68
+ _meta?: {
69
+ [x: string]: unknown;
70
+ } | undefined;
71
+ })[];
72
+ _meta?: {
73
+ [x: string]: unknown;
74
+ } | undefined;
75
+ structuredContent?: {
76
+ [x: string]: unknown;
77
+ } | undefined;
78
+ isError?: boolean | undefined;
79
+ }>;
80
+ }
81
+ export {};
@@ -0,0 +1,118 @@
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 GetCardsTool_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.GetCardsTool = 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 CardStateEnum = zod_1.z.enum(["due", "new", "learning", "suspended", "buried"]);
20
+ const CARD_STATE_QUERY_MAP = {
21
+ due: "is:due",
22
+ new: "is:new",
23
+ learning: "is:learn",
24
+ suspended: "is:suspended",
25
+ buried: "is:buried",
26
+ };
27
+ let GetCardsTool = GetCardsTool_1 = class GetCardsTool {
28
+ ankiClient;
29
+ logger = new common_1.Logger(GetCardsTool_1.name);
30
+ constructor(ankiClient) {
31
+ this.ankiClient = ankiClient;
32
+ }
33
+ async getCards({ deck_name, card_state = "due", limit, }, context) {
34
+ try {
35
+ const cardLimit = Math.min(limit || 10, 50);
36
+ this.logger.log(`Getting ${card_state} cards from deck: ${deck_name || "all"}, limit: ${cardLimit}`);
37
+ await context.reportProgress({ progress: 10, total: 100 });
38
+ const stateQuery = CARD_STATE_QUERY_MAP[card_state];
39
+ let query = stateQuery;
40
+ if (deck_name) {
41
+ const escapedDeckName = deck_name.replace(/"/g, '\\"');
42
+ query = `"deck:${escapedDeckName}" ${query}`;
43
+ }
44
+ const cardIds = await this.ankiClient.invoke("findCards", {
45
+ query,
46
+ });
47
+ if (cardIds.length === 0) {
48
+ this.logger.log(`No ${card_state} cards found`);
49
+ await context.reportProgress({ progress: 100, total: 100 });
50
+ return (0, anki_utils_1.createSuccessResponse)({
51
+ success: true,
52
+ message: `No ${card_state} cards found`,
53
+ cards: [],
54
+ total: 0,
55
+ });
56
+ }
57
+ await context.reportProgress({ progress: 50, total: 100 });
58
+ const selectedCardIds = cardIds.slice(0, cardLimit);
59
+ const cardsInfo = await this.ankiClient.invoke("cardsInfo", {
60
+ cards: selectedCardIds,
61
+ });
62
+ const cards = cardsInfo.map((card) => {
63
+ const { front, back } = (0, anki_utils_1.extractCardContent)(card.fields);
64
+ return {
65
+ cardId: card.cardId,
66
+ front: front || card.question || "",
67
+ back: back || card.answer || "",
68
+ deckName: card.deckName,
69
+ modelName: card.modelName,
70
+ due: card.due || 0,
71
+ interval: card.interval || 0,
72
+ factor: card.factor || 2500,
73
+ };
74
+ });
75
+ await context.reportProgress({ progress: 100, total: 100 });
76
+ this.logger.log(`Retrieved ${cards.length} ${card_state} cards out of ${cardIds.length} total`);
77
+ return (0, anki_utils_1.createSuccessResponse)({
78
+ success: true,
79
+ cards,
80
+ total: cardIds.length,
81
+ returned: cards.length,
82
+ message: `Found ${cardIds.length} ${card_state} cards, returning ${cards.length}`,
83
+ });
84
+ }
85
+ catch (error) {
86
+ this.logger.error(`Failed to get ${card_state || "due"} cards`, error);
87
+ return (0, anki_utils_1.createErrorResponse)(error);
88
+ }
89
+ }
90
+ };
91
+ exports.GetCardsTool = GetCardsTool;
92
+ __decorate([
93
+ (0, mcp_nest_1.Tool)({
94
+ name: "get_cards",
95
+ description: "Retrieve cards from Anki with flexible filtering by deck and card state. IMPORTANT: Use sync tool FIRST before getting cards to ensure latest data. After getting cards, use present_card to show them one by one to the user",
96
+ parameters: zod_1.z.object({
97
+ deck_name: zod_1.z
98
+ .string()
99
+ .optional()
100
+ .describe("Specific deck name to get cards from. If not specified, gets cards from all decks"),
101
+ card_state: CardStateEnum.default("due").describe("Filter by card state: 'due' (cards due for review), 'new' (never seen), 'learning' (in learning queue), 'suspended' (manually suspended), 'buried' (temporarily hidden)"),
102
+ limit: zod_1.z
103
+ .number()
104
+ .min(1)
105
+ .max(50)
106
+ .default(10)
107
+ .describe("Maximum number of cards to return"),
108
+ }),
109
+ }),
110
+ __metadata("design:type", Function),
111
+ __metadata("design:paramtypes", [Object, Object]),
112
+ __metadata("design:returntype", Promise)
113
+ ], GetCardsTool.prototype, "getCards", null);
114
+ exports.GetCardsTool = GetCardsTool = GetCardsTool_1 = __decorate([
115
+ (0, common_1.Injectable)(),
116
+ __metadata("design:paramtypes", [anki_connect_client_1.AnkiConnectClient])
117
+ ], GetCardsTool);
118
+ //# sourceMappingURL=get-cards.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-cards.tool.js","sourceRoot":"","sources":["../../../../../src/mcp/primitives/essential/tools/get-cards.tool.ts"],"names":[],"mappings":"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"}