@ankimcp/anki-mcp-server 0.15.0 → 0.15.1
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/README.md +17 -0
- package/dist/mcp/primitives/essential/tools/collection-stats/collection-stats.tool.js +4 -2
- package/dist/mcp/primitives/essential/tools/collection-stats/collection-stats.tool.js.map +1 -1
- package/dist/mcp/primitives/essential/tools/deckActions/deckActions.tool.js +4 -2
- package/dist/mcp/primitives/essential/tools/deckActions/deckActions.tool.js.map +1 -1
- package/dist/mcp/primitives/essential/tools/mediaActions/actions/deleteMediaFile.action.js +3 -2
- package/dist/mcp/primitives/essential/tools/mediaActions/actions/deleteMediaFile.action.js.map +1 -1
- package/dist/mcp/primitives/essential/tools/mediaActions/actions/retrieveMediaFile.action.js +3 -2
- package/dist/mcp/primitives/essential/tools/mediaActions/actions/retrieveMediaFile.action.js.map +1 -1
- package/dist/mcp/primitives/essential/tools/mediaActions/actions/storeMediaFile.action.js +18 -4
- package/dist/mcp/primitives/essential/tools/mediaActions/actions/storeMediaFile.action.js.map +1 -1
- package/dist/mcp/primitives/essential/tools/mediaActions/mediaActions.tool.js +1 -1
- package/dist/mcp/primitives/essential/tools/mediaActions/mediaActions.tool.js.map +1 -1
- package/dist/mcp/primitives/essential/tools/tagActions/tagActions.tool.js +3 -1
- package/dist/mcp/primitives/essential/tools/tagActions/tagActions.tool.js.map +1 -1
- package/dist/mcp/primitives/essential/tools/update-note-fields.tool.js +17 -0
- package/dist/mcp/primitives/essential/tools/update-note-fields.tool.js.map +1 -1
- package/dist/mcp/utils/media-validation.utils.d.ts +33 -0
- package/dist/mcp/utils/media-validation.utils.js +208 -0
- package/dist/mcp/utils/media-validation.utils.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -368,6 +368,9 @@ For more details, see the [official MCP documentation](https://modelcontextproto
|
|
|
368
368
|
| `ANKI_CONNECT_API_KEY` | API key if configured in AnkiConnect | - |
|
|
369
369
|
| `ANKI_CONNECT_TIMEOUT` | Request timeout in ms | `5000` |
|
|
370
370
|
| `READ_ONLY` | Enable read-only mode (`true` or `1`) | `false` |
|
|
371
|
+
| `MEDIA_ALLOWED_TYPES` | Extra MIME types to allow for file path imports (comma-separated, e.g., `application/pdf`) | - |
|
|
372
|
+
| `MEDIA_IMPORT_DIR` | Restrict file path imports to this directory | - |
|
|
373
|
+
| `MEDIA_ALLOWED_HOSTS` | Allow specific private network hosts for URL imports (comma-separated, e.g., `192.168.1.50,my-nas`) | - |
|
|
371
374
|
|
|
372
375
|
## Usage Examples
|
|
373
376
|
|
|
@@ -421,6 +424,20 @@ The `findNotes` tool supports Anki's powerful query syntax:
|
|
|
421
424
|
#### Deletion Safety
|
|
422
425
|
The `deleteNotes` tool requires explicit confirmation (`confirmDeletion: true`) to prevent accidental deletions. Deleting a note removes ALL associated cards permanently.
|
|
423
426
|
|
|
427
|
+
## Security
|
|
428
|
+
|
|
429
|
+
### Media File Path and URL Validation
|
|
430
|
+
|
|
431
|
+
The `mediaActions` tool and `updateNoteFields` audio/picture fields include security validation to prevent misuse via prompt injection:
|
|
432
|
+
|
|
433
|
+
- **File path imports** are restricted to media file types only (images, audio, video). Non-media files (e.g., SSH keys, credentials, shell configs) are rejected based on MIME type. Configure `MEDIA_ALLOWED_TYPES` to allow additional file types, or `MEDIA_IMPORT_DIR` to restrict imports to a specific directory.
|
|
434
|
+
- **URL imports** are validated against SSRF attacks. Requests to private networks (10.x, 172.16.x, 192.168.x), loopback (127.x), link-local (169.254.x), and non-HTTP(S) schemes are blocked. Configure `MEDIA_ALLOWED_HOSTS` to allow specific private network hosts.
|
|
435
|
+
- **Filenames** are sanitized to prevent path traversal (e.g., `../../` sequences are stripped).
|
|
436
|
+
|
|
437
|
+
These protections apply to `storeMediaFile`, `retrieveMediaFile`, `deleteMediaFile`, and `updateNoteFields` audio/picture fields.
|
|
438
|
+
|
|
439
|
+
> Path traversal vulnerability reported by [Hideaki Takahashi](https://github.com/Koukyosyumei).
|
|
440
|
+
|
|
424
441
|
## Known Issues
|
|
425
442
|
|
|
426
443
|
For a comprehensive list of known issues and limitations, please visit our documentation:
|
|
@@ -182,7 +182,8 @@ __decorate([
|
|
|
182
182
|
"Ease buckets and interval buckets can be customized to focus on specific ranges.",
|
|
183
183
|
parameters: zod_1.z.object({
|
|
184
184
|
ease_buckets: zod_1.z
|
|
185
|
-
.array(zod_1.z.number().positive())
|
|
185
|
+
.array(zod_1.z.number().positive())
|
|
186
|
+
.max(20)
|
|
186
187
|
.optional()
|
|
187
188
|
.default([2.0, 2.5, 3.0])
|
|
188
189
|
.refine((arr) => arr.length === 0 || arr.every((v, i, a) => i === 0 || v > a[i - 1]), {
|
|
@@ -191,7 +192,8 @@ __decorate([
|
|
|
191
192
|
.describe("Bucket boundaries for ease factor distribution. Default: [2.0, 2.5, 3.0]. " +
|
|
192
193
|
"Example: [2.0, 2.5, 3.0] creates buckets: <2.0, 2.0-2.5, 2.5-3.0, >3.0"),
|
|
193
194
|
interval_buckets: zod_1.z
|
|
194
|
-
.array(zod_1.z.number().positive())
|
|
195
|
+
.array(zod_1.z.number().positive())
|
|
196
|
+
.max(20)
|
|
195
197
|
.optional()
|
|
196
198
|
.default([7, 21, 90])
|
|
197
199
|
.refine((arr) => arr.length === 0 || arr.every((v, i, a) => i === 0 || v > a[i - 1]), {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection-stats.tool.js","sourceRoot":"","sources":["../../../../../../src/mcp/primitives/essential/tools/collection-stats/collection-stats.tool.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAoD;AACpD,8CAAuC;AAEvC,6BAAwB;AACxB,iFAAsE;AACtE,6DAA6D;AAC7D,+DAA8D;AAYvD,IAAM,mBAAmB,2BAAzB,MAAM,mBAAmB;IAGD;IAFZ,MAAM,GAAG,IAAI,eAAM,CAAC,qBAAmB,CAAC,IAAI,CAAC,CAAC;IAE/D,YAA6B,UAA6B;QAA7B,eAAU,GAAV,UAAU,CAAmB;IAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"collection-stats.tool.js","sourceRoot":"","sources":["../../../../../../src/mcp/primitives/essential/tools/collection-stats/collection-stats.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -114,11 +114,13 @@ Remember to sync first at the start of a session for latest data.`,
|
|
|
114
114
|
.optional()
|
|
115
115
|
.describe('[deckStats/changeDeck] Deck name (e.g., "Japanese::JLPT N5")'),
|
|
116
116
|
easeBuckets: zod_1.z
|
|
117
|
-
.array(zod_1.z.number().positive())
|
|
117
|
+
.array(zod_1.z.number().positive())
|
|
118
|
+
.max(20)
|
|
118
119
|
.optional()
|
|
119
120
|
.describe("[deckStats] Bucket boundaries for ease factor distribution. Default: [2.0, 2.5, 3.0]"),
|
|
120
121
|
intervalBuckets: zod_1.z
|
|
121
|
-
.array(zod_1.z.number().positive())
|
|
122
|
+
.array(zod_1.z.number().positive())
|
|
123
|
+
.max(20)
|
|
122
124
|
.optional()
|
|
123
125
|
.describe("[deckStats] Bucket boundaries for interval distribution in days. Default: [7, 21, 90]"),
|
|
124
126
|
cards: zod_1.z
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deckActions.tool.js","sourceRoot":"","sources":["../../../../../../src/mcp/primitives/essential/tools/deckActions/deckActions.tool.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAoD;AACpD,8CAAuC;AAEvC,6BAAwB;AACxB,iFAAsE;AACtE,6DAA6D;AAC7D,mEAAgF;AAChF,iEAA6E;AAC7E,mEAAgF;AAChF,iEAA6E;AAOtE,IAAM,eAAe,uBAArB,MAAM,eAAe;IAGG;IAFZ,MAAM,GAAG,IAAI,eAAM,CAAC,iBAAe,CAAC,IAAI,CAAC,CAAC;IAE3D,YAA6B,UAA6B;QAA7B,eAAU,GAAV,UAAU,CAAmB;IAAG,CAAC;
|
|
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,11 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.deleteMediaFile = deleteMediaFile;
|
|
4
|
+
const media_validation_utils_1 = require("../../../../../utils/media-validation.utils");
|
|
4
5
|
async function deleteMediaFile(params, client) {
|
|
5
|
-
|
|
6
|
-
if (!filename || filename.trim() === "") {
|
|
6
|
+
if (!params.filename || params.filename.trim() === "") {
|
|
7
7
|
throw new Error("Filename cannot be empty");
|
|
8
8
|
}
|
|
9
|
+
const filename = (0, media_validation_utils_1.sanitizeMediaFilename)(params.filename);
|
|
9
10
|
await client.invoke("deleteMediaFile", {
|
|
10
11
|
filename,
|
|
11
12
|
});
|
package/dist/mcp/primitives/essential/tools/mediaActions/actions/deleteMediaFile.action.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deleteMediaFile.action.js","sourceRoot":"","sources":["../../../../../../../src/mcp/primitives/essential/tools/mediaActions/actions/deleteMediaFile.action.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"deleteMediaFile.action.js","sourceRoot":"","sources":["../../../../../../../src/mcp/primitives/essential/tools/mediaActions/actions/deleteMediaFile.action.ts"],"names":[],"mappings":";;AAuBA,0CAsBC;AA5CD,wFAA2E;AAsBpE,KAAK,UAAU,eAAe,CACnC,MAA6B,EAC7B,MAAyB;IAGzB,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAGD,MAAM,QAAQ,GAAG,IAAA,8CAAqB,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAGxD,MAAM,MAAM,CAAC,MAAM,CAAO,iBAAiB,EAAE;QAC3C,QAAQ;KACT,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE,IAAI;QACb,QAAQ;QACR,OAAO,EAAE,oCAAoC,QAAQ,EAAE;KACxD,CAAC;AACJ,CAAC"}
|
package/dist/mcp/primitives/essential/tools/mediaActions/actions/retrieveMediaFile.action.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.retrieveMediaFile = retrieveMediaFile;
|
|
4
|
+
const media_validation_utils_1 = require("../../../../../utils/media-validation.utils");
|
|
4
5
|
async function retrieveMediaFile(params, client) {
|
|
5
|
-
|
|
6
|
-
if (!filename || filename.trim() === "") {
|
|
6
|
+
if (!params.filename || params.filename.trim() === "") {
|
|
7
7
|
throw new Error("Filename cannot be empty");
|
|
8
8
|
}
|
|
9
|
+
const filename = (0, media_validation_utils_1.sanitizeMediaFilename)(params.filename);
|
|
9
10
|
const result = await client.invoke("retrieveMediaFile", {
|
|
10
11
|
filename,
|
|
11
12
|
});
|
package/dist/mcp/primitives/essential/tools/mediaActions/actions/retrieveMediaFile.action.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retrieveMediaFile.action.js","sourceRoot":"","sources":["../../../../../../../src/mcp/primitives/essential/tools/mediaActions/actions/retrieveMediaFile.action.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"retrieveMediaFile.action.js","sourceRoot":"","sources":["../../../../../../../src/mcp/primitives/essential/tools/mediaActions/actions/retrieveMediaFile.action.ts"],"names":[],"mappings":";;AA0BA,8CAmCC;AA5DD,wFAA2E;AAyBpE,KAAK,UAAU,iBAAiB,CACrC,MAA+B,EAC/B,MAAyB;IAGzB,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAGD,MAAM,QAAQ,GAAG,IAAA,8CAAqB,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAGxD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAiB,mBAAmB,EAAE;QACtE,QAAQ;KACT,CAAC,CAAC;IAGH,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,OAAO;YACL,OAAO,EAAE,IAAI;YACb,QAAQ;YACR,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,yBAAyB,QAAQ,EAAE;YAC5C,KAAK,EAAE,KAAK;SACb,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,QAAQ;QACR,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,sCAAsC,QAAQ,EAAE;QACzD,KAAK,EAAE,IAAI;KACZ,CAAC;AACJ,CAAC"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.storeMediaFile = storeMediaFile;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const media_validation_utils_1 = require("../../../../../utils/media-validation.utils");
|
|
6
|
+
const logger = new common_1.Logger("storeMediaFile");
|
|
4
7
|
async function storeMediaFile(params, client) {
|
|
5
|
-
const {
|
|
8
|
+
const { data, path, url, deleteExisting = true } = params;
|
|
6
9
|
if (!data && !path && !url) {
|
|
7
10
|
throw new Error("Must provide either data, path, or url parameter");
|
|
8
11
|
}
|
|
@@ -10,9 +13,20 @@ async function storeMediaFile(params, client) {
|
|
|
10
13
|
if (sources.length > 1) {
|
|
11
14
|
throw new Error("Cannot provide multiple sources (data, path, url). Choose one.");
|
|
12
15
|
}
|
|
13
|
-
if (!filename || filename.trim() === "") {
|
|
16
|
+
if (!params.filename || params.filename.trim() === "") {
|
|
14
17
|
throw new Error("Filename cannot be empty");
|
|
15
18
|
}
|
|
19
|
+
const filename = (0, media_validation_utils_1.sanitizeMediaFilename)(params.filename);
|
|
20
|
+
let validatedPath;
|
|
21
|
+
if (path) {
|
|
22
|
+
const { resolvedPath, mimeType } = (0, media_validation_utils_1.validateMediaFilePath)(path, (0, media_validation_utils_1.getMediaFilePathConfigFromEnv)());
|
|
23
|
+
validatedPath = resolvedPath;
|
|
24
|
+
logger.warn(`storeMediaFile path validation: resolved="${resolvedPath}", mime="${mimeType}"`);
|
|
25
|
+
}
|
|
26
|
+
if (url) {
|
|
27
|
+
const { hostname, resolvedIp } = await (0, media_validation_utils_1.validateMediaUrl)(url, (0, media_validation_utils_1.getMediaUrlConfigFromEnv)());
|
|
28
|
+
logger.warn(`storeMediaFile URL validation: hostname="${hostname}", resolvedIp="${resolvedIp}"`);
|
|
29
|
+
}
|
|
16
30
|
const prefixedWithUnderscore = filename.startsWith("_");
|
|
17
31
|
const ankiParams = {
|
|
18
32
|
filename,
|
|
@@ -21,8 +35,8 @@ async function storeMediaFile(params, client) {
|
|
|
21
35
|
if (data) {
|
|
22
36
|
ankiParams.data = data;
|
|
23
37
|
}
|
|
24
|
-
else if (
|
|
25
|
-
ankiParams.path =
|
|
38
|
+
else if (validatedPath) {
|
|
39
|
+
ankiParams.path = validatedPath;
|
|
26
40
|
}
|
|
27
41
|
else if (url) {
|
|
28
42
|
ankiParams.url = url;
|
package/dist/mcp/primitives/essential/tools/mediaActions/actions/storeMediaFile.action.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storeMediaFile.action.js","sourceRoot":"","sources":["../../../../../../../src/mcp/primitives/essential/tools/mediaActions/actions/storeMediaFile.action.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"storeMediaFile.action.js","sourceRoot":"","sources":["../../../../../../../src/mcp/primitives/essential/tools/mediaActions/actions/storeMediaFile.action.ts"],"names":[],"mappings":";;AA8CA,wCAmFC;AAjID,2CAAwC;AAExC,wFAM4C;AAE5C,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,gBAAgB,CAAC,CAAC;AAoCrC,KAAK,UAAU,cAAc,CAClC,MAA4B,EAC5B,MAAyB;IAEzB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IAG1D,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IAGD,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,gEAAgE,CACjE,CAAC;IACJ,CAAC;IAGD,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAGD,MAAM,QAAQ,GAAG,IAAA,8CAAqB,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAIxD,IAAI,aAAiC,CAAC;IACtC,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,IAAA,8CAAqB,EACtD,IAAI,EACJ,IAAA,sDAA6B,GAAE,CAChC,CAAC;QACF,aAAa,GAAG,YAAY,CAAC;QAC7B,MAAM,CAAC,IAAI,CACT,6CAA6C,YAAY,YAAY,QAAQ,GAAG,CACjF,CAAC;IACJ,CAAC;IAGD,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM,IAAA,yCAAgB,EACrD,GAAG,EACH,IAAA,iDAAwB,GAAE,CAC3B,CAAC;QACF,MAAM,CAAC,IAAI,CACT,4CAA4C,QAAQ,kBAAkB,UAAU,GAAG,CACpF,CAAC;IACJ,CAAC;IAGD,MAAM,sBAAsB,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAGxD,MAAM,UAAU,GAAwB;QACtC,QAAQ;QACR,cAAc;KACf,CAAC;IAEF,IAAI,IAAI,EAAE,CAAC;QACT,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;IACzB,CAAC;SAAM,IAAI,aAAa,EAAE,CAAC;QACzB,UAAU,CAAC,IAAI,GAAG,aAAa,CAAC;IAClC,CAAC;SAAM,IAAI,GAAG,EAAE,CAAC;QACf,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC;IACvB,CAAC;IAGD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAS,gBAAgB,EAAE,UAAU,CAAC,CAAC;IAGzE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,mCAAmC,MAAM,EAAE;QACpD,sBAAsB;KACvB,CAAC;AACJ,CAAC"}
|
|
@@ -114,7 +114,7 @@ Perfect for workflows like ElevenLabs TTS → Anki audio flashcards.`,
|
|
|
114
114
|
path: zod_1.z
|
|
115
115
|
.string()
|
|
116
116
|
.optional()
|
|
117
|
-
.describe("[storeMediaFile only] Absolute file
|
|
117
|
+
.describe("[storeMediaFile only] Absolute path to a local media file (images, audio, video only)"),
|
|
118
118
|
url: zod_1.z
|
|
119
119
|
.string()
|
|
120
120
|
.optional()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mediaActions.tool.js","sourceRoot":"","sources":["../../../../../../src/mcp/primitives/essential/tools/mediaActions/mediaActions.tool.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAoD;AACpD,8CAAuC;AAEvC,6BAAwB;AACxB,iFAAsE;AACtE,6DAA6D;AAC7D,2EAGyC;AACzC,iFAG4C;AAC5C,mFAG6C;AAC7C,6EAG0C;AAOnC,IAAM,gBAAgB,wBAAtB,MAAM,gBAAgB;IAGE;IAFZ,MAAM,GAAG,IAAI,eAAM,CAAC,kBAAgB,CAAC,IAAI,CAAC,CAAC;IAE5D,YAA6B,UAA6B;QAA7B,eAAU,GAAV,UAAU,CAAmB;IAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"mediaActions.tool.js","sourceRoot":"","sources":["../../../../../../src/mcp/primitives/essential/tools/mediaActions/mediaActions.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -110,7 +110,9 @@ Tags in addTags/removeTags are space-separated strings (e.g., "tag1 tag2 tag3").
|
|
|
110
110
|
.enum(["addTags", "removeTags", "replaceTags", "clearUnusedTags"])
|
|
111
111
|
.describe("The tag action to perform"),
|
|
112
112
|
notes: zod_1.z
|
|
113
|
-
.array(zod_1.z.number())
|
|
113
|
+
.array(zod_1.z.number())
|
|
114
|
+
.min(1)
|
|
115
|
+
.max(1000)
|
|
114
116
|
.optional()
|
|
115
117
|
.describe("[addTags, removeTags, replaceTags] Array of note IDs to modify"),
|
|
116
118
|
tags: zod_1.z
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tagActions.tool.js","sourceRoot":"","sources":["../../../../../../src/mcp/primitives/essential/tools/tagActions/tagActions.tool.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAoD;AACpD,8CAAuC;AAEvC,6BAAwB;AACxB,iFAAsE;AACtE,6DAA6D;AAC7D,6DAAuE;AACvE,mEAAgF;AAChF,qEAGsC;AACtC,6EAG0C;AASnC,IAAM,cAAc,sBAApB,MAAM,cAAc;IAGI;IAFZ,MAAM,GAAG,IAAI,eAAM,CAAC,gBAAc,CAAC,IAAI,CAAC,CAAC;IAE1D,YAA6B,UAA6B;QAA7B,eAAU,GAAV,UAAU,CAAmB;IAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"tagActions.tool.js","sourceRoot":"","sources":["../../../../../../src/mcp/primitives/essential/tools/tagActions/tagActions.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,7 @@ const mcp_nest_1 = require("@rekog/mcp-nest");
|
|
|
16
16
|
const zod_1 = require("zod");
|
|
17
17
|
const anki_connect_client_1 = require("../../../clients/anki-connect.client");
|
|
18
18
|
const anki_utils_1 = require("../../../utils/anki.utils");
|
|
19
|
+
const media_validation_utils_1 = require("../../../utils/media-validation.utils");
|
|
19
20
|
let UpdateNoteFieldsTool = UpdateNoteFieldsTool_1 = class UpdateNoteFieldsTool {
|
|
20
21
|
ankiClient;
|
|
21
22
|
logger = new common_1.Logger(UpdateNoteFieldsTool_1.name);
|
|
@@ -32,6 +33,22 @@ let UpdateNoteFieldsTool = UpdateNoteFieldsTool_1 = class UpdateNoteFieldsTool {
|
|
|
32
33
|
hint: "Provide at least one field to update",
|
|
33
34
|
});
|
|
34
35
|
}
|
|
36
|
+
if (note.audio) {
|
|
37
|
+
const urlConfig = (0, media_validation_utils_1.getMediaUrlConfigFromEnv)();
|
|
38
|
+
for (const audioItem of note.audio) {
|
|
39
|
+
const { hostname, resolvedIp } = await (0, media_validation_utils_1.validateMediaUrl)(audioItem.url, urlConfig);
|
|
40
|
+
this.logger.warn(`updateNoteFields audio URL validation: hostname="${hostname}", resolvedIp="${resolvedIp}"`);
|
|
41
|
+
audioItem.filename = (0, media_validation_utils_1.sanitizeMediaFilename)(audioItem.filename);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (note.picture) {
|
|
45
|
+
const urlConfig = (0, media_validation_utils_1.getMediaUrlConfigFromEnv)();
|
|
46
|
+
for (const pictureItem of note.picture) {
|
|
47
|
+
const { hostname, resolvedIp } = await (0, media_validation_utils_1.validateMediaUrl)(pictureItem.url, urlConfig);
|
|
48
|
+
this.logger.warn(`updateNoteFields picture URL validation: hostname="${hostname}", resolvedIp="${resolvedIp}"`);
|
|
49
|
+
pictureItem.filename = (0, media_validation_utils_1.sanitizeMediaFilename)(pictureItem.filename);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
35
52
|
await context.reportProgress({ progress: 25, total: 100 });
|
|
36
53
|
const notesInfo = await this.ankiClient.invoke("notesInfo", {
|
|
37
54
|
notes: [note.id],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-note-fields.tool.js","sourceRoot":"","sources":["../../../../../src/mcp/primitives/essential/tools/update-note-fields.tool.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAoD;AACpD,8CAAuC;AAEvC,6BAAwB;AACxB,8EAAsE;AACtE,0DAA6D;
|
|
1
|
+
{"version":3,"file":"update-note-fields.tool.js","sourceRoot":"","sources":["../../../../../src/mcp/primitives/essential/tools/update-note-fields.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export declare class MediaFileTypeError extends Error {
|
|
2
|
+
constructor();
|
|
3
|
+
}
|
|
4
|
+
export declare class MediaImportDirError extends Error {
|
|
5
|
+
constructor(configuredDir: string);
|
|
6
|
+
}
|
|
7
|
+
export declare class MediaUrlBlockedError extends Error {
|
|
8
|
+
constructor();
|
|
9
|
+
}
|
|
10
|
+
export declare class MediaUrlSchemeError extends Error {
|
|
11
|
+
constructor(scheme: string);
|
|
12
|
+
}
|
|
13
|
+
export declare class MediaUrlInvalidError extends Error {
|
|
14
|
+
constructor();
|
|
15
|
+
}
|
|
16
|
+
export interface MediaFilePathConfig {
|
|
17
|
+
allowedTypes?: string[];
|
|
18
|
+
importDir?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface MediaUrlConfig {
|
|
21
|
+
allowedHosts?: string[];
|
|
22
|
+
}
|
|
23
|
+
export declare function validateMediaFilePath(filePath: string, config?: MediaFilePathConfig): {
|
|
24
|
+
resolvedPath: string;
|
|
25
|
+
mimeType: string;
|
|
26
|
+
};
|
|
27
|
+
export declare function validateMediaUrl(input: string, config?: MediaUrlConfig): Promise<{
|
|
28
|
+
hostname: string;
|
|
29
|
+
resolvedIp: string;
|
|
30
|
+
}>;
|
|
31
|
+
export declare function sanitizeMediaFilename(filename: string): string;
|
|
32
|
+
export declare function getMediaFilePathConfigFromEnv(): MediaFilePathConfig;
|
|
33
|
+
export declare function getMediaUrlConfigFromEnv(): MediaUrlConfig;
|
|
@@ -0,0 +1,208 @@
|
|
|
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 __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.MediaUrlInvalidError = exports.MediaUrlSchemeError = exports.MediaUrlBlockedError = exports.MediaImportDirError = exports.MediaFileTypeError = void 0;
|
|
40
|
+
exports.validateMediaFilePath = validateMediaFilePath;
|
|
41
|
+
exports.validateMediaUrl = validateMediaUrl;
|
|
42
|
+
exports.sanitizeMediaFilename = sanitizeMediaFilename;
|
|
43
|
+
exports.getMediaFilePathConfigFromEnv = getMediaFilePathConfigFromEnv;
|
|
44
|
+
exports.getMediaUrlConfigFromEnv = getMediaUrlConfigFromEnv;
|
|
45
|
+
const path = __importStar(require("node:path"));
|
|
46
|
+
const dns = __importStar(require("node:dns"));
|
|
47
|
+
const mime_1 = __importDefault(require("mime"));
|
|
48
|
+
const ipaddr = __importStar(require("ipaddr.js"));
|
|
49
|
+
class MediaFileTypeError extends Error {
|
|
50
|
+
constructor() {
|
|
51
|
+
super("File type not allowed. Only media files (images, audio, video) are accepted. " +
|
|
52
|
+
"To allow additional file types, set the MEDIA_ALLOWED_TYPES environment variable.");
|
|
53
|
+
this.name = "MediaFileTypeError";
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.MediaFileTypeError = MediaFileTypeError;
|
|
57
|
+
class MediaImportDirError extends Error {
|
|
58
|
+
constructor(configuredDir) {
|
|
59
|
+
super(`File path is outside the allowed import directory (${configuredDir}). ` +
|
|
60
|
+
"Update MEDIA_IMPORT_DIR to change the allowed directory.");
|
|
61
|
+
this.name = "MediaImportDirError";
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.MediaImportDirError = MediaImportDirError;
|
|
65
|
+
class MediaUrlBlockedError extends Error {
|
|
66
|
+
constructor() {
|
|
67
|
+
super("URL blocked: requests to private/internal networks are not allowed. " +
|
|
68
|
+
"To allow specific hosts, set the MEDIA_ALLOWED_HOSTS environment variable.");
|
|
69
|
+
this.name = "MediaUrlBlockedError";
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.MediaUrlBlockedError = MediaUrlBlockedError;
|
|
73
|
+
class MediaUrlSchemeError extends Error {
|
|
74
|
+
constructor(scheme) {
|
|
75
|
+
super(`URL scheme "${scheme}" is not allowed. Only http: and https: URLs are accepted.`);
|
|
76
|
+
this.name = "MediaUrlSchemeError";
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
exports.MediaUrlSchemeError = MediaUrlSchemeError;
|
|
80
|
+
class MediaUrlInvalidError extends Error {
|
|
81
|
+
constructor() {
|
|
82
|
+
super("Invalid URL provided.");
|
|
83
|
+
this.name = "MediaUrlInvalidError";
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.MediaUrlInvalidError = MediaUrlInvalidError;
|
|
87
|
+
const DEFAULT_ALLOWED_PREFIXES = ["image/", "audio/", "video/"];
|
|
88
|
+
const BLOCKED_RANGES = new Set([
|
|
89
|
+
"private",
|
|
90
|
+
"loopback",
|
|
91
|
+
"linkLocal",
|
|
92
|
+
"reserved",
|
|
93
|
+
"unspecified",
|
|
94
|
+
"uniqueLocal",
|
|
95
|
+
"carrierGradeNat",
|
|
96
|
+
"multicast",
|
|
97
|
+
"broadcast",
|
|
98
|
+
]);
|
|
99
|
+
function validateMediaFilePath(filePath, config = {}) {
|
|
100
|
+
if (filePath.includes("\0")) {
|
|
101
|
+
throw new MediaFileTypeError();
|
|
102
|
+
}
|
|
103
|
+
const resolvedPath = path.resolve(filePath);
|
|
104
|
+
const detectedMime = mime_1.default.getType(resolvedPath);
|
|
105
|
+
const isDefaultAllowed = detectedMime !== null &&
|
|
106
|
+
DEFAULT_ALLOWED_PREFIXES.some((prefix) => detectedMime.startsWith(prefix));
|
|
107
|
+
const isExtraAllowed = detectedMime !== null &&
|
|
108
|
+
config.allowedTypes !== undefined &&
|
|
109
|
+
config.allowedTypes.includes(detectedMime);
|
|
110
|
+
if (!isDefaultAllowed && !isExtraAllowed) {
|
|
111
|
+
throw new MediaFileTypeError();
|
|
112
|
+
}
|
|
113
|
+
if (config.importDir) {
|
|
114
|
+
const resolvedImportDir = path.resolve(config.importDir);
|
|
115
|
+
const normalizedImportDir = resolvedImportDir.endsWith(path.sep)
|
|
116
|
+
? resolvedImportDir
|
|
117
|
+
: resolvedImportDir + path.sep;
|
|
118
|
+
if (!resolvedPath.startsWith(normalizedImportDir)) {
|
|
119
|
+
throw new MediaImportDirError(config.importDir);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return { resolvedPath, mimeType: detectedMime };
|
|
123
|
+
}
|
|
124
|
+
async function validateMediaUrl(input, config = {}) {
|
|
125
|
+
let parsed;
|
|
126
|
+
try {
|
|
127
|
+
parsed = new URL(input);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
throw new MediaUrlInvalidError();
|
|
131
|
+
}
|
|
132
|
+
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
|
|
133
|
+
throw new MediaUrlSchemeError(parsed.protocol.replace(":", ""));
|
|
134
|
+
}
|
|
135
|
+
const hostname = parsed.hostname;
|
|
136
|
+
const hostnameForLookup = hostname.startsWith("[") && hostname.endsWith("]")
|
|
137
|
+
? hostname.slice(1, -1)
|
|
138
|
+
: hostname;
|
|
139
|
+
let resolvedIp;
|
|
140
|
+
try {
|
|
141
|
+
const result = await dns.promises.lookup(hostnameForLookup);
|
|
142
|
+
resolvedIp = result.address;
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
throw new MediaUrlInvalidError();
|
|
146
|
+
}
|
|
147
|
+
if (config.allowedHosts && config.allowedHosts.length > 0) {
|
|
148
|
+
const isAllowed = config.allowedHosts.some((allowed) => allowed === hostname || allowed === resolvedIp);
|
|
149
|
+
if (isAllowed) {
|
|
150
|
+
return { hostname, resolvedIp };
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
let addr;
|
|
154
|
+
try {
|
|
155
|
+
addr = ipaddr.parse(resolvedIp);
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
throw new MediaUrlBlockedError();
|
|
159
|
+
}
|
|
160
|
+
if (addr.kind() === "ipv6") {
|
|
161
|
+
const ipv6 = addr;
|
|
162
|
+
if (ipv6.isIPv4MappedAddress()) {
|
|
163
|
+
addr = ipv6.toIPv4Address();
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
const range = addr.range();
|
|
167
|
+
if (BLOCKED_RANGES.has(range)) {
|
|
168
|
+
throw new MediaUrlBlockedError();
|
|
169
|
+
}
|
|
170
|
+
return { hostname, resolvedIp };
|
|
171
|
+
}
|
|
172
|
+
function sanitizeMediaFilename(filename) {
|
|
173
|
+
let sanitized = filename.replace(/\0/g, "");
|
|
174
|
+
sanitized = sanitized.replace(/\.\./g, "");
|
|
175
|
+
sanitized = sanitized.replace(/[/\\]/g, "");
|
|
176
|
+
sanitized = path.basename(sanitized);
|
|
177
|
+
if (!sanitized || sanitized.trim() === "" || sanitized === ".") {
|
|
178
|
+
return "unnamed";
|
|
179
|
+
}
|
|
180
|
+
return sanitized;
|
|
181
|
+
}
|
|
182
|
+
function getMediaFilePathConfigFromEnv() {
|
|
183
|
+
const config = {};
|
|
184
|
+
const allowedTypes = process.env.MEDIA_ALLOWED_TYPES;
|
|
185
|
+
if (allowedTypes) {
|
|
186
|
+
config.allowedTypes = allowedTypes
|
|
187
|
+
.split(",")
|
|
188
|
+
.map((t) => t.trim())
|
|
189
|
+
.filter(Boolean);
|
|
190
|
+
}
|
|
191
|
+
const importDir = process.env.MEDIA_IMPORT_DIR;
|
|
192
|
+
if (importDir) {
|
|
193
|
+
config.importDir = importDir;
|
|
194
|
+
}
|
|
195
|
+
return config;
|
|
196
|
+
}
|
|
197
|
+
function getMediaUrlConfigFromEnv() {
|
|
198
|
+
const config = {};
|
|
199
|
+
const allowedHosts = process.env.MEDIA_ALLOWED_HOSTS;
|
|
200
|
+
if (allowedHosts) {
|
|
201
|
+
config.allowedHosts = allowedHosts
|
|
202
|
+
.split(",")
|
|
203
|
+
.map((h) => h.trim())
|
|
204
|
+
.filter(Boolean);
|
|
205
|
+
}
|
|
206
|
+
return config;
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=media-validation.utils.js.map
|