@ankimcp/anki-mcp-server 0.8.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 +7 -0
- package/README.md +756 -0
- package/bin/ankimcp.js +12 -0
- package/dist/anki-config.service.d.ts +10 -0
- package/dist/anki-config.service.js +42 -0
- package/dist/anki-config.service.js.map +1 -0
- package/dist/app.module.d.ts +5 -0
- package/dist/app.module.js +84 -0
- package/dist/app.module.js.map +1 -0
- package/dist/bootstrap.d.ts +3 -0
- package/dist/bootstrap.js +39 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.js +114 -0
- package/dist/cli.js.map +1 -0
- package/dist/http/guards/origin-validation.guard.d.ts +7 -0
- package/dist/http/guards/origin-validation.guard.js +52 -0
- package/dist/http/guards/origin-validation.guard.js.map +1 -0
- package/dist/main-http.d.ts +1 -0
- package/dist/main-http.js +42 -0
- package/dist/main-http.js.map +1 -0
- package/dist/main-stdio.d.ts +1 -0
- package/dist/main-stdio.js +20 -0
- package/dist/main-stdio.js.map +1 -0
- package/dist/mcp/clients/__mocks__/anki-connect.client.d.ts +6 -0
- package/dist/mcp/clients/__mocks__/anki-connect.client.js +18 -0
- package/dist/mcp/clients/__mocks__/anki-connect.client.js.map +1 -0
- package/dist/mcp/clients/anki-connect.client.d.ts +15 -0
- package/dist/mcp/clients/anki-connect.client.js +145 -0
- package/dist/mcp/clients/anki-connect.client.js.map +1 -0
- package/dist/mcp/config/anki-config.interface.d.ts +7 -0
- package/dist/mcp/config/anki-config.interface.js +5 -0
- package/dist/mcp/config/anki-config.interface.js.map +1 -0
- package/dist/mcp/primitives/essential/index.d.ts +32 -0
- package/dist/mcp/primitives/essential/index.js +130 -0
- package/dist/mcp/primitives/essential/index.js.map +1 -0
- package/dist/mcp/primitives/essential/prompts/review-session.prompt.d.ts +12 -0
- package/dist/mcp/primitives/essential/prompts/review-session.prompt.js +113 -0
- package/dist/mcp/primitives/essential/prompts/review-session.prompt.js.map +1 -0
- package/dist/mcp/primitives/essential/prompts/twenty-rules.prompt/content.md +195 -0
- package/dist/mcp/primitives/essential/prompts/twenty-rules.prompt/index.d.ts +12 -0
- package/dist/mcp/primitives/essential/prompts/twenty-rules.prompt/index.js +89 -0
- package/dist/mcp/primitives/essential/prompts/twenty-rules.prompt/index.js.map +1 -0
- package/dist/mcp/primitives/essential/resources/system-info.resource.d.ts +21 -0
- package/dist/mcp/primitives/essential/resources/system-info.resource.js +115 -0
- package/dist/mcp/primitives/essential/resources/system-info.resource.js.map +1 -0
- package/dist/mcp/primitives/essential/tools/add-note.tool.d.ts +93 -0
- package/dist/mcp/primitives/essential/tools/add-note.tool.js +185 -0
- package/dist/mcp/primitives/essential/tools/add-note.tool.js.map +1 -0
- package/dist/mcp/primitives/essential/tools/create-deck.tool.d.ts +83 -0
- package/dist/mcp/primitives/essential/tools/create-deck.tool.js +121 -0
- package/dist/mcp/primitives/essential/tools/create-deck.tool.js.map +1 -0
- package/dist/mcp/primitives/essential/tools/create-model.tool.d.ts +88 -0
- package/dist/mcp/primitives/essential/tools/create-model.tool.js +144 -0
- package/dist/mcp/primitives/essential/tools/create-model.tool.js.map +1 -0
- package/dist/mcp/primitives/essential/tools/delete-notes.tool.d.ts +84 -0
- package/dist/mcp/primitives/essential/tools/delete-notes.tool.js +120 -0
- package/dist/mcp/primitives/essential/tools/delete-notes.tool.js.map +1 -0
- package/dist/mcp/primitives/essential/tools/find-notes.tool.d.ts +83 -0
- package/dist/mcp/primitives/essential/tools/find-notes.tool.js +106 -0
- package/dist/mcp/primitives/essential/tools/find-notes.tool.js.map +1 -0
- package/dist/mcp/primitives/essential/tools/get-due-cards.tool.d.ts +84 -0
- package/dist/mcp/primitives/essential/tools/get-due-cards.tool.js +108 -0
- package/dist/mcp/primitives/essential/tools/get-due-cards.tool.js.map +1 -0
- package/dist/mcp/primitives/essential/tools/list-decks.tool.d.ts +83 -0
- package/dist/mcp/primitives/essential/tools/list-decks.tool.js +117 -0
- package/dist/mcp/primitives/essential/tools/list-decks.tool.js.map +1 -0
- package/dist/mcp/primitives/essential/tools/mediaActions/actions/deleteMediaFile.action.d.ts +10 -0
- package/dist/mcp/primitives/essential/tools/mediaActions/actions/deleteMediaFile.action.js +18 -0
- package/dist/mcp/primitives/essential/tools/mediaActions/actions/deleteMediaFile.action.js.map +1 -0
- package/dist/mcp/primitives/essential/tools/mediaActions/actions/getMediaFilesNames.action.d.ts +12 -0
- package/dist/mcp/primitives/essential/tools/mediaActions/actions/getMediaFilesNames.action.js +22 -0
- package/dist/mcp/primitives/essential/tools/mediaActions/actions/getMediaFilesNames.action.js.map +1 -0
- package/dist/mcp/primitives/essential/tools/mediaActions/actions/retrieveMediaFile.action.d.ts +12 -0
- package/dist/mcp/primitives/essential/tools/mediaActions/actions/retrieveMediaFile.action.js +29 -0
- package/dist/mcp/primitives/essential/tools/mediaActions/actions/retrieveMediaFile.action.js.map +1 -0
- package/dist/mcp/primitives/essential/tools/mediaActions/actions/storeMediaFile.action.d.ts +15 -0
- package/dist/mcp/primitives/essential/tools/mediaActions/actions/storeMediaFile.action.js +41 -0
- package/dist/mcp/primitives/essential/tools/mediaActions/actions/storeMediaFile.action.js.map +1 -0
- package/dist/mcp/primitives/essential/tools/mediaActions/index.d.ts +5 -0
- package/dist/mcp/primitives/essential/tools/mediaActions/index.js +6 -0
- package/dist/mcp/primitives/essential/tools/mediaActions/index.js.map +1 -0
- package/dist/mcp/primitives/essential/tools/mediaActions/mediaActions.tool.d.ts +89 -0
- package/dist/mcp/primitives/essential/tools/mediaActions/mediaActions.tool.js +141 -0
- package/dist/mcp/primitives/essential/tools/mediaActions/mediaActions.tool.js.map +1 -0
- package/dist/mcp/primitives/essential/tools/model-field-names.tool.d.ts +83 -0
- package/dist/mcp/primitives/essential/tools/model-field-names.tool.js +119 -0
- package/dist/mcp/primitives/essential/tools/model-field-names.tool.js.map +1 -0
- package/dist/mcp/primitives/essential/tools/model-names.tool.d.ts +81 -0
- package/dist/mcp/primitives/essential/tools/model-names.tool.js +80 -0
- package/dist/mcp/primitives/essential/tools/model-names.tool.js.map +1 -0
- package/dist/mcp/primitives/essential/tools/model-styling.tool.d.ts +83 -0
- package/dist/mcp/primitives/essential/tools/model-styling.tool.js +93 -0
- package/dist/mcp/primitives/essential/tools/model-styling.tool.js.map +1 -0
- package/dist/mcp/primitives/essential/tools/notes-info.tool.d.ts +83 -0
- package/dist/mcp/primitives/essential/tools/notes-info.tool.js +111 -0
- package/dist/mcp/primitives/essential/tools/notes-info.tool.js.map +1 -0
- package/dist/mcp/primitives/essential/tools/present-card.tool.d.ts +84 -0
- package/dist/mcp/primitives/essential/tools/present-card.tool.js +100 -0
- package/dist/mcp/primitives/essential/tools/present-card.tool.js.map +1 -0
- package/dist/mcp/primitives/essential/tools/rate-card.tool.d.ts +84 -0
- package/dist/mcp/primitives/essential/tools/rate-card.tool.js +101 -0
- package/dist/mcp/primitives/essential/tools/rate-card.tool.js.map +1 -0
- package/dist/mcp/primitives/essential/tools/sync.tool.d.ts +81 -0
- package/dist/mcp/primitives/essential/tools/sync.tool.js +61 -0
- package/dist/mcp/primitives/essential/tools/sync.tool.js.map +1 -0
- package/dist/mcp/primitives/essential/tools/update-model-styling.tool.d.ts +84 -0
- package/dist/mcp/primitives/essential/tools/update-model-styling.tool.js +119 -0
- package/dist/mcp/primitives/essential/tools/update-model-styling.tool.js.map +1 -0
- package/dist/mcp/primitives/essential/tools/update-note-fields.tool.d.ts +96 -0
- package/dist/mcp/primitives/essential/tools/update-note-fields.tool.js +154 -0
- package/dist/mcp/primitives/essential/tools/update-note-fields.tool.js.map +1 -0
- package/dist/mcp/primitives/gui/index.d.ts +23 -0
- package/dist/mcp/primitives/gui/index.js +94 -0
- package/dist/mcp/primitives/gui/index.js.map +1 -0
- package/dist/mcp/primitives/gui/tools/gui-add-cards.tool.d.ts +88 -0
- package/dist/mcp/primitives/gui/tools/gui-add-cards.tool.js +111 -0
- package/dist/mcp/primitives/gui/tools/gui-add-cards.tool.js.map +1 -0
- package/dist/mcp/primitives/gui/tools/gui-browse.tool.d.ts +87 -0
- package/dist/mcp/primitives/gui/tools/gui-browse.tool.js +99 -0
- package/dist/mcp/primitives/gui/tools/gui-browse.tool.js.map +1 -0
- package/dist/mcp/primitives/gui/tools/gui-current-card.tool.d.ts +81 -0
- package/dist/mcp/primitives/gui/tools/gui-current-card.tool.js +76 -0
- package/dist/mcp/primitives/gui/tools/gui-current-card.tool.js.map +1 -0
- package/dist/mcp/primitives/gui/tools/gui-deck-browser.tool.d.ts +81 -0
- package/dist/mcp/primitives/gui/tools/gui-deck-browser.tool.js +64 -0
- package/dist/mcp/primitives/gui/tools/gui-deck-browser.tool.js.map +1 -0
- package/dist/mcp/primitives/gui/tools/gui-deck-overview.tool.d.ts +83 -0
- package/dist/mcp/primitives/gui/tools/gui-deck-overview.tool.js +88 -0
- package/dist/mcp/primitives/gui/tools/gui-deck-overview.tool.js.map +1 -0
- package/dist/mcp/primitives/gui/tools/gui-edit-note.tool.d.ts +83 -0
- package/dist/mcp/primitives/gui/tools/gui-edit-note.tool.js +80 -0
- package/dist/mcp/primitives/gui/tools/gui-edit-note.tool.js.map +1 -0
- package/dist/mcp/primitives/gui/tools/gui-select-card.tool.d.ts +83 -0
- package/dist/mcp/primitives/gui/tools/gui-select-card.tool.js +90 -0
- package/dist/mcp/primitives/gui/tools/gui-select-card.tool.js.map +1 -0
- package/dist/mcp/primitives/gui/tools/gui-selected-notes.tool.d.ts +81 -0
- package/dist/mcp/primitives/gui/tools/gui-selected-notes.tool.js +83 -0
- package/dist/mcp/primitives/gui/tools/gui-selected-notes.tool.js.map +1 -0
- package/dist/mcp/primitives/gui/tools/gui-show-answer.tool.d.ts +81 -0
- package/dist/mcp/primitives/gui/tools/gui-show-answer.tool.js +74 -0
- package/dist/mcp/primitives/gui/tools/gui-show-answer.tool.js.map +1 -0
- package/dist/mcp/primitives/gui/tools/gui-show-question.tool.d.ts +81 -0
- package/dist/mcp/primitives/gui/tools/gui-show-question.tool.js +74 -0
- package/dist/mcp/primitives/gui/tools/gui-show-question.tool.js.map +1 -0
- package/dist/mcp/primitives/gui/tools/gui-undo.tool.d.ts +81 -0
- package/dist/mcp/primitives/gui/tools/gui-undo.tool.js +74 -0
- package/dist/mcp/primitives/gui/tools/gui-undo.tool.js.map +1 -0
- package/dist/mcp/types/anki.types.d.ts +180 -0
- package/dist/mcp/types/anki.types.js +18 -0
- package/dist/mcp/types/anki.types.js.map +1 -0
- package/dist/mcp/utils/anki.utils.d.ts +19 -0
- package/dist/mcp/utils/anki.utils.js +157 -0
- package/dist/mcp/utils/anki.utils.js.map +1 -0
- package/dist/mcp/utils/markdown.utils.d.ts +4 -0
- package/dist/mcp/utils/markdown.utils.js +60 -0
- package/dist/mcp/utils/markdown.utils.js.map +1 -0
- package/dist/mcp/utils/mcpb-workarounds.d.ts +1 -0
- package/dist/mcp/utils/mcpb-workarounds.js +13 -0
- package/dist/mcp/utils/mcpb-workarounds.js.map +1 -0
- package/dist/services/ngrok.service.d.ts +15 -0
- package/dist/services/ngrok.service.js +120 -0
- package/dist/services/ngrok.service.js.map +1 -0
- package/dist/test-fixtures/mock-data.d.ts +126 -0
- package/dist/test-fixtures/mock-data.js +112 -0
- package/dist/test-fixtures/mock-data.js.map +1 -0
- package/dist/test-fixtures/test-helpers.d.ts +12 -0
- package/dist/test-fixtures/test-helpers.js +24 -0
- package/dist/test-fixtures/test-helpers.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/package.json +168 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
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;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
|
+
};
|
|
44
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
45
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
46
|
+
};
|
|
47
|
+
var AnkiConnectClient_1;
|
|
48
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
49
|
+
exports.AnkiConnectClient = exports.AnkiConnectError = void 0;
|
|
50
|
+
const common_1 = require("@nestjs/common");
|
|
51
|
+
const ky_1 = __importStar(require("ky"));
|
|
52
|
+
const anki_config_interface_1 = require("../config/anki-config.interface");
|
|
53
|
+
class AnkiConnectError extends Error {
|
|
54
|
+
action;
|
|
55
|
+
originalError;
|
|
56
|
+
constructor(message, action, originalError) {
|
|
57
|
+
super(message);
|
|
58
|
+
this.action = action;
|
|
59
|
+
this.originalError = originalError;
|
|
60
|
+
this.name = "AnkiConnectError";
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.AnkiConnectError = AnkiConnectError;
|
|
64
|
+
let AnkiConnectClient = AnkiConnectClient_1 = class AnkiConnectClient {
|
|
65
|
+
config;
|
|
66
|
+
client;
|
|
67
|
+
apiVersion;
|
|
68
|
+
apiKey;
|
|
69
|
+
logger = new common_1.Logger(AnkiConnectClient_1.name);
|
|
70
|
+
constructor(config) {
|
|
71
|
+
this.config = config;
|
|
72
|
+
this.apiVersion = config.ankiConnectApiVersion;
|
|
73
|
+
this.apiKey = config.ankiConnectApiKey;
|
|
74
|
+
this.client = ky_1.default.create({
|
|
75
|
+
prefixUrl: config.ankiConnectUrl,
|
|
76
|
+
timeout: config.ankiConnectTimeout,
|
|
77
|
+
headers: {
|
|
78
|
+
"Content-Type": "application/json",
|
|
79
|
+
},
|
|
80
|
+
retry: {
|
|
81
|
+
limit: 2,
|
|
82
|
+
methods: ["POST"],
|
|
83
|
+
statusCodes: [408, 413, 429, 500, 502, 503, 504],
|
|
84
|
+
backoffLimit: 3000,
|
|
85
|
+
},
|
|
86
|
+
hooks: {
|
|
87
|
+
beforeRequest: [
|
|
88
|
+
(request) => {
|
|
89
|
+
this.logger.debug(`AnkiConnect request: ${request.method} ${request.url}`);
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
afterResponse: [
|
|
93
|
+
(_request, _options, response) => {
|
|
94
|
+
this.logger.debug(`AnkiConnect response: ${response.status} ${response.statusText}`);
|
|
95
|
+
},
|
|
96
|
+
],
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
async invoke(action, params) {
|
|
101
|
+
const request = {
|
|
102
|
+
action,
|
|
103
|
+
version: this.apiVersion,
|
|
104
|
+
params,
|
|
105
|
+
};
|
|
106
|
+
if (this.apiKey) {
|
|
107
|
+
request.key = this.apiKey;
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
this.logger.log(`Invoking AnkiConnect action: ${action}`);
|
|
111
|
+
const response = await this.client
|
|
112
|
+
.post("", {
|
|
113
|
+
json: request,
|
|
114
|
+
})
|
|
115
|
+
.json();
|
|
116
|
+
if (response.error) {
|
|
117
|
+
throw new AnkiConnectError(`AnkiConnect error: ${response.error}`, action, response.error);
|
|
118
|
+
}
|
|
119
|
+
this.logger.log(`AnkiConnect action successful: ${action}`);
|
|
120
|
+
return response.result;
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
if (error instanceof ky_1.HTTPError) {
|
|
124
|
+
if (error.response.status === 403) {
|
|
125
|
+
throw new AnkiConnectError("Permission denied. Please check AnkiConnect configuration and API key.", action);
|
|
126
|
+
}
|
|
127
|
+
throw new AnkiConnectError(`HTTP error ${error.response.status}: ${error.message}`, action);
|
|
128
|
+
}
|
|
129
|
+
if (error instanceof Error && error.message.includes("fetch")) {
|
|
130
|
+
throw new AnkiConnectError("Cannot connect to Anki. Please ensure Anki is running and AnkiConnect plugin is installed.", action);
|
|
131
|
+
}
|
|
132
|
+
if (error instanceof AnkiConnectError) {
|
|
133
|
+
throw error;
|
|
134
|
+
}
|
|
135
|
+
throw new AnkiConnectError(`Unexpected error: ${error instanceof Error ? error.message : String(error)}`, action);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
exports.AnkiConnectClient = AnkiConnectClient;
|
|
140
|
+
exports.AnkiConnectClient = AnkiConnectClient = AnkiConnectClient_1 = __decorate([
|
|
141
|
+
(0, common_1.Injectable)(),
|
|
142
|
+
__param(0, (0, common_1.Inject)(anki_config_interface_1.ANKI_CONFIG)),
|
|
143
|
+
__metadata("design:paramtypes", [Object])
|
|
144
|
+
], AnkiConnectClient);
|
|
145
|
+
//# sourceMappingURL=anki-connect.client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anki-connect.client.js","sourceRoot":"","sources":["../../../src/mcp/clients/anki-connect.client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anki-config.interface.js","sourceRoot":"","sources":["../../../src/mcp/config/anki-config.interface.ts"],"names":[],"mappings":";;;AAgCa,QAAA,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export { ANKI_CONFIG } from "../../config/anki-config.interface";
|
|
2
|
+
export type { IAnkiConfig } from "../../config/anki-config.interface";
|
|
3
|
+
export * from "../../types/anki.types";
|
|
4
|
+
export * from "../../utils/anki.utils";
|
|
5
|
+
export { AnkiConnectClient, AnkiConnectError, } from "../../clients/anki-connect.client";
|
|
6
|
+
export { SyncTool } from "./tools/sync.tool";
|
|
7
|
+
export { ListDecksTool } from "./tools/list-decks.tool";
|
|
8
|
+
export { CreateDeckTool } from "./tools/create-deck.tool";
|
|
9
|
+
export { GetDueCardsTool } from "./tools/get-due-cards.tool";
|
|
10
|
+
export { PresentCardTool } from "./tools/present-card.tool";
|
|
11
|
+
export { RateCardTool } from "./tools/rate-card.tool";
|
|
12
|
+
export { ModelNamesTool } from "./tools/model-names.tool";
|
|
13
|
+
export { ModelFieldNamesTool } from "./tools/model-field-names.tool";
|
|
14
|
+
export { ModelStylingTool } from "./tools/model-styling.tool";
|
|
15
|
+
export { CreateModelTool } from "./tools/create-model.tool";
|
|
16
|
+
export { UpdateModelStylingTool } from "./tools/update-model-styling.tool";
|
|
17
|
+
export { AddNoteTool } from "./tools/add-note.tool";
|
|
18
|
+
export { FindNotesTool } from "./tools/find-notes.tool";
|
|
19
|
+
export { NotesInfoTool } from "./tools/notes-info.tool";
|
|
20
|
+
export { UpdateNoteFieldsTool } from "./tools/update-note-fields.tool";
|
|
21
|
+
export { DeleteNotesTool } from "./tools/delete-notes.tool";
|
|
22
|
+
export { MediaActionsTool } from "./tools/mediaActions";
|
|
23
|
+
export { ReviewSessionPrompt } from "./prompts/review-session.prompt";
|
|
24
|
+
export { TwentyRulesPrompt } from "./prompts/twenty-rules.prompt";
|
|
25
|
+
export { SystemInfoResource } from "./resources/system-info.resource";
|
|
26
|
+
import { DynamicModule, Provider } from "@nestjs/common";
|
|
27
|
+
export interface McpPrimitivesAnkiEssentialModuleOptions {
|
|
28
|
+
ankiConfigProvider: Provider;
|
|
29
|
+
}
|
|
30
|
+
export declare class McpPrimitivesAnkiEssentialModule {
|
|
31
|
+
static forRoot(options: McpPrimitivesAnkiEssentialModuleOptions): DynamicModule;
|
|
32
|
+
}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
14
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
15
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
16
|
+
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;
|
|
17
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
18
|
+
};
|
|
19
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
20
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
21
|
+
};
|
|
22
|
+
var McpPrimitivesAnkiEssentialModule_1;
|
|
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;
|
|
25
|
+
var anki_config_interface_1 = require("../../config/anki-config.interface");
|
|
26
|
+
Object.defineProperty(exports, "ANKI_CONFIG", { enumerable: true, get: function () { return anki_config_interface_1.ANKI_CONFIG; } });
|
|
27
|
+
__exportStar(require("../../types/anki.types"), exports);
|
|
28
|
+
__exportStar(require("../../utils/anki.utils"), exports);
|
|
29
|
+
var anki_connect_client_1 = require("../../clients/anki-connect.client");
|
|
30
|
+
Object.defineProperty(exports, "AnkiConnectClient", { enumerable: true, get: function () { return anki_connect_client_1.AnkiConnectClient; } });
|
|
31
|
+
Object.defineProperty(exports, "AnkiConnectError", { enumerable: true, get: function () { return anki_connect_client_1.AnkiConnectError; } });
|
|
32
|
+
var sync_tool_1 = require("./tools/sync.tool");
|
|
33
|
+
Object.defineProperty(exports, "SyncTool", { enumerable: true, get: function () { return sync_tool_1.SyncTool; } });
|
|
34
|
+
var list_decks_tool_1 = require("./tools/list-decks.tool");
|
|
35
|
+
Object.defineProperty(exports, "ListDecksTool", { enumerable: true, get: function () { return list_decks_tool_1.ListDecksTool; } });
|
|
36
|
+
var create_deck_tool_1 = require("./tools/create-deck.tool");
|
|
37
|
+
Object.defineProperty(exports, "CreateDeckTool", { enumerable: true, get: function () { return create_deck_tool_1.CreateDeckTool; } });
|
|
38
|
+
var get_due_cards_tool_1 = require("./tools/get-due-cards.tool");
|
|
39
|
+
Object.defineProperty(exports, "GetDueCardsTool", { enumerable: true, get: function () { return get_due_cards_tool_1.GetDueCardsTool; } });
|
|
40
|
+
var present_card_tool_1 = require("./tools/present-card.tool");
|
|
41
|
+
Object.defineProperty(exports, "PresentCardTool", { enumerable: true, get: function () { return present_card_tool_1.PresentCardTool; } });
|
|
42
|
+
var rate_card_tool_1 = require("./tools/rate-card.tool");
|
|
43
|
+
Object.defineProperty(exports, "RateCardTool", { enumerable: true, get: function () { return rate_card_tool_1.RateCardTool; } });
|
|
44
|
+
var model_names_tool_1 = require("./tools/model-names.tool");
|
|
45
|
+
Object.defineProperty(exports, "ModelNamesTool", { enumerable: true, get: function () { return model_names_tool_1.ModelNamesTool; } });
|
|
46
|
+
var model_field_names_tool_1 = require("./tools/model-field-names.tool");
|
|
47
|
+
Object.defineProperty(exports, "ModelFieldNamesTool", { enumerable: true, get: function () { return model_field_names_tool_1.ModelFieldNamesTool; } });
|
|
48
|
+
var model_styling_tool_1 = require("./tools/model-styling.tool");
|
|
49
|
+
Object.defineProperty(exports, "ModelStylingTool", { enumerable: true, get: function () { return model_styling_tool_1.ModelStylingTool; } });
|
|
50
|
+
var create_model_tool_1 = require("./tools/create-model.tool");
|
|
51
|
+
Object.defineProperty(exports, "CreateModelTool", { enumerable: true, get: function () { return create_model_tool_1.CreateModelTool; } });
|
|
52
|
+
var update_model_styling_tool_1 = require("./tools/update-model-styling.tool");
|
|
53
|
+
Object.defineProperty(exports, "UpdateModelStylingTool", { enumerable: true, get: function () { return update_model_styling_tool_1.UpdateModelStylingTool; } });
|
|
54
|
+
var add_note_tool_1 = require("./tools/add-note.tool");
|
|
55
|
+
Object.defineProperty(exports, "AddNoteTool", { enumerable: true, get: function () { return add_note_tool_1.AddNoteTool; } });
|
|
56
|
+
var find_notes_tool_1 = require("./tools/find-notes.tool");
|
|
57
|
+
Object.defineProperty(exports, "FindNotesTool", { enumerable: true, get: function () { return find_notes_tool_1.FindNotesTool; } });
|
|
58
|
+
var notes_info_tool_1 = require("./tools/notes-info.tool");
|
|
59
|
+
Object.defineProperty(exports, "NotesInfoTool", { enumerable: true, get: function () { return notes_info_tool_1.NotesInfoTool; } });
|
|
60
|
+
var update_note_fields_tool_1 = require("./tools/update-note-fields.tool");
|
|
61
|
+
Object.defineProperty(exports, "UpdateNoteFieldsTool", { enumerable: true, get: function () { return update_note_fields_tool_1.UpdateNoteFieldsTool; } });
|
|
62
|
+
var delete_notes_tool_1 = require("./tools/delete-notes.tool");
|
|
63
|
+
Object.defineProperty(exports, "DeleteNotesTool", { enumerable: true, get: function () { return delete_notes_tool_1.DeleteNotesTool; } });
|
|
64
|
+
var mediaActions_1 = require("./tools/mediaActions");
|
|
65
|
+
Object.defineProperty(exports, "MediaActionsTool", { enumerable: true, get: function () { return mediaActions_1.MediaActionsTool; } });
|
|
66
|
+
var review_session_prompt_1 = require("./prompts/review-session.prompt");
|
|
67
|
+
Object.defineProperty(exports, "ReviewSessionPrompt", { enumerable: true, get: function () { return review_session_prompt_1.ReviewSessionPrompt; } });
|
|
68
|
+
var twenty_rules_prompt_1 = require("./prompts/twenty-rules.prompt");
|
|
69
|
+
Object.defineProperty(exports, "TwentyRulesPrompt", { enumerable: true, get: function () { return twenty_rules_prompt_1.TwentyRulesPrompt; } });
|
|
70
|
+
var system_info_resource_1 = require("./resources/system-info.resource");
|
|
71
|
+
Object.defineProperty(exports, "SystemInfoResource", { enumerable: true, get: function () { return system_info_resource_1.SystemInfoResource; } });
|
|
72
|
+
const common_1 = require("@nestjs/common");
|
|
73
|
+
const anki_connect_client_2 = require("../../clients/anki-connect.client");
|
|
74
|
+
const sync_tool_2 = require("./tools/sync.tool");
|
|
75
|
+
const list_decks_tool_2 = require("./tools/list-decks.tool");
|
|
76
|
+
const create_deck_tool_2 = require("./tools/create-deck.tool");
|
|
77
|
+
const get_due_cards_tool_2 = require("./tools/get-due-cards.tool");
|
|
78
|
+
const present_card_tool_2 = require("./tools/present-card.tool");
|
|
79
|
+
const rate_card_tool_2 = require("./tools/rate-card.tool");
|
|
80
|
+
const model_names_tool_2 = require("./tools/model-names.tool");
|
|
81
|
+
const model_field_names_tool_2 = require("./tools/model-field-names.tool");
|
|
82
|
+
const model_styling_tool_2 = require("./tools/model-styling.tool");
|
|
83
|
+
const create_model_tool_2 = require("./tools/create-model.tool");
|
|
84
|
+
const update_model_styling_tool_2 = require("./tools/update-model-styling.tool");
|
|
85
|
+
const add_note_tool_2 = require("./tools/add-note.tool");
|
|
86
|
+
const find_notes_tool_2 = require("./tools/find-notes.tool");
|
|
87
|
+
const notes_info_tool_2 = require("./tools/notes-info.tool");
|
|
88
|
+
const update_note_fields_tool_2 = require("./tools/update-note-fields.tool");
|
|
89
|
+
const delete_notes_tool_2 = require("./tools/delete-notes.tool");
|
|
90
|
+
const mediaActions_2 = require("./tools/mediaActions");
|
|
91
|
+
const review_session_prompt_2 = require("./prompts/review-session.prompt");
|
|
92
|
+
const twenty_rules_prompt_2 = require("./prompts/twenty-rules.prompt");
|
|
93
|
+
const system_info_resource_2 = require("./resources/system-info.resource");
|
|
94
|
+
const MCP_PRIMITIVES = [
|
|
95
|
+
anki_connect_client_2.AnkiConnectClient,
|
|
96
|
+
sync_tool_2.SyncTool,
|
|
97
|
+
list_decks_tool_2.ListDecksTool,
|
|
98
|
+
create_deck_tool_2.CreateDeckTool,
|
|
99
|
+
get_due_cards_tool_2.GetDueCardsTool,
|
|
100
|
+
present_card_tool_2.PresentCardTool,
|
|
101
|
+
rate_card_tool_2.RateCardTool,
|
|
102
|
+
model_names_tool_2.ModelNamesTool,
|
|
103
|
+
model_field_names_tool_2.ModelFieldNamesTool,
|
|
104
|
+
model_styling_tool_2.ModelStylingTool,
|
|
105
|
+
create_model_tool_2.CreateModelTool,
|
|
106
|
+
update_model_styling_tool_2.UpdateModelStylingTool,
|
|
107
|
+
add_note_tool_2.AddNoteTool,
|
|
108
|
+
find_notes_tool_2.FindNotesTool,
|
|
109
|
+
notes_info_tool_2.NotesInfoTool,
|
|
110
|
+
update_note_fields_tool_2.UpdateNoteFieldsTool,
|
|
111
|
+
delete_notes_tool_2.DeleteNotesTool,
|
|
112
|
+
mediaActions_2.MediaActionsTool,
|
|
113
|
+
review_session_prompt_2.ReviewSessionPrompt,
|
|
114
|
+
twenty_rules_prompt_2.TwentyRulesPrompt,
|
|
115
|
+
system_info_resource_2.SystemInfoResource,
|
|
116
|
+
];
|
|
117
|
+
let McpPrimitivesAnkiEssentialModule = McpPrimitivesAnkiEssentialModule_1 = class McpPrimitivesAnkiEssentialModule {
|
|
118
|
+
static forRoot(options) {
|
|
119
|
+
return {
|
|
120
|
+
module: McpPrimitivesAnkiEssentialModule_1,
|
|
121
|
+
providers: [options.ankiConfigProvider, ...MCP_PRIMITIVES],
|
|
122
|
+
exports: MCP_PRIMITIVES,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
exports.McpPrimitivesAnkiEssentialModule = McpPrimitivesAnkiEssentialModule;
|
|
127
|
+
exports.McpPrimitivesAnkiEssentialModule = McpPrimitivesAnkiEssentialModule = McpPrimitivesAnkiEssentialModule_1 = __decorate([
|
|
128
|
+
(0, common_1.Module)({})
|
|
129
|
+
], McpPrimitivesAnkiEssentialModule);
|
|
130
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ReviewSessionPrompt = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const mcp_nest_1 = require("@rekog/mcp-nest");
|
|
15
|
+
const zod_1 = require("zod");
|
|
16
|
+
let ReviewSessionPrompt = class ReviewSessionPrompt {
|
|
17
|
+
getAnkiReviewPrompt() {
|
|
18
|
+
const promptText = `You are helping a user review Anki flashcards using spaced repetition. Follow this workflow:
|
|
19
|
+
|
|
20
|
+
## CRITICAL: Synchronization Requirements
|
|
21
|
+
|
|
22
|
+
### At Session Start:
|
|
23
|
+
1. **ALWAYS sync first** using the sync tool before getting any cards
|
|
24
|
+
2. Remind user: "I'll sync with AnkiWeb first to ensure we have your latest progress..."
|
|
25
|
+
3. Only proceed with get_due_cards after sync completes
|
|
26
|
+
|
|
27
|
+
### At Session End:
|
|
28
|
+
1. When user indicates they're done (e.g., "that's all", "I'm done", "goodbye"), ALWAYS sync
|
|
29
|
+
2. Say: "Great session! Let me sync your progress to AnkiWeb..."
|
|
30
|
+
3. Confirm sync completion before ending
|
|
31
|
+
|
|
32
|
+
## Review Workflow
|
|
33
|
+
|
|
34
|
+
1. **Sync First**: Use sync tool to get latest data from AnkiWeb
|
|
35
|
+
2. **Ask About Deck Selection**:
|
|
36
|
+
- Ask the user: "Which deck would you like to review? You can choose a specific deck or review cards from all decks."
|
|
37
|
+
- Use list_decks to show available options if needed
|
|
38
|
+
- If user chooses "all" or wants to review everything, use get_due_cards without deck_name parameter
|
|
39
|
+
- If user specifies a deck, use get_due_cards with the deck_name parameter
|
|
40
|
+
3. **Present the Question**: Show the front of the card clearly
|
|
41
|
+
4. **Wait for User's Answer**: Let them attempt to answer
|
|
42
|
+
5. **Show the Answer**: Reveal the back of the card
|
|
43
|
+
6. **Evaluate Performance**: Assess how well they answered
|
|
44
|
+
7. **Suggest a Rating**: Based on their response, suggest one of:
|
|
45
|
+
- 1 (Again) - They got it wrong or struggled significantly
|
|
46
|
+
- 2 (Hard) - They got it but with difficulty or minor errors
|
|
47
|
+
- 3 (Good) - They knew it well with reasonable effort
|
|
48
|
+
- 4 (Easy) - They knew it instantly without effort
|
|
49
|
+
|
|
50
|
+
8. **IMPORTANT - Wait for Confirmation**:
|
|
51
|
+
- Present your suggested rating with reasoning
|
|
52
|
+
- Ask: "I'd suggest rating this as [Good/Hard/etc]. Does that sound right, or would you rate it differently?"
|
|
53
|
+
- Wait for user response:
|
|
54
|
+
- If they say "yes", "ok", "agree", "sounds good", "next" → use your suggested rating
|
|
55
|
+
- If they provide a different rating → use their rating instead
|
|
56
|
+
- If unclear → ask for clarification
|
|
57
|
+
|
|
58
|
+
9. **Submit Rating**: Only use rate_card tool AFTER user confirms or provides their rating
|
|
59
|
+
10. **Continue or End**: After rating, continue with next card or end session when user is done
|
|
60
|
+
11. **End Session**: When user is done, ALWAYS sync before saying goodbye
|
|
61
|
+
|
|
62
|
+
## Example Interactions
|
|
63
|
+
|
|
64
|
+
### User agrees with suggestion:
|
|
65
|
+
Assistant: "You explained the core concept well but missed some details about the API flow. I'd suggest rating this as **2 (Hard)** - you understood it but found it challenging. Does that sound right?"
|
|
66
|
+
User: "Yes" / "Sounds good" / "Agree" / "Next"
|
|
67
|
+
Assistant: [Uses rate_card with rating: 2]
|
|
68
|
+
|
|
69
|
+
### User overrides suggestion:
|
|
70
|
+
Assistant: "Great explanation! I'd suggest rating this as **3 (Good)**. Does that sound right?"
|
|
71
|
+
User: "Actually, it was pretty hard for me"
|
|
72
|
+
Assistant: "Understood! I'll rate it as Hard." [Uses rate_card with rating: 2]
|
|
73
|
+
|
|
74
|
+
### User provides specific rating:
|
|
75
|
+
Assistant: "You got the main idea. I'd suggest **3 (Good)**. How would you rate it?"
|
|
76
|
+
User: "Give it a 2"
|
|
77
|
+
Assistant: [Uses rate_card with rating: 2]
|
|
78
|
+
|
|
79
|
+
## Key Principles
|
|
80
|
+
- Never auto-rate without user input
|
|
81
|
+
- Default to suggesting Good (3) when performance is solid
|
|
82
|
+
- Be encouraging but honest in assessments
|
|
83
|
+
- Accept user's self-assessment over your suggestion
|
|
84
|
+
- Keep feedback concise and actionable`;
|
|
85
|
+
return {
|
|
86
|
+
description: "Guidelines for conducting Anki spaced repetition review sessions",
|
|
87
|
+
messages: [
|
|
88
|
+
{
|
|
89
|
+
role: "user",
|
|
90
|
+
content: {
|
|
91
|
+
type: "text",
|
|
92
|
+
text: promptText,
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
],
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
exports.ReviewSessionPrompt = ReviewSessionPrompt;
|
|
100
|
+
__decorate([
|
|
101
|
+
(0, mcp_nest_1.Prompt)({
|
|
102
|
+
name: "anki_review",
|
|
103
|
+
description: "Guidelines for conducting Anki spaced repetition review sessions",
|
|
104
|
+
parameters: zod_1.z.object({}),
|
|
105
|
+
}),
|
|
106
|
+
__metadata("design:type", Function),
|
|
107
|
+
__metadata("design:paramtypes", []),
|
|
108
|
+
__metadata("design:returntype", void 0)
|
|
109
|
+
], ReviewSessionPrompt.prototype, "getAnkiReviewPrompt", null);
|
|
110
|
+
exports.ReviewSessionPrompt = ReviewSessionPrompt = __decorate([
|
|
111
|
+
(0, common_1.Injectable)({ scope: common_1.Scope.REQUEST })
|
|
112
|
+
], ReviewSessionPrompt);
|
|
113
|
+
//# sourceMappingURL=review-session.prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-session.prompt.js","sourceRoot":"","sources":["../../../../../src/mcp/primitives/essential/prompts/review-session.prompt.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAmD;AACnD,8CAAyC;AACzC,6BAAwB;AAGjB,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAO9B,mBAAmB;QACjB,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uCAkEgB,CAAC;QAEpC,OAAO;YACL,WAAW,EACT,kEAAkE;YACpE,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,UAAU;qBACjB;iBACF;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AA1FY,kDAAmB;AAO9B;IANC,IAAA,iBAAM,EAAC;QACN,IAAI,EAAE,aAAa;QACnB,WAAW,EACT,kEAAkE;QACpE,UAAU,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC;KACzB,CAAC;;;;8DAmFD;8BAzFU,mBAAmB;IAD/B,IAAA,mBAAU,EAAC,EAAE,KAAK,EAAE,cAAK,CAAC,OAAO,EAAE,CAAC;GACxB,mBAAmB,CA0F/B"}
|