{"_id":"@ankimcp/anki-mcp-server","_rev":"35-119b444def6b6325ab4650ae5c517947","name":"@ankimcp/anki-mcp-server","dist-tags":{"beta":"0.12.1-beta.1","tunnel":"0.18.5-tunnel.2","latest":"0.19.2"},"versions":{"0.8.0":{"name":"@ankimcp/anki-mcp-server","version":"0.8.0","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"AGPL-3.0-or-later","_id":"@ankimcp/anki-mcp-server@0.8.0","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"ff40ae38589b244c510ee89b8d812689450ab589","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.8.0.tgz","fileCount":171,"integrity":"sha512-adSbrhDJWVhl4vECvM/rtsiVKzFYCI8FECmWC/MGe9nRRJON7KfYpJvHx/mT53BAdSoXgdhxuaTOcKAHIx31vw==","signatures":[{"sig":"MEQCIFTf9u2bh3w9UU/Rjg0cFP+GF3BMGUU3gH4Y3i4HQLfrAiARJJETBCWbpbGAcXAb9/fY72UzP7w8q/r6rykJnTPm9Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":684827},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20"},"gitHead":"d6e236bc4c56fa6bf9a424960b636fac48b938c8","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","test:cov":"jest --coverage","test:unit":"jest --testPathPattern='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"$npm_package_name-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","install:local":"npm install -g ./@ankimcp-anki-mcp-server-*.tgz","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"anatoly314","email":"anatolyt@gmail.com"},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"20.19.5","dependencies":{"ky":"^1.11.0","zod":"^3.25.76","pino":"^10.0.0","rxjs":"^7.8.2","unified":"^11.0.5","commander":"^14.0.1","pino-pretty":"^13.1.1","@nestjs/core":"^11.1.6","remark-parse":"^11.0.0","@nestjs/common":"^11.1.6","@nestjs/config":"^4.0.2","@rekog/mcp-nest":"^1.8.3","update-notifier":"^7.3.1","reflect-metadata":"^0.2.2","unist-util-visit":"^5.0.0","@nestjs/platform-express":"^11.1.6","@modelcontextprotocol/sdk":"^1.18.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.1.3","husky":"^9.1.7","eslint":"^9.36.0","globals":"^16.4.0","ts-jest":"^29.4.4","ts-node":"^10.9.2","prettier":"^3.6.2","supertest":"^7.1.4","ts-loader":"^9.5.4","@eslint/js":"^9.36.0","typescript":"^5.9.2","@nestjs/cli":"^11.0.10","@types/jest":"^30.0.0","@types/node":"^24.6.2","@types/express":"^5.0.3","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.6","@eslint/eslintrc":"^3.3.1","@types/supertest":"^6.0.3","typescript-eslint":"^8.44.1","@anthropic-ai/mcpb":"^1.1.1","@nestjs/schematics":"^11.0.7","source-map-support":"^0.5.21","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@modelcontextprotocol/inspector":"^0.17.0"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.8.0_1762793923500_0.8517439517146204","host":"s3://npm-registry-packages-npm-production"}},"0.8.2":{"name":"@ankimcp/anki-mcp-server","version":"0.8.2","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"AGPL-3.0-or-later","_id":"@ankimcp/anki-mcp-server@0.8.2","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"f7f3792995131fab8958cf06d76beb08e82a1114","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.8.2.tgz","fileCount":171,"integrity":"sha512-PUkPrkmMl+rYmyZvn319dQRSLpbcsxmof0AhnQnGHHoJpthBPassrV/vWaQEucOaIFRRxwyb+sItUpllhdFO3Q==","signatures":[{"sig":"MEQCIGrc/vsNy7kWhML0uGUZ3KqUjaJSy8t3r2NLvjKewWPFAiA3/pxnTBqItFnoQPV+xvzsPToWU2c65J+hlKoxys1K3A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":684827},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20"},"gitHead":"3d44e87da5804e82fe48b17bbd84dd02af7ff2df","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","test:cov":"jest --coverage","test:unit":"jest --testPathPattern='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"$npm_package_name-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","install:local":"npm install -g ./@ankimcp-anki-mcp-server-*.tgz","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"anatoly314","email":"anatolyt@gmail.com"},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"20.19.5","dependencies":{"ky":"^1.11.0","zod":"^3.25.76","pino":"^10.0.0","rxjs":"^7.8.2","unified":"^11.0.5","commander":"^14.0.1","pino-pretty":"^13.1.1","@nestjs/core":"^11.1.6","remark-parse":"^11.0.0","@nestjs/common":"^11.1.6","@nestjs/config":"^4.0.2","@rekog/mcp-nest":"^1.8.3","update-notifier":"^7.3.1","reflect-metadata":"^0.2.2","unist-util-visit":"^5.0.0","@nestjs/platform-express":"^11.1.6","@modelcontextprotocol/sdk":"^1.18.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.1.3","husky":"^9.1.7","eslint":"^9.36.0","globals":"^16.4.0","ts-jest":"^29.4.4","ts-node":"^10.9.2","prettier":"^3.6.2","supertest":"^7.1.4","ts-loader":"^9.5.4","@eslint/js":"^9.36.0","typescript":"^5.9.2","@nestjs/cli":"^11.0.10","@types/jest":"^30.0.0","@types/node":"^24.6.2","@types/express":"^5.0.3","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.6","@eslint/eslintrc":"^3.3.1","@types/supertest":"^6.0.3","typescript-eslint":"^8.44.1","@anthropic-ai/mcpb":"^1.1.1","@nestjs/schematics":"^11.0.7","source-map-support":"^0.5.21","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@modelcontextprotocol/inspector":"^0.17.0"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.8.2_1762797683039_0.8847297179541103","host":"s3://npm-registry-packages-npm-production"}},"0.8.3":{"name":"@ankimcp/anki-mcp-server","version":"0.8.3","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"AGPL-3.0-or-later","_id":"@ankimcp/anki-mcp-server@0.8.3","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"09cb3ece08000712c6034d71361de1d765e3ac58","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.8.3.tgz","fileCount":171,"integrity":"sha512-qWvNPvsLFLHQdL6S8PsMYjK6sJwN2SO/YS7qVV8hPmOuVkM0xhnuGEQU+yY154VleueTxlp+ymtTDsIXFyn9qw==","signatures":[{"sig":"MEUCIQCbmnoMX6EAJDGF7UiBV5LLbDApRJtyQbM6JBtSSVip2QIgdJct5Hi+s4TjxMhk1ElKwhaIsbhGofMuQV0ZWANaezY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":684672},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20"},"gitHead":"b05675d14421b481cbb5df92f702e47692b2c07a","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","test:cov":"jest --coverage","test:unit":"jest --testPathPattern='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","install:local":"npm install -g ./@ankimcp-anki-mcp-server-*.tgz","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"anatoly314","email":"anatolyt@gmail.com"},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"20.19.5","dependencies":{"ky":"^1.11.0","zod":"^3.25.76","pino":"^10.0.0","rxjs":"^7.8.2","unified":"^11.0.5","commander":"^14.0.1","pino-pretty":"^13.1.1","@nestjs/core":"^11.1.6","remark-parse":"^11.0.0","@nestjs/common":"^11.1.6","@nestjs/config":"^4.0.2","@rekog/mcp-nest":"^1.8.3","update-notifier":"^7.3.1","reflect-metadata":"^0.2.2","unist-util-visit":"^5.0.0","@nestjs/platform-express":"^11.1.6","@modelcontextprotocol/sdk":"^1.18.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.1.3","husky":"^9.1.7","eslint":"^9.36.0","globals":"^16.4.0","ts-jest":"^29.4.4","ts-node":"^10.9.2","prettier":"^3.6.2","supertest":"^7.1.4","ts-loader":"^9.5.4","@eslint/js":"^9.36.0","typescript":"^5.9.2","@nestjs/cli":"^11.0.10","@types/jest":"^30.0.0","@types/node":"^24.6.2","@types/express":"^5.0.3","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.6","@eslint/eslintrc":"^3.3.1","@types/supertest":"^6.0.3","typescript-eslint":"^8.44.1","@anthropic-ai/mcpb":"^1.1.1","@nestjs/schematics":"^11.0.7","source-map-support":"^0.5.21","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@modelcontextprotocol/inspector":"^0.17.0"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.8.3_1762800336491_0.8555810888970643","host":"s3://npm-registry-packages-npm-production"}},"0.8.4":{"name":"@ankimcp/anki-mcp-server","version":"0.8.4","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"AGPL-3.0-or-later","_id":"@ankimcp/anki-mcp-server@0.8.4","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"74c8159e73df03b648b14c5293051a0856dd5c2d","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.8.4.tgz","fileCount":171,"integrity":"sha512-gfjWlaaXZK2iDeswj17x8RiBdbVjxP3DE+VJ0SVhAeXWybuO61h0CDdeMJU7yc2z9OJbfMrBJpg5HDpGgVL2hA==","signatures":[{"sig":"MEYCIQCkrLeVjgQQV1PAugQvJvQgXBRp7Ea6gpJS9Nc3E8UuFAIhANoD5VIeL1NlPwUtmQn9ItG0Kbq5T7+WjaNRZd7IqSdo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":686258},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20"},"gitHead":"ff642135372686ae790035c1f622cc30527f233b","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","test:cov":"jest --coverage","test:unit":"jest --testPathPattern='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"anatoly314","email":"anatolyt@gmail.com"},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"20.19.5","dependencies":{"ky":"^1.11.0","zod":"^3.25.76","pino":"^10.0.0","rxjs":"^7.8.2","unified":"^11.0.5","commander":"^14.0.1","pino-pretty":"^13.1.1","@nestjs/core":"^11.1.6","remark-parse":"^11.0.0","@nestjs/common":"^11.1.6","@nestjs/config":"^4.0.2","@rekog/mcp-nest":"^1.8.3","update-notifier":"^7.3.1","reflect-metadata":"^0.2.2","unist-util-visit":"^5.0.0","@nestjs/platform-express":"^11.1.6","@modelcontextprotocol/sdk":"^1.18.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.1.3","husky":"^9.1.7","eslint":"^9.36.0","globals":"^16.4.0","ts-jest":"^29.4.4","ts-node":"^10.9.2","prettier":"^3.6.2","supertest":"^7.1.4","ts-loader":"^9.5.4","@eslint/js":"^9.36.0","typescript":"^5.9.2","@nestjs/cli":"^11.0.10","@types/jest":"^30.0.0","@types/node":"^24.6.2","@types/express":"^5.0.3","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.6","@eslint/eslintrc":"^3.3.1","@types/supertest":"^6.0.3","typescript-eslint":"^8.44.1","@anthropic-ai/mcpb":"^1.1.1","@nestjs/schematics":"^11.0.7","source-map-support":"^0.5.21","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@modelcontextprotocol/inspector":"^0.17.0"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.8.4_1763493752979_0.7199710271620285","host":"s3://npm-registry-packages-npm-production"}},"0.8.5":{"name":"@ankimcp/anki-mcp-server","version":"0.8.5","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"AGPL-3.0-or-later","_id":"@ankimcp/anki-mcp-server@0.8.5","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"d3fd7f3a6d69eb5773614b70289f066b4b68f289","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.8.5.tgz","fileCount":171,"integrity":"sha512-3m3uBw2+haSeME+e7ngeUfqfoRrct38JGdMHmyVKU+kKgg10kL/fBJvwQzmCWVCMnCZFrnLhdnMD6SgUCS492A==","signatures":[{"sig":"MEQCIBY8/bey+E4YGhTkho/v/pT/Vexzb//llvpOie4LROG1AiAUqebW5v2SWt4nD5vsn26pB5FK3kbxW0fRQxDgFCBiiQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":690065},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20"},"gitHead":"21f4a863f5c67361b8d5a6d8f225a92574b16151","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","test:cov":"jest --coverage","test:unit":"jest --testPathPattern='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\" && mcpb clean \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"anatoly314","email":"anatolyt@gmail.com"},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"20.19.5","dependencies":{"ky":"^1.11.0","zod":"^3.25.76","pino":"^10.0.0","rxjs":"^7.8.2","unified":"^11.0.5","passport":"^0.7.0","commander":"^14.0.1","@nestjs/jwt":"^11.0.1","pino-pretty":"^13.1.1","@nestjs/core":"^11.1.6","jsonwebtoken":"^9.0.2","passport-jwt":"^4.0.1","remark-parse":"^11.0.0","@nestjs/common":"^11.1.6","@nestjs/config":"^4.0.2","@rekog/mcp-nest":"^1.8.3","update-notifier":"^7.3.1","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","unist-util-visit":"^5.0.0","zod-to-json-schema":"^3.25.0","@nestjs/platform-express":"^11.1.6","@modelcontextprotocol/sdk":"^1.18.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.1.3","husky":"^9.1.7","eslint":"^9.36.0","globals":"^16.4.0","ts-jest":"^29.4.4","ts-node":"^10.9.2","prettier":"^3.6.2","supertest":"^7.1.4","ts-loader":"^9.5.4","@eslint/js":"^9.36.0","typescript":"^5.9.2","@nestjs/cli":"^11.0.10","@types/jest":"^30.0.0","@types/node":"^24.6.2","@types/mdast":"^4.0.4","@types/express":"^5.0.3","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.6","@eslint/eslintrc":"^3.3.1","@types/supertest":"^6.0.3","typescript-eslint":"^8.44.1","@anthropic-ai/mcpb":"^1.1.1","@nestjs/schematics":"^11.0.7","source-map-support":"^0.5.21","@types/jsonwebtoken":"^9.0.10","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@modelcontextprotocol/inspector":"^0.17.0"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.8.5_1764186607663_0.5675258378184995","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@ankimcp/anki-mcp-server","version":"0.9.0","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"AGPL-3.0-or-later","_id":"@ankimcp/anki-mcp-server@0.9.0","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"a78cbcf9794a0a7b88e2b0b91722353a0d411176","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.9.0.tgz","fileCount":174,"integrity":"sha512-h3KK844C/fJ2VcrEW6z6mnuJPDmxStULynCwwj4NrXYv0AIdIufFpRjJhfvTlEUBOz4AVvGXa9hkF5eRpFD75Q==","signatures":[{"sig":"MEYCIQDRiLQawf7sKbcA+8es0G8cOvUAqUtEzRVuZU+MKOSFagIhAMFw1hDlG4ORaeomDsS5zc9Cr/COTlJkV0Vk0sn2UguT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":702335},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20"},"gitHead":"e858bff008ba71bfb9d48b6114510b270d866410","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","test:cov":"jest --coverage","test:unit":"jest --testPathPattern='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\" && mcpb clean \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"anatoly314","email":"anatolyt@gmail.com"},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"20.19.6","dependencies":{"ky":"^1.11.0","zod":"^3.25.76","pino":"^10.0.0","rxjs":"^7.8.2","unified":"^11.0.5","passport":"^0.7.0","commander":"^14.0.1","@nestjs/jwt":"^11.0.1","pino-pretty":"^13.1.1","@nestjs/core":"^11.1.6","jsonwebtoken":"^9.0.2","passport-jwt":"^4.0.1","remark-parse":"^11.0.0","@nestjs/common":"^11.1.6","@nestjs/config":"^4.0.2","@rekog/mcp-nest":"^1.8.3","update-notifier":"^7.3.1","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","unist-util-visit":"^5.0.0","zod-to-json-schema":"^3.25.0","@nestjs/platform-express":"^11.1.6","@modelcontextprotocol/sdk":"^1.18.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.1.3","husky":"^9.1.7","eslint":"^9.36.0","globals":"^16.4.0","ts-jest":"^29.4.4","ts-node":"^10.9.2","prettier":"^3.6.2","supertest":"^7.1.4","ts-loader":"^9.5.4","@eslint/js":"^9.36.0","typescript":"^5.9.2","@nestjs/cli":"^11.0.10","@types/jest":"^30.0.0","@types/node":"^24.6.2","@types/mdast":"^4.0.4","@types/express":"^5.0.3","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.6","@eslint/eslintrc":"^3.3.1","@types/supertest":"^6.0.3","typescript-eslint":"^8.44.1","@anthropic-ai/mcpb":"^1.1.1","@nestjs/schematics":"^11.0.7","source-map-support":"^0.5.21","@types/jsonwebtoken":"^9.0.10","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@modelcontextprotocol/inspector":"^0.17.0"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.9.0_1765743671699_0.22985627856038415","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@ankimcp/anki-mcp-server","version":"0.10.0","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"AGPL-3.0-or-later","_id":"@ankimcp/anki-mcp-server@0.10.0","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"1588ba41e8ee2cdba507572bc4248ddcc65018dc","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.10.0.tgz","fileCount":177,"integrity":"sha512-KxKh+oC4FCTZEppI6sCLY65iuGDu5pkUCrd2CRoYmGzpN+oA/4IZ+HpUxpLHaBsbIsfk7fatkJcUs9j43YFPlw==","signatures":[{"sig":"MEUCIQDcdKs/nxdA8Pvpe/pw/DPu+9GLMP1bPF3+aGvrMzACTAIgcCjpIAztT8yGs4MwxYIDvOrHDbwvdA0+XdCvXafXOyM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":775912},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20"},"gitHead":"d8f9a2d692e82720fdbb2691de72917243099d72","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","e2e:up":"cd .docker && docker compose up -d","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","e2e:down":"cd .docker && docker compose down","e2e:logs":"cd .docker && docker compose logs -f","e2e:test":"jest --config test/e2e/jest-e2e.config.js","test:cov":"jest --coverage","test:unit":"jest --testPathPatterns='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\" && mcpb clean \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","e2e:test:http":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='http\\.e2e-spec'","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","e2e:full:local":"./scripts/e2e-full.sh","e2e:test:stdio":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='stdio\\.e2e-spec'","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"anatoly314","email":"anatolyt@gmail.com"},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"20.19.6","dependencies":{"ky":"^1.14.2","zod":"^4.3.5","pino":"^10.1.1","rxjs":"^7.8.2","unified":"^11.0.5","passport":"^0.7.0","commander":"^14.0.1","@nestjs/jwt":"^11.0.2","pino-pretty":"^13.1.3","@nestjs/core":"^11.1.11","jsonwebtoken":"^9.0.3","passport-jwt":"^4.0.1","remark-parse":"^11.0.0","@nestjs/common":"^11.1.11","@nestjs/config":"^4.0.2","@rekog/mcp-nest":"^1.9.2","update-notifier":"^7.3.1","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","unist-util-visit":"^5.0.0","zod-to-json-schema":"^3.25.1","@nestjs/platform-express":"^11.1.11","@modelcontextprotocol/sdk":"^1.25.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.1.3","husky":"^9.1.7","eslint":"^9.39.2","globals":"^17.0.0","ts-jest":"^29.4.6","ts-node":"^10.9.2","prettier":"^3.7.4","supertest":"^7.2.2","ts-loader":"^9.5.4","@eslint/js":"^9.39.2","typescript":"^5.9.2","@nestjs/cli":"^11.0.14","@types/jest":"^30.0.0","@types/node":"^25.0.6","@types/mdast":"^4.0.4","@types/express":"^5.0.6","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.11","@eslint/eslintrc":"^3.3.3","@types/supertest":"^6.0.3","typescript-eslint":"^8.53.0","@anthropic-ai/mcpb":"^2.1.2","@nestjs/schematics":"^11.0.7","source-map-support":"^0.5.21","@types/jsonwebtoken":"^9.0.10","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@modelcontextprotocol/inspector":"^0.18.0"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.10.0_1768288520399_0.40580783755842464","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@ankimcp/anki-mcp-server","version":"0.11.0","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"AGPL-3.0-or-later","_id":"@ankimcp/anki-mcp-server@0.11.0","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"1fe6e9fc20e8fad83519afeaf20c4774018659a0","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.11.0.tgz","fileCount":195,"integrity":"sha512-HaOwfKOkpqcPiY+QtGsB75klPObg8cXRjEDyKwj2278pb3L6HyIH5iPGLbaGnMCO6hDhRt9TNAsEBIUXwZ5yYQ==","signatures":[{"sig":"MEUCIQDm4a32oyjMoevZdcpLq3jKEa4ryz5OWk+R5mHpqRdFuwIgBuB1B04fsQ8A+TG1vIF4CcwLUaab8wbtdwZEfmznsig=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":801753},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20"},"gitHead":"975947f8d4b855dd0d6ecb448b2dac31cb0bbba0","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","e2e:up":"cd .docker && docker compose up -d","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","e2e:down":"cd .docker && docker compose down","e2e:logs":"cd .docker && docker compose logs -f","e2e:test":"jest --config test/e2e/jest-e2e.config.js","test:cov":"jest --coverage","test:unit":"jest --testPathPatterns='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\" && mcpb clean \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","e2e:test:http":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='http\\.e2e-spec'","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","e2e:full:local":"./scripts/e2e-full.sh","e2e:test:stdio":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='stdio\\.e2e-spec'","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"anatoly314","email":"anatolyt@gmail.com"},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"20.19.6","dependencies":{"ky":"^1.14.2","zod":"^4.3.5","pino":"^10.1.1","rxjs":"^7.8.2","unified":"^11.0.5","passport":"^0.7.0","commander":"^14.0.1","@nestjs/jwt":"^11.0.2","pino-pretty":"^13.1.3","@nestjs/core":"^11.1.11","jsonwebtoken":"^9.0.3","passport-jwt":"^4.0.1","remark-parse":"^11.0.0","@nestjs/common":"^11.1.11","@nestjs/config":"^4.0.2","@rekog/mcp-nest":"^1.9.2","update-notifier":"^7.3.1","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","unist-util-visit":"^5.0.0","zod-to-json-schema":"^3.25.1","@nestjs/platform-express":"^11.1.11","@modelcontextprotocol/sdk":"^1.25.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.1.3","husky":"^9.1.7","eslint":"^9.39.2","globals":"^17.0.0","ts-jest":"^29.4.6","ts-node":"^10.9.2","prettier":"^3.7.4","supertest":"^7.2.2","ts-loader":"^9.5.4","@eslint/js":"^9.39.2","typescript":"^5.9.2","@nestjs/cli":"^11.0.14","@types/jest":"^30.0.0","@types/node":"^25.0.6","@types/mdast":"^4.0.4","@types/express":"^5.0.6","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.11","@eslint/eslintrc":"^3.3.3","@types/supertest":"^6.0.3","typescript-eslint":"^8.53.0","@anthropic-ai/mcpb":"^2.1.2","@nestjs/schematics":"^11.0.7","source-map-support":"^0.5.21","@types/jsonwebtoken":"^9.0.10","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@modelcontextprotocol/inspector":"^0.18.0"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.11.0_1768332530817_0.022408273431654857","host":"s3://npm-registry-packages-npm-production"}},"0.12.1-beta.1":{"name":"@ankimcp/anki-mcp-server","version":"0.12.1-beta.1","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"AGPL-3.0-or-later","_id":"@ankimcp/anki-mcp-server@0.12.1-beta.1","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"5c16e198d2a7e8a1356c69a3d5d7f9b18af836d0","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.12.1-beta.1.tgz","fileCount":225,"integrity":"sha512-wwzGZ4qAltxWB3pJykErW3XdtnOEqB/yA+Ex+IRf5GdAJS7TUb51IXG64dpgBSS8KS30xK7Bq/2LB56L+gu66A==","signatures":[{"sig":"MEUCIF/kIiq2zWIda7ug27vor83MmSL49shZfDDD0yh4sxvcAiEA96mastatJa7LGWzwoBMIBPC4aXWym+UCvWhdrH09Ef8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":878432},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20"},"gitHead":"a5ef948b7b1bd8a4798f97ebc6d6a74373f4604c","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","e2e:up":"cd .docker && docker compose up -d","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","e2e:down":"cd .docker && docker compose down","e2e:logs":"cd .docker && docker compose logs -f","e2e:test":"jest --config test/e2e/jest-e2e.config.js","test:cov":"jest --coverage","test:unit":"jest --testPathPatterns='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\" && mcpb clean \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","e2e:test:http":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='http\\.e2e-spec'","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","e2e:full:local":"./scripts/e2e-full.sh","e2e:test:stdio":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='stdio\\.e2e-spec'","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"anatoly314","email":"anatolyt@gmail.com"},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"20.19.6","dependencies":{"ky":"^1.14.2","zod":"^4.3.5","pino":"^10.1.1","rxjs":"^7.8.2","unified":"^11.0.5","passport":"^0.7.0","commander":"^14.0.1","@nestjs/jwt":"^11.0.2","pino-pretty":"^13.1.3","@nestjs/core":"^11.1.11","jsonwebtoken":"^9.0.3","passport-jwt":"^4.0.1","remark-parse":"^11.0.0","@nestjs/common":"^11.1.11","@nestjs/config":"^4.0.2","@rekog/mcp-nest":"^1.9.2","update-notifier":"^7.3.1","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","unist-util-visit":"^5.0.0","zod-to-json-schema":"^3.25.1","@nestjs/platform-express":"^11.1.11","@modelcontextprotocol/sdk":"^1.25.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^30.1.3","husky":"^9.1.7","eslint":"^9.39.2","globals":"^17.0.0","ts-jest":"^29.4.6","ts-node":"^10.9.2","prettier":"^3.7.4","supertest":"^7.2.2","ts-loader":"^9.5.4","@eslint/js":"^9.39.2","typescript":"^5.9.2","@nestjs/cli":"^11.0.14","@types/jest":"^30.0.0","@types/node":"^25.0.6","@types/mdast":"^4.0.4","@types/express":"^5.0.6","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.11","@eslint/eslintrc":"^3.3.3","@types/supertest":"^6.0.3","typescript-eslint":"^8.53.0","@anthropic-ai/mcpb":"^2.1.2","@nestjs/schematics":"^11.0.7","source-map-support":"^0.5.21","@types/jsonwebtoken":"^9.0.10","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@modelcontextprotocol/inspector":"^0.18.0"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.12.1-beta.1_1768476487402_0.16232398396044379","host":"s3://npm-registry-packages-npm-production"}},"0.12.1":{"name":"@ankimcp/anki-mcp-server","version":"0.12.1","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"AGPL-3.0-or-later","_id":"@ankimcp/anki-mcp-server@0.12.1","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"473082d1dadaaa293f1cbda9e5fdab45f318b5c7","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.12.1.tgz","fileCount":225,"integrity":"sha512-YLa86RUDW217dJU/RORC79jsyCySeSk+bODUVk7StwFnVxXYp28euxTu55XLf7bf3jz1Tjqm6DhfploPvcvFqA==","signatures":[{"sig":"MEQCID0HN+R4VuWF2X6Gu4pUuRKwplfOl1HFR9872ccudvj0AiB99E2X9vRcc/sRSEuG6q90d+YmQgGSFenhdJ9bBrj5Rg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":878912},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20.19.0"},"gitHead":"d0de65e52319495ddad95068c5fc06e086107061","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","e2e:up":"cd .docker && docker compose up -d","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","e2e:down":"cd .docker && docker compose down","e2e:logs":"cd .docker && docker compose logs -f","e2e:test":"jest --config test/e2e/jest-e2e.config.js","test:cov":"jest --coverage","test:unit":"jest --testPathPatterns='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\" && mcpb clean \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","e2e:test:http":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='http\\.e2e-spec'","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","e2e:full:local":"./scripts/e2e-full.sh","e2e:test:stdio":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='stdio\\.e2e-spec'","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"anatoly314","email":"anatolyt@gmail.com"},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"20.19.6","dependencies":{"ky":"^1.14.2","zod":"^4.3.5","pino":"^10.1.1","rxjs":"^7.8.2","unified":"^11.0.5","passport":"^0.7.0","commander":"^14.0.1","@nestjs/jwt":"^11.0.2","pino-pretty":"^13.1.3","@nestjs/core":"^11.1.11","jsonwebtoken":"^9.0.3","passport-jwt":"^4.0.1","remark-parse":"^11.0.0","@nestjs/common":"^11.1.11","@nestjs/config":"^4.0.2","@rekog/mcp-nest":"^1.9.2","update-notifier":"^7.3.1","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","unist-util-visit":"^5.0.0","zod-to-json-schema":"^3.25.1","@nestjs/platform-express":"^11.1.11","@modelcontextprotocol/sdk":"^1.25.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.1.3","husky":"^9.1.7","eslint":"^9.39.2","globals":"^17.0.0","ts-jest":"^29.4.6","ts-node":"^10.9.2","prettier":"^3.7.4","supertest":"^7.2.2","ts-loader":"^9.5.4","@eslint/js":"^9.39.2","typescript":"^5.9.2","@nestjs/cli":"^11.0.14","@types/jest":"^30.0.0","@types/node":"^25.0.6","@types/mdast":"^4.0.4","@types/express":"^5.0.6","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.11","@eslint/eslintrc":"^3.3.3","@types/supertest":"^6.0.3","typescript-eslint":"^8.53.0","@anthropic-ai/mcpb":"^2.1.2","@nestjs/schematics":"^11.0.7","source-map-support":"^0.5.21","@types/jsonwebtoken":"^9.0.10","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@modelcontextprotocol/inspector":"^0.18.0"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.12.1_1769079036559_0.7580414822065582","host":"s3://npm-registry-packages-npm-production"}},"0.13.0-tunnel.1":{"name":"@ankimcp/anki-mcp-server","version":"0.13.0-tunnel.1","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"AGPL-3.0-or-later","_id":"@ankimcp/anki-mcp-server@0.13.0-tunnel.1","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"04b09870afc493e483bd9aeea630d9810e1fefb6","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.13.0-tunnel.1.tgz","fileCount":282,"integrity":"sha512-0uKvLne26Z0eNnsB+wuvRKpHJ4GfVJqI/I3dlkXZOMnT4hc6oD1fxlYVBTtNmUTsgji6iTPO7Ql8G5Ym3epXHA==","signatures":[{"sig":"MEQCIAP6xgbw1oqhELBuyYs1KWSyd6yhMcxvGtxqOIzJBvDAAiAaitn3ptMIBXByOF9K28v6uMdpKp65CJtbjSkpyEroSw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1021769},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20.19.0"},"gitHead":"54314ccde9e768cbf6b153caf958a14b63a6bc71","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","e2e:up":"cd .docker && docker compose up -d","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","e2e:down":"cd .docker && docker compose down","e2e:logs":"cd .docker && docker compose logs -f","e2e:test":"jest --config test/e2e/jest-e2e.config.js","test:cov":"jest --coverage","test:unit":"jest --testPathPatterns='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\" && mcpb clean \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","e2e:test:http":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='http\\.e2e-spec'","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","e2e:full:local":"./scripts/e2e-full.sh","e2e:test:stdio":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='stdio\\.e2e-spec'","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:dev:tunnel":"nest start --watch --entryFile main-tunnel -- --tunnel --debug","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"anatoly314","email":"anatolyt@gmail.com"},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ky":"^1.14.2","ws":"^8.18.3","zod":"^4.3.5","pino":"^10.1.1","rxjs":"^7.8.2","unified":"^11.0.5","passport":"^0.7.0","commander":"^14.0.1","@nestjs/jwt":"^11.0.2","pino-pretty":"^13.1.3","@nestjs/core":"^11.1.11","jsonwebtoken":"^9.0.3","passport-jwt":"^4.0.1","remark-parse":"^11.0.0","@nestjs/common":"^11.1.11","@nestjs/config":"^4.0.2","@rekog/mcp-nest":"^1.9.2","update-notifier":"^7.3.1","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","unist-util-visit":"^5.0.0","zod-to-json-schema":"^3.25.1","@nestjs/platform-express":"^11.1.11","@modelcontextprotocol/sdk":"^1.25.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^30.1.3","husky":"^9.1.7","eslint":"^9.39.2","globals":"^17.0.0","ts-jest":"^29.4.6","ts-node":"^10.9.2","prettier":"^3.7.4","@types/ws":"^8.18.1","supertest":"^7.2.2","ts-loader":"^9.5.4","@eslint/js":"^9.39.2","typescript":"^5.9.2","@nestjs/cli":"^11.0.14","@types/jest":"^30.0.0","@types/node":"^25.0.6","@types/mdast":"^4.0.4","@types/express":"^5.0.6","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.11","@eslint/eslintrc":"^3.3.3","@types/supertest":"^6.0.3","typescript-eslint":"^8.53.0","@anthropic-ai/mcpb":"^2.1.2","@nestjs/schematics":"^11.0.7","source-map-support":"^0.5.21","@types/jsonwebtoken":"^9.0.10","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@modelcontextprotocol/inspector":"^0.18.0"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.13.0-tunnel.1_1769703015034_0.059771818826178436","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@ankimcp/anki-mcp-server","version":"0.13.0","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"AGPL-3.0-or-later","_id":"@ankimcp/anki-mcp-server@0.13.0","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"dcd8ffe9ad8ac5fc32d57189b152a0bb7d31e121","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.13.0.tgz","fileCount":228,"integrity":"sha512-qefvwSyLG7b/A9bhYQXTYto0yeZC3TuiVfOdlvDyxxYgvjb72i5Bt+TJ7B+yoWJOP6fCHaCexgn3l0a6cqLGlQ==","signatures":[{"sig":"MEYCIQDUA59w5LW1Pf7JOKrF9GiTOMPfu+EI5hDY10iX46P17QIhAO2enAoIIVyncODzWeEYWJ36nOiM+a4jxU7f1xZb9r7/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":875208},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20.19.0 <21.0.0 || >=22.12.0"},"gitHead":"27bfa1e1e451897e875df35d1ab4e0aa8eb2d383","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","e2e:up":"cd .docker && docker compose up -d","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","e2e:down":"cd .docker && docker compose down","e2e:logs":"cd .docker && docker compose logs -f","e2e:test":"jest --config test/e2e/jest-e2e.config.js","test:cov":"jest --coverage","test:unit":"jest --testPathPatterns='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\" && mcpb clean \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","e2e:test:http":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='http\\.e2e-spec'","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","e2e:full:local":"./scripts/e2e-full.sh","e2e:test:stdio":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='stdio\\.e2e-spec'","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"anatoly314","email":"anatolyt@gmail.com"},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ky":"^1.14.3","zod":"^4.3.6","pino":"^10.3.0","rxjs":"^7.8.2","unified":"^11.0.5","passport":"^0.7.0","commander":"^14.0.3","@nestjs/jwt":"^11.0.2","pino-pretty":"^13.1.3","@nestjs/core":"^11.1.12","jsonwebtoken":"^9.0.3","passport-jwt":"^4.0.1","remark-parse":"^11.0.0","@nestjs/common":"^11.1.12","@nestjs/config":"^4.0.2","@rekog/mcp-nest":"^1.9.3","update-notifier":"^7.3.1","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","unist-util-visit":"^5.1.0","zod-to-json-schema":"^3.25.1","@nestjs/platform-express":"^11.1.12","@modelcontextprotocol/sdk":"^1.25.3"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","husky":"^9.1.7","eslint":"^9.39.2","globals":"^17.3.0","ts-jest":"^29.4.6","ts-node":"^10.9.2","prettier":"^3.8.1","supertest":"^7.2.2","ts-loader":"^9.5.4","@eslint/js":"^9.39.2","typescript":"^5.9.3","@nestjs/cli":"^11.0.16","@types/jest":"^30.0.0","@types/node":"^25.2.0","@types/mdast":"^4.0.4","@types/express":"^5.0.6","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.12","@eslint/eslintrc":"^3.3.3","@types/supertest":"^6.0.3","typescript-eslint":"^8.54.0","@anthropic-ai/mcpb":"^2.1.2","@nestjs/schematics":"^11.0.9","source-map-support":"^0.5.21","@types/jsonwebtoken":"^9.0.10","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@modelcontextprotocol/inspector":"^0.19.0"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.13.0_1770203102553_0.13833212626110325","host":"s3://npm-registry-packages-npm-production"}},"0.13.1":{"name":"@ankimcp/anki-mcp-server","version":"0.13.1","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"AGPL-3.0-or-later","_id":"@ankimcp/anki-mcp-server@0.13.1","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"4a0698ac209b910fd2c1b33fd633f0b6ad37aa76","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.13.1.tgz","fileCount":228,"integrity":"sha512-amL5tKyhFQxc0qFKBCUJ4XPLULOmQTGGamXSQ9JAgUKrZqbPedNDfeVf80mzkYQyatGB/FqofUjZFmG98z5WNg==","signatures":[{"sig":"MEYCIQCTOdfMNMxjY4jucCnK9cDok2qx58iVIEtDClP6Vpa9JwIhAIhmwFH5cXoGJX7r8ihcF5suujOlofRK7nsnxlbh3Lwa","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":876662},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20.19.0 <21.0.0 || >=22.12.0"},"gitHead":"0ca7ce8bc3557493924dd8060a330131b751c6ab","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","e2e:up":"cd .docker && docker compose up -d","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","e2e:down":"cd .docker && docker compose down","e2e:logs":"cd .docker && docker compose logs -f","e2e:test":"jest --config test/e2e/jest-e2e.config.js","test:cov":"jest --coverage","test:unit":"jest --testPathPatterns='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\" && mcpb clean \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","e2e:test:http":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='http\\.e2e-spec'","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","e2e:full:local":"./scripts/e2e-full.sh","e2e:test:stdio":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='stdio\\.e2e-spec'","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"anatoly314","email":"anatolyt@gmail.com"},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ky":"^1.14.3","zod":"^4.3.6","pino":"^10.3.0","rxjs":"^7.8.2","unified":"^11.0.5","passport":"^0.7.0","commander":"^14.0.3","@nestjs/jwt":"^11.0.2","pino-pretty":"^13.1.3","@nestjs/core":"^11.1.12","jsonwebtoken":"^9.0.3","passport-jwt":"^4.0.1","remark-parse":"^11.0.0","@nestjs/common":"^11.1.12","@nestjs/config":"^4.0.2","@rekog/mcp-nest":"^1.9.3","update-notifier":"^7.3.1","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","unist-util-visit":"^5.1.0","zod-to-json-schema":"^3.25.1","@nestjs/platform-express":"^11.1.12","@modelcontextprotocol/sdk":"^1.25.3"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","husky":"^9.1.7","eslint":"^9.39.2","globals":"^17.3.0","ts-jest":"^29.4.6","ts-node":"^10.9.2","prettier":"^3.8.1","supertest":"^7.2.2","ts-loader":"^9.5.4","@eslint/js":"^9.39.2","typescript":"^5.9.3","@nestjs/cli":"^11.0.16","@types/jest":"^30.0.0","@types/node":"^25.2.0","@types/mdast":"^4.0.4","@types/express":"^5.0.6","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.12","@eslint/eslintrc":"^3.3.3","@types/supertest":"^6.0.3","typescript-eslint":"^8.54.0","@anthropic-ai/mcpb":"^2.1.2","@nestjs/schematics":"^11.0.9","source-map-support":"^0.5.21","@types/jsonwebtoken":"^9.0.10","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@modelcontextprotocol/inspector":"^0.19.0"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.13.1_1770552839254_0.1803425589522154","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@ankimcp/anki-mcp-server","version":"0.14.0","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"AGPL-3.0-or-later","_id":"@ankimcp/anki-mcp-server@0.14.0","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"31403f4cbc73fe6054159159e6ad2b8e93b23b4b","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.14.0.tgz","fileCount":231,"integrity":"sha512-cFvWXNeuNMJc/ek1cHtZ9K51cFCfJelXIacIKfztvyphwAFxY/UEAhVSauPzu9cEUQLty7Cn0yEEKUgL8+s+ew==","signatures":[{"sig":"MEUCIQCKx+PY0ORF7HhaezwlfkFY29SR2dqd1lH1gyPqADLiuwIgQ6XtSy2eNVKI/IJHc+3z6O7TLGZ3hY7yzIdURVqO75I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":897941},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20.19.0 <21.0.0 || >=22.12.0"},"gitHead":"7dc916c97b2167a4c227379a4faf3716f497e234","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","e2e:up":"cd .docker && docker compose up -d","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","e2e:down":"cd .docker && docker compose down","e2e:logs":"cd .docker && docker compose logs -f","e2e:test":"jest --config test/e2e/jest-e2e.config.js","test:cov":"jest --coverage","test:unit":"jest --testPathPatterns='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\" && mcpb clean \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","e2e:test:http":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='http\\.e2e-spec'","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","e2e:full:local":"./scripts/e2e-full.sh","e2e:test:stdio":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='stdio\\.e2e-spec'","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","upgrade:interactive":"npx npm-check-updates -i","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"anatoly314","email":"anatolyt@gmail.com"},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ky":"^1.14.3","zod":"^4.3.6","pino":"^10.3.1","rxjs":"^7.8.2","unified":"^11.0.5","passport":"^0.7.0","commander":"^14.0.3","@nestjs/jwt":"^11.0.2","pino-pretty":"^13.1.3","@nestjs/core":"^11.1.13","jsonwebtoken":"^9.0.3","passport-jwt":"^4.0.1","remark-parse":"^11.0.0","@nestjs/common":"^11.1.13","@nestjs/config":"^4.0.3","@rekog/mcp-nest":"^1.9.3","update-notifier":"^7.3.1","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","unist-util-visit":"^5.1.0","zod-to-json-schema":"^3.25.1","@nestjs/platform-express":"^11.1.13","@modelcontextprotocol/sdk":"1.26.0"},"_hasShrinkwrap":false,"packageManager":"npm@11.10.0","devDependencies":{"jest":"^30.2.0","husky":"^9.1.7","eslint":"^10.0.0","globals":"^17.3.0","ts-jest":"^29.4.6","ts-node":"^10.9.2","prettier":"^3.8.1","supertest":"^7.2.2","ts-loader":"^9.5.4","@eslint/js":"^10.0.1","typescript":"^5.9.3","@nestjs/cli":"^11.0.16","@types/jest":"^30.0.0","@types/node":"^25.2.3","@types/mdast":"^4.0.4","@types/express":"^5.0.6","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.13","@eslint/eslintrc":"^3.3.3","@types/supertest":"^6.0.3","typescript-eslint":"^8.56.0","@anthropic-ai/mcpb":"^2.1.2","@nestjs/schematics":"^11.0.9","source-map-support":"^0.5.21","@types/jsonwebtoken":"^9.0.10","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@modelcontextprotocol/inspector":"^0.20.0"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.14.0_1771329440195_0.4146903844031071","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@ankimcp/anki-mcp-server","version":"0.15.0","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"AGPL-3.0-or-later","_id":"@ankimcp/anki-mcp-server@0.15.0","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"60df082ec4440ed99a9b86612393a40756f0dbcc","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.15.0.tgz","fileCount":231,"integrity":"sha512-N/NjU+hS3K5fQr+aPD/uybo1U/iKZxGUUvgYARXCOcCIExXe1bzOLm/I6i7AJ0/SrbNvOJBhHHWUog6oPbh9Qw==","signatures":[{"sig":"MEQCID+OShdgSMscp2kjBdpyRApeu8Y6/I79/YjrjPQm32U+AiBNjbzyTB8IahTw9sToZXV/IYAGr243EqFg0mUqsBUa1g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ankimcp%2fanki-mcp-server@0.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":942349},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20.19.0 <21.0.0 || >=22.12.0"},"gitHead":"9dec448e95a7f256a756557d43327a023bec6466","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","e2e:up":"cd .docker && docker compose up -d","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","e2e:down":"cd .docker && docker compose down","e2e:logs":"cd .docker && docker compose logs -f","e2e:test":"jest --config test/e2e/jest-e2e.config.js","test:cov":"jest --coverage","test:unit":"jest --testPathPatterns='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\" && mcpb clean \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","e2e:test:http":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='http\\.e2e-spec'","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","e2e:full:local":"./scripts/e2e-full.sh","e2e:test:stdio":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='stdio\\.e2e-spec'","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","upgrade:interactive":"npx npm-check-updates -i","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0afc1a9d-6517-4973-8757-69847b2a7af6"}},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"11.12.1","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"22.22.1","dependencies":{"ky":"^1.14.3","zod":"^4.3.6","pino":"^10.3.1","rxjs":"^7.8.2","unified":"^11.0.5","passport":"^0.7.0","commander":"^14.0.3","@nestjs/jwt":"^11.0.2","pino-pretty":"^13.1.3","@nestjs/core":"^11.1.17","jsonwebtoken":"^9.0.3","passport-jwt":"^4.0.1","remark-parse":"^11.0.0","@nestjs/common":"^11.1.17","@nestjs/config":"^4.0.3","@rekog/mcp-nest":"^1.9.8","update-notifier":"^7.3.1","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","unist-util-visit":"^5.1.0","zod-to-json-schema":"^3.25.2","@nestjs/platform-express":"^11.1.17","@modelcontextprotocol/sdk":"1.28.0"},"_hasShrinkwrap":false,"packageManager":"npm@11.12.1","devDependencies":{"jest":"^30.3.0","husky":"^9.1.7","eslint":"^10.1.0","globals":"^17.4.0","ts-jest":"^29.4.6","ts-node":"^10.9.2","prettier":"^3.8.1","supertest":"^7.2.2","ts-loader":"^9.5.4","@eslint/js":"^10.0.1","typescript":"^5.9.3","@nestjs/cli":"^11.0.16","@types/jest":"^30.0.0","@types/node":"^25.5.0","@types/mdast":"^4.0.4","@types/express":"^5.0.6","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.17","@eslint/eslintrc":"^3.3.5","@types/supertest":"^7.2.0","typescript-eslint":"^8.57.2","@anthropic-ai/mcpb":"^2.1.2","@nestjs/schematics":"^11.0.9","source-map-support":"^0.5.21","@types/jsonwebtoken":"^9.0.10","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.15.0_1774716415929_0.9645431239801721","host":"s3://npm-registry-packages-npm-production"}},"0.15.0-tunnel.1":{"name":"@ankimcp/anki-mcp-server","version":"0.15.0-tunnel.1","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"AGPL-3.0-or-later","_id":"@ankimcp/anki-mcp-server@0.15.0-tunnel.1","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"fea43cb30fa8618542e5ee22629dae2fc3cccf2a","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.15.0-tunnel.1.tgz","fileCount":288,"integrity":"sha512-/NDXXqZoeBwvvMVpUujVAUn7FfEhzFui5pwcy95OTe1aVdjrfZa2ZEhGw13smCKjx4xaHW+BLS+V2FKAPp7w8A==","signatures":[{"sig":"MEYCIQCmG3tAZ53Cu85Y6IWSHXolvLFim5qe6jcG1J3XSdCGhgIhAKc2LmQ8cvhQVwOFH520nH86JimfgHY6FizpdxTOil4C","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ankimcp%2fanki-mcp-server@0.15.0-tunnel.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1085955},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20.19.0 <21.0.0 || >=22.12.0"},"gitHead":"ddd4d26d20a39aaecdeffd85dc1bc3252d60468f","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","e2e:up":"cd .docker && docker compose up -d","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","e2e:down":"cd .docker && docker compose down","e2e:logs":"cd .docker && docker compose logs -f","e2e:test":"jest --config test/e2e/jest-e2e.config.js","test:cov":"jest --coverage","test:unit":"jest --testPathPatterns='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\" && mcpb clean \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","e2e:test:http":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='http\\.e2e-spec'","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","e2e:full:local":"./scripts/e2e-full.sh","e2e:test:stdio":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='stdio\\.e2e-spec'","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:dev:tunnel":"nest start --watch --entryFile main-tunnel -- --tunnel --debug","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","upgrade:interactive":"npx npm-check-updates -i","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0afc1a9d-6517-4973-8757-69847b2a7af6"}},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"11.12.1","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"22.22.1","dependencies":{"ky":"^1.14.3","ws":"^8.18.3","zod":"^4.3.6","pino":"^10.3.1","rxjs":"^7.8.2","unified":"^11.0.5","passport":"^0.7.0","commander":"^14.0.3","@nestjs/jwt":"^11.0.2","pino-pretty":"^13.1.3","@nestjs/core":"^11.1.17","jsonwebtoken":"^9.0.3","passport-jwt":"^4.0.1","remark-parse":"^11.0.0","@nestjs/common":"^11.1.17","@nestjs/config":"^4.0.3","@rekog/mcp-nest":"^1.9.8","update-notifier":"^7.3.1","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","unist-util-visit":"^5.1.0","zod-to-json-schema":"^3.25.2","@nestjs/platform-express":"^11.1.17","@modelcontextprotocol/sdk":"1.28.0"},"_hasShrinkwrap":false,"packageManager":"npm@11.12.1","readmeFilename":"README.md","devDependencies":{"jest":"^30.3.0","husky":"^9.1.7","eslint":"^10.1.0","globals":"^17.4.0","ts-jest":"^29.4.6","ts-node":"^10.9.2","prettier":"^3.8.1","@types/ws":"^8.18.1","supertest":"^7.2.2","ts-loader":"^9.5.4","@eslint/js":"^10.0.1","typescript":"^5.9.3","@nestjs/cli":"^11.0.16","@types/jest":"^30.0.0","@types/node":"^25.5.0","@types/mdast":"^4.0.4","@types/express":"^5.0.6","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.17","@eslint/eslintrc":"^3.3.5","@types/supertest":"^7.2.0","typescript-eslint":"^8.57.2","@anthropic-ai/mcpb":"^2.1.2","@nestjs/schematics":"^11.0.9","source-map-support":"^0.5.21","@types/jsonwebtoken":"^9.0.10","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.15.0-tunnel.1_1775122822646_0.44491395916893484","host":"s3://npm-registry-packages-npm-production"}},"0.15.0-tunnel.2":{"name":"@ankimcp/anki-mcp-server","version":"0.15.0-tunnel.2","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"AGPL-3.0-or-later","_id":"@ankimcp/anki-mcp-server@0.15.0-tunnel.2","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"1e609e2035b240a706487c75c782a227151704c7","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.15.0-tunnel.2.tgz","fileCount":288,"integrity":"sha512-p75d2QaBRsofdqjmvG0bWt2Hi8x0HADGSlSqHJbU295caZCiCzVbAlOuYGyx52BmhlPsH/rlw/f1Rm7cf6lp9A==","signatures":[{"sig":"MEUCIQCtePOMRdo9kG4slxRBdjQPOIQV4W++0HG1SO4XaRiq1AIgQQUMmaEhUviuNzBgp6IRGDP0Tr+49Up5RrwnyF4TUaQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ankimcp%2fanki-mcp-server@0.15.0-tunnel.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1087106},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20.19.0 <21.0.0 || >=22.12.0"},"gitHead":"edfafdd9e2c1363bd5df5e7e20b45b742d3beee5","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","e2e:up":"cd .docker && docker compose up -d","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","e2e:down":"cd .docker && docker compose down","e2e:logs":"cd .docker && docker compose logs -f","e2e:test":"jest --config test/e2e/jest-e2e.config.js","test:cov":"jest --coverage","test:unit":"jest --testPathPatterns='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\" && mcpb clean \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","e2e:test:http":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='http\\.e2e-spec'","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","e2e:full:local":"./scripts/e2e-full.sh","e2e:test:stdio":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='stdio\\.e2e-spec'","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:dev:tunnel":"nest start --watch --entryFile main-tunnel -- --tunnel --debug","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","upgrade:interactive":"npx npm-check-updates -i","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0afc1a9d-6517-4973-8757-69847b2a7af6"}},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"11.12.1","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ky":"^1.14.3","ws":"^8.18.3","zod":"^4.3.6","pino":"^10.3.1","rxjs":"^7.8.2","unified":"^11.0.5","passport":"^0.7.0","commander":"^14.0.3","@nestjs/jwt":"^11.0.2","pino-pretty":"^13.1.3","@nestjs/core":"^11.1.17","jsonwebtoken":"^9.0.3","passport-jwt":"^4.0.1","remark-parse":"^11.0.0","@nestjs/common":"^11.1.17","@nestjs/config":"^4.0.3","@rekog/mcp-nest":"^1.9.8","update-notifier":"^7.3.1","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","unist-util-visit":"^5.1.0","zod-to-json-schema":"^3.25.2","@nestjs/platform-express":"^11.1.17","@modelcontextprotocol/sdk":"1.28.0"},"_hasShrinkwrap":false,"packageManager":"npm@11.12.1","readmeFilename":"README.md","devDependencies":{"jest":"^30.3.0","husky":"^9.1.7","eslint":"^10.1.0","globals":"^17.4.0","ts-jest":"^29.4.6","ts-node":"^10.9.2","prettier":"^3.8.1","@types/ws":"^8.18.1","supertest":"^7.2.2","ts-loader":"^9.5.4","@eslint/js":"^10.0.1","typescript":"^5.9.3","@nestjs/cli":"^11.0.16","@types/jest":"^30.0.0","@types/node":"^25.5.0","@types/mdast":"^4.0.4","@types/express":"^5.0.6","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.17","@eslint/eslintrc":"^3.3.5","@types/supertest":"^7.2.0","typescript-eslint":"^8.57.2","@anthropic-ai/mcpb":"^2.1.2","@nestjs/schematics":"^11.0.9","source-map-support":"^0.5.21","@types/jsonwebtoken":"^9.0.10","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.15.0-tunnel.2_1775454918592_0.6256038278541454","host":"s3://npm-registry-packages-npm-production"}},"0.15.0-tunnel.3":{"name":"@ankimcp/anki-mcp-server","version":"0.15.0-tunnel.3","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"AGPL-3.0-or-later","_id":"@ankimcp/anki-mcp-server@0.15.0-tunnel.3","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"f7cd9f8a35e3e3eabe6c6a62022c1817cec31b50","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.15.0-tunnel.3.tgz","fileCount":288,"integrity":"sha512-PG8gRwmQg5xbQtmzbv05q/45AXkcuVhG2ZV0wELMYNnsReCGdb+TG+ZFWzaNM8iZxu7vGHj4cmZXIbtHvH+Iqw==","signatures":[{"sig":"MEYCIQD1BSyLOJAhIFgGkCN0HKFv3rRjbrIRfQRs8qQP6tRG7gIhAOCc3MZUmWeq5tK7Gkw617ToSp46z7QEN2o/RL84HL4j","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ankimcp%2fanki-mcp-server@0.15.0-tunnel.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1086946},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20.19.0 <21.0.0 || >=22.12.0"},"gitHead":"2d3f6b12e1396365fcffe66b677d4d913b9fee50","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","e2e:up":"cd .docker && docker compose up -d","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","e2e:down":"cd .docker && docker compose down","e2e:logs":"cd .docker && docker compose logs -f","e2e:test":"jest --config test/e2e/jest-e2e.config.js","test:cov":"jest --coverage","test:unit":"jest --testPathPatterns='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","install:npm":"npm install -g @ankimcp/anki-mcp-server@0.15.0-tunnel.2","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\" && mcpb clean \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","e2e:test:http":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='http\\.e2e-spec'","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","e2e:full:local":"./scripts/e2e-full.sh","e2e:test:stdio":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='stdio\\.e2e-spec'","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:dev:tunnel":"nest start --watch --entryFile main-tunnel -- --tunnel --debug","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","upgrade:interactive":"npx npm-check-updates -i","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0afc1a9d-6517-4973-8757-69847b2a7af6"}},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"11.12.1","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ky":"^1.14.3","ws":"^8.18.3","zod":"^4.3.6","pino":"^10.3.1","rxjs":"^7.8.2","unified":"^11.0.5","passport":"^0.7.0","commander":"^14.0.3","@nestjs/jwt":"^11.0.2","pino-pretty":"^13.1.3","@nestjs/core":"^11.1.17","jsonwebtoken":"^9.0.3","passport-jwt":"^4.0.1","remark-parse":"^11.0.0","@nestjs/common":"^11.1.17","@nestjs/config":"^4.0.3","@rekog/mcp-nest":"^1.9.8","update-notifier":"^7.3.1","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","unist-util-visit":"^5.1.0","zod-to-json-schema":"^3.25.2","@nestjs/platform-express":"^11.1.17","@modelcontextprotocol/sdk":"1.28.0"},"_hasShrinkwrap":false,"packageManager":"npm@11.12.1","readmeFilename":"README.md","devDependencies":{"jest":"^30.3.0","husky":"^9.1.7","eslint":"^10.1.0","globals":"^17.4.0","ts-jest":"^29.4.6","ts-node":"^10.9.2","prettier":"^3.8.1","@types/ws":"^8.18.1","supertest":"^7.2.2","ts-loader":"^9.5.4","@eslint/js":"^10.0.1","typescript":"^5.9.3","@nestjs/cli":"^11.0.16","@types/jest":"^30.0.0","@types/node":"^25.5.0","@types/mdast":"^4.0.4","@types/express":"^5.0.6","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.17","@eslint/eslintrc":"^3.3.5","@types/supertest":"^7.2.0","typescript-eslint":"^8.57.2","@anthropic-ai/mcpb":"^2.1.2","@nestjs/schematics":"^11.0.9","source-map-support":"^0.5.21","@types/jsonwebtoken":"^9.0.10","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.15.0-tunnel.3_1775483074721_0.06000236269308279","host":"s3://npm-registry-packages-npm-production"}},"0.15.0-tunnel.4":{"name":"@ankimcp/anki-mcp-server","version":"0.15.0-tunnel.4","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"AGPL-3.0-or-later","_id":"@ankimcp/anki-mcp-server@0.15.0-tunnel.4","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"b923735fac063c1e4caf858d4602422784d324ba","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.15.0-tunnel.4.tgz","fileCount":288,"integrity":"sha512-Is5QsHLBoU8rTjliKchq0skhOOnU4A24jAt44nHFdOJI10Ds+Wem1tQElo0mswqrlxMXFSABDe9Uppz2tD18GQ==","signatures":[{"sig":"MEUCICRCHB0/4F7DQ72oE4aPc/kCKzXh7nEDw83vsVH0SrHIAiEAj8lXvJ603UspXcKDJXMZIOPLO3k/tWjrvMBknnlu/lE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ankimcp%2fanki-mcp-server@0.15.0-tunnel.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1086622},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20.19.0 <21.0.0 || >=22.12.0"},"gitHead":"37aba43cbbf1a643650eadacd30bcd93b9dec843","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","e2e:up":"cd .docker && docker compose up -d","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","e2e:down":"cd .docker && docker compose down","e2e:logs":"cd .docker && docker compose logs -f","e2e:test":"jest --config test/e2e/jest-e2e.config.js","test:cov":"jest --coverage","test:unit":"jest --testPathPatterns='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","install:npm":"npm install -g @ankimcp/anki-mcp-server@0.15.0-tunnel.2","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\" && mcpb clean \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","e2e:test:http":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='http\\.e2e-spec'","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","e2e:full:local":"./scripts/e2e-full.sh","e2e:test:stdio":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='stdio\\.e2e-spec'","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:dev:tunnel":"nest start --watch --entryFile main-tunnel -- --tunnel --debug","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","upgrade:interactive":"npx npm-check-updates -i","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0afc1a9d-6517-4973-8757-69847b2a7af6"}},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"11.12.1","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ky":"^1.14.3","ws":"^8.18.3","zod":"^4.3.6","pino":"^10.3.1","rxjs":"^7.8.2","unified":"^11.0.5","passport":"^0.7.0","commander":"^14.0.3","@nestjs/jwt":"^11.0.2","pino-pretty":"^13.1.3","@nestjs/core":"^11.1.17","jsonwebtoken":"^9.0.3","passport-jwt":"^4.0.1","remark-parse":"^11.0.0","@nestjs/common":"^11.1.17","@nestjs/config":"^4.0.3","@rekog/mcp-nest":"^1.9.8","update-notifier":"^7.3.1","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","unist-util-visit":"^5.1.0","zod-to-json-schema":"^3.25.2","@nestjs/platform-express":"^11.1.17","@modelcontextprotocol/sdk":"1.28.0"},"_hasShrinkwrap":false,"packageManager":"npm@11.12.1","readmeFilename":"README.md","devDependencies":{"jest":"^30.3.0","husky":"^9.1.7","eslint":"^10.1.0","globals":"^17.4.0","ts-jest":"^29.4.6","ts-node":"^10.9.2","prettier":"^3.8.1","@types/ws":"^8.18.1","supertest":"^7.2.2","ts-loader":"^9.5.4","@eslint/js":"^10.0.1","typescript":"^5.9.3","@nestjs/cli":"^11.0.16","@types/jest":"^30.0.0","@types/node":"^25.5.0","@types/mdast":"^4.0.4","@types/express":"^5.0.6","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.17","@eslint/eslintrc":"^3.3.5","@types/supertest":"^7.2.0","typescript-eslint":"^8.57.2","@anthropic-ai/mcpb":"^2.1.2","@nestjs/schematics":"^11.0.9","source-map-support":"^0.5.21","@types/jsonwebtoken":"^9.0.10","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.15.0-tunnel.4_1775593629732_0.03557247014455056","host":"s3://npm-registry-packages-npm-production"}},"0.15.1":{"name":"@ankimcp/anki-mcp-server","version":"0.15.1","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"AGPL-3.0-or-later","_id":"@ankimcp/anki-mcp-server@0.15.1","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"73eabebe37654f3125cd8708e009ef64a5cc4a0c","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.15.1.tgz","fileCount":234,"integrity":"sha512-isnOYQTUV/E7zQHSzVnzbMtlQHDPpk1bCcSz6tFv1lqgeoWQzhCeE2X1adyy7u+aMwXzHGQf8TTAKf4RpuOtjQ==","signatures":[{"sig":"MEUCIGUlzt6maxhSS9m7Pou9cJqE74Ad6VjjnODMg+K244qIAiEApSdayNE+dmrwd08JIESdEFOUKxVFNfJvknOm1X4N9t8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ankimcp%2fanki-mcp-server@0.15.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":962692},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|mime|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20.19.0 <21.0.0 || >=22.12.0"},"gitHead":"67decb67dcb7764ec5ed1b81ded44d8f9f3f1879","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","e2e:up":"cd .docker && docker compose up -d","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","e2e:down":"cd .docker && docker compose down","e2e:logs":"cd .docker && docker compose logs -f","e2e:test":"jest --config test/e2e/jest-e2e.config.js","test:cov":"jest --coverage","test:unit":"jest --testPathPatterns='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\" && mcpb clean \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","e2e:test:http":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='http\\.e2e-spec'","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","e2e:full:local":"./scripts/e2e-full.sh","e2e:test:stdio":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='stdio\\.e2e-spec'","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","upgrade:interactive":"npx npm-check-updates -i","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0afc1a9d-6517-4973-8757-69847b2a7af6"}},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"11.12.1","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ky":"^1.14.3","zod":"^4.3.6","mime":"^4.1.0","pino":"^10.3.1","rxjs":"^7.8.2","unified":"^11.0.5","passport":"^0.7.0","commander":"^14.0.3","ipaddr.js":"^2.3.0","@nestjs/jwt":"^11.0.2","pino-pretty":"^13.1.3","@nestjs/core":"^11.1.17","jsonwebtoken":"^9.0.3","passport-jwt":"^4.0.1","remark-parse":"^11.0.0","@nestjs/common":"^11.1.17","@nestjs/config":"^4.0.3","@rekog/mcp-nest":"^1.9.8","update-notifier":"^7.3.1","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","unist-util-visit":"^5.1.0","zod-to-json-schema":"^3.25.2","@nestjs/platform-express":"^11.1.17","@modelcontextprotocol/sdk":"1.28.0"},"_hasShrinkwrap":false,"packageManager":"npm@11.12.1","devDependencies":{"jest":"^30.3.0","husky":"^9.1.7","eslint":"^10.1.0","globals":"^17.4.0","ts-jest":"^29.4.6","ts-node":"^10.9.2","prettier":"^3.8.1","supertest":"^7.2.2","ts-loader":"^9.5.4","@eslint/js":"^10.0.1","typescript":"^5.9.3","@nestjs/cli":"^11.0.16","@types/jest":"^30.0.0","@types/node":"^25.5.0","@types/mdast":"^4.0.4","@types/express":"^5.0.6","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.17","@eslint/eslintrc":"^3.3.5","@types/supertest":"^7.2.0","typescript-eslint":"^8.57.2","@anthropic-ai/mcpb":"^2.1.2","@nestjs/schematics":"^11.0.9","source-map-support":"^0.5.21","@types/jsonwebtoken":"^9.0.10","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.15.1_1775737549445_0.3677947271202895","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@ankimcp/anki-mcp-server","version":"0.16.0","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"AGPL-3.0-or-later","_id":"@ankimcp/anki-mcp-server@0.16.0","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"644bdb6bd7c9f8d4ed42c5f1b96530603d928e92","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.16.0.tgz","fileCount":255,"integrity":"sha512-JeNOoN6TcjWpq7luBCW0vSQlhNgzGfSDOt16QDVTF36vabQBLU64qdShmyp15aTywAetaf6798wME9g65vmogg==","signatures":[{"sig":"MEUCIQCxGeU6wYFev1PbQdgdFQhDScPT28I6AvhaVKtiDMakkAIgFyYBFEd+tsO8xqnFZZpZYCXnCRq9RoT0jQW3DvVUoLU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ankimcp%2fanki-mcp-server@0.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1073080},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|mime|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20.19.0 <21.0.0 || >=22.12.0"},"gitHead":"5f0840e980e0c60acd41ed7cecb568d9279e729e","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","e2e:up":"cd .docker && docker compose up -d","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","e2e:down":"cd .docker && docker compose down","e2e:logs":"cd .docker && docker compose logs -f","e2e:test":"jest --config test/e2e/jest-e2e.config.js","prebuild":"npm run generate:icon","test:cov":"jest --coverage","test:unit":"jest --testPathPatterns='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\" && mcpb clean \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","e2e:test:http":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='http\\.e2e-spec'","generate:icon":"node scripts/generate-icon.mjs","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","e2e:full:local":"./scripts/e2e-full.sh","e2e:test:stdio":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='stdio\\.e2e-spec'","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","upgrade:interactive":"npx npm-check-updates -i","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0afc1a9d-6517-4973-8757-69847b2a7af6"}},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"11.13.0","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ky":"^1.14.3","zod":"^4.3.6","mime":"^4.1.0","pino":"^10.3.1","rxjs":"^7.8.2","unified":"^11.0.5","passport":"^0.7.0","commander":"^14.0.3","ipaddr.js":"^2.3.0","@nestjs/jwt":"^11.0.2","pino-pretty":"^13.1.3","@nestjs/core":"11.1.19","jsonwebtoken":"^9.0.3","passport-jwt":"^4.0.1","remark-parse":"^11.0.0","@nestjs/common":"^11.1.19","@nestjs/config":"^4.0.4","@rekog/mcp-nest":"^1.9.9","update-notifier":"^7.3.1","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","unist-util-visit":"^5.1.0","zod-to-json-schema":"^3.25.2","@nestjs/platform-express":"^11.1.19","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"packageManager":"npm@11.12.1","devDependencies":{"jest":"^30.3.0","husky":"^9.1.7","sharp":"^0.34.5","eslint":"^10.2.1","globals":"^17.5.0","ts-jest":"^29.4.9","ts-node":"^10.9.2","prettier":"^3.8.3","supertest":"^7.2.2","ts-loader":"^9.5.7","@eslint/js":"^10.0.1","typescript":"^5.9.3","@nestjs/cli":"^11.0.21","@types/jest":"^30.0.0","@types/node":"^25.6.0","@types/mdast":"^4.0.4","@types/express":"^5.0.6","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.19","@eslint/eslintrc":"^3.3.5","@types/supertest":"^7.2.0","typescript-eslint":"^8.59.0","@anthropic-ai/mcpb":"^2.1.2","@nestjs/schematics":"^11.1.0","source-map-support":"^0.5.21","@types/jsonwebtoken":"^9.0.10","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@modelcontextprotocol/inspector":"^0.21.2"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.16.0_1776951050987_0.7241223360089868","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"@ankimcp/anki-mcp-server","version":"0.17.0","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"MIT","_id":"@ankimcp/anki-mcp-server@0.17.0","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"bcf6d9f1e7e3f091b83139d1dcfb492fb431f796","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.17.0.tgz","fileCount":255,"integrity":"sha512-JeG437MNfPL0PT7mHKFQE6LYf2YSnRQWb96RNgOLAoSBhQg/CVsVnq4ongM1sYWFUd++we80gsejAny0tX2big==","signatures":[{"sig":"MEUCIBmSvQ1eRAeqBoSTc92Chs17w+IiP/oBpwxLa0BgaYWWAiEAx4pjCYwVUy02sH5EpeOaHm396T39+eY5bGgb01Vu82A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ankimcp%2fanki-mcp-server@0.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1039198},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|mime|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20.19.0 <21.0.0 || >=22.12.0"},"gitHead":"afd9ca17a21c6f9346227fa7151d31a2a6f6970c","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","e2e:up":"cd .docker && docker compose up -d","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","e2e:down":"cd .docker && docker compose down","e2e:logs":"cd .docker && docker compose logs -f","e2e:test":"jest --config test/e2e/jest-e2e.config.js","prebuild":"npm run generate:icon","test:cov":"jest --coverage","test:unit":"jest --testPathPatterns='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\" && mcpb clean \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","e2e:test:http":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='http\\.e2e-spec'","generate:icon":"node scripts/generate-icon.mjs","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","e2e:full:local":"./scripts/e2e-full.sh","e2e:test:stdio":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='stdio\\.e2e-spec'","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","upgrade:interactive":"npx npm-check-updates -i","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0afc1a9d-6517-4973-8757-69847b2a7af6"}},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"11.13.0","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ky":"^1.14.3","zod":"^4.3.6","mime":"^4.1.0","pino":"^10.3.1","rxjs":"^7.8.2","unified":"^11.0.5","passport":"^0.7.0","commander":"^14.0.3","ipaddr.js":"^2.3.0","@nestjs/jwt":"^11.0.2","pino-pretty":"^13.1.3","@nestjs/core":"11.1.19","jsonwebtoken":"^9.0.3","passport-jwt":"^4.0.1","remark-parse":"^11.0.0","@nestjs/common":"^11.1.19","@nestjs/config":"^4.0.4","@rekog/mcp-nest":"^1.9.9","update-notifier":"^7.3.1","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","unist-util-visit":"^5.1.0","zod-to-json-schema":"^3.25.2","@nestjs/platform-express":"^11.1.19","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"packageManager":"npm@11.12.1","devDependencies":{"jest":"^30.3.0","husky":"^9.1.7","sharp":"^0.34.5","eslint":"^10.2.1","globals":"^17.5.0","ts-jest":"^29.4.9","ts-node":"^10.9.2","prettier":"^3.8.3","supertest":"^7.2.2","ts-loader":"^9.5.7","@eslint/js":"^10.0.1","typescript":"^5.9.3","@nestjs/cli":"^11.0.21","@types/jest":"^30.0.0","@types/node":"^25.6.0","@types/mdast":"^4.0.4","@types/express":"^5.0.6","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.19","@eslint/eslintrc":"^3.3.5","@types/supertest":"^7.2.0","typescript-eslint":"^8.59.0","@anthropic-ai/mcpb":"^2.1.2","@nestjs/schematics":"^11.1.0","source-map-support":"^0.5.21","@types/jsonwebtoken":"^9.0.10","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@modelcontextprotocol/inspector":"^0.21.2"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.17.0_1776954662004_0.3688281577311614","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"@ankimcp/anki-mcp-server","version":"0.18.0","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"MIT","_id":"@ankimcp/anki-mcp-server@0.18.0","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"a6353bb84dbf63bd49ffe1f9b7b1ff1c7ea14591","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.18.0.tgz","fileCount":255,"integrity":"sha512-00AVWHCMt5OUpbxreJQVVcrQRyxBtS6hwGK1knIFaCs/JaBp+/9td261f0yzpTGoKEAx2AOAhwkGyx8y3afpVg==","signatures":[{"sig":"MEQCIEqAsIorSakZYUHVlTpM4eMos61fd4lz1x2WpxPjWrPyAiBavnkgmWBhsFyCL7tP9BU/UZg/3aFbejNe2r7TpCf9fQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ankimcp%2fanki-mcp-server@0.18.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1050569},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|mime|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20.19.0 <21.0.0 || >=22.12.0"},"gitHead":"6ce03a722b1845a2d2aa4c375ceecda676948082","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","e2e:up":"cd .docker && docker compose up -d","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","e2e:down":"cd .docker && docker compose down","e2e:logs":"cd .docker && docker compose logs -f","e2e:test":"jest --config test/e2e/jest-e2e.config.js","prebuild":"npm run generate:icon","test:cov":"jest --coverage","test:unit":"jest --testPathPatterns='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\" && mcpb clean \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","e2e:test:http":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='http\\.e2e-spec'","generate:icon":"node scripts/generate-icon.mjs","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","e2e:full:local":"./scripts/e2e-full.sh","e2e:test:stdio":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='stdio\\.e2e-spec'","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","upgrade:interactive":"npx npm-check-updates -i","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0afc1a9d-6517-4973-8757-69847b2a7af6"}},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"11.13.0","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ky":"^1.14.3","zod":"^4.3.6","mime":"^4.1.0","pino":"^10.3.1","rxjs":"^7.8.2","unified":"^11.0.5","passport":"^0.7.0","commander":"^14.0.3","ipaddr.js":"^2.3.0","@nestjs/jwt":"^11.0.2","pino-pretty":"^13.1.3","@nestjs/core":"11.1.19","jsonwebtoken":"^9.0.3","passport-jwt":"^4.0.1","remark-parse":"^11.0.0","@nestjs/common":"^11.1.19","@nestjs/config":"^4.0.4","@rekog/mcp-nest":"^1.9.9","update-notifier":"^7.3.1","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","unist-util-visit":"^5.1.0","zod-to-json-schema":"^3.25.2","@nestjs/platform-express":"^11.1.19","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"packageManager":"npm@11.12.1","devDependencies":{"jest":"^30.3.0","husky":"^9.1.7","sharp":"^0.34.5","eslint":"^10.2.1","globals":"^17.5.0","ts-jest":"^29.4.9","ts-node":"^10.9.2","prettier":"^3.8.3","supertest":"^7.2.2","ts-loader":"^9.5.7","@eslint/js":"^10.0.1","typescript":"^5.9.3","@nestjs/cli":"^11.0.21","@types/jest":"^30.0.0","@types/node":"^25.6.0","@types/mdast":"^4.0.4","@types/express":"^5.0.6","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.19","@eslint/eslintrc":"^3.3.5","@types/supertest":"^7.2.0","typescript-eslint":"^8.59.0","@anthropic-ai/mcpb":"^2.1.2","@nestjs/schematics":"^11.1.0","source-map-support":"^0.5.21","@types/jsonwebtoken":"^9.0.10","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@modelcontextprotocol/inspector":"^0.21.2"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.18.0_1776958067064_0.03714128983056031","host":"s3://npm-registry-packages-npm-production"}},"0.18.3":{"name":"@ankimcp/anki-mcp-server","version":"0.18.3","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"MIT","_id":"@ankimcp/anki-mcp-server@0.18.3","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"249f21f5c0ae46022d318366456dc537171d70e9","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.18.3.tgz","fileCount":258,"integrity":"sha512-HYvapvzM7tKZ4dGmXCT0bweh6Dm2CnrstOmtg3sPxabEi7Ql6KzZJvSKNv0TMfXHTq/SecdbcobYiTuMfD8KwQ==","signatures":[{"sig":"MEYCIQD5ij88Qs6NLEx09iA8//AbZ0I/QP/XgGsM96b4Wc9gfQIhAJKp1IEfdsD+z47pGhuNISV0PRJTQ1LEwt1/vZDGnNAs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ankimcp%2fanki-mcp-server@0.18.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1057735},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|mime|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20.19.0 <21.0.0 || >=22.12.0"},"gitHead":"66834be7c85269d856f0ac19e35bf6a4f538269a","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","e2e:up":"cd .docker && docker compose up -d","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","e2e:down":"cd .docker && docker compose down","e2e:logs":"cd .docker && docker compose logs -f","e2e:test":"jest --config test/e2e/jest-e2e.config.js","prebuild":"npm run generate:icon","test:cov":"jest --coverage","test:unit":"jest --testPathPatterns='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\" && mcpb clean \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","e2e:test:http":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='http\\.e2e-spec'","generate:icon":"node scripts/generate-icon.mjs","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","e2e:full:local":"./scripts/e2e-full.sh","e2e:test:stdio":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='stdio\\.e2e-spec'","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","upgrade:interactive":"npx npm-check-updates -i","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0afc1a9d-6517-4973-8757-69847b2a7af6"}},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"11.13.0","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ky":"^1.14.3","zod":"^4.3.6","mime":"^4.1.0","pino":"^10.3.1","rxjs":"^7.8.2","unified":"^11.0.5","passport":"^0.7.0","commander":"^14.0.3","ipaddr.js":"^2.3.0","@nestjs/jwt":"^11.0.2","pino-pretty":"^13.1.3","@nestjs/core":"11.1.19","jsonwebtoken":"^9.0.3","passport-jwt":"^4.0.1","remark-parse":"^11.0.0","@nestjs/common":"^11.1.19","@nestjs/config":"^4.0.4","@rekog/mcp-nest":"^1.9.9","update-notifier":"^7.3.1","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","unist-util-visit":"^5.1.0","zod-to-json-schema":"^3.25.2","@nestjs/platform-express":"^11.1.19","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"packageManager":"npm@11.12.1","devDependencies":{"jest":"^30.3.0","husky":"^9.1.7","sharp":"^0.34.5","eslint":"^10.2.1","globals":"^17.5.0","ts-jest":"^29.4.9","ts-node":"^10.9.2","prettier":"^3.8.3","supertest":"^7.2.2","ts-loader":"^9.5.7","@eslint/js":"^10.0.1","typescript":"^5.9.3","@nestjs/cli":"^11.0.21","@types/jest":"^30.0.0","@types/node":"^25.6.0","@types/mdast":"^4.0.4","@types/express":"^5.0.6","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.19","@eslint/eslintrc":"^3.3.5","@types/supertest":"^7.2.0","typescript-eslint":"^8.59.0","@anthropic-ai/mcpb":"^2.1.2","@nestjs/schematics":"^11.1.0","source-map-support":"^0.5.21","@types/jsonwebtoken":"^9.0.10","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@modelcontextprotocol/inspector":"^0.21.2"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.18.3_1776967224703_0.690611289951887","host":"s3://npm-registry-packages-npm-production"}},"0.18.4":{"name":"@ankimcp/anki-mcp-server","version":"0.18.4","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"MIT","_id":"@ankimcp/anki-mcp-server@0.18.4","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"48dae46b038323d6598335bb65d0f864abe054a7","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.18.4.tgz","fileCount":258,"integrity":"sha512-y3Um14+xLNT/RLHC8MmV42YfB02ewm/QpaV04R/cByp7eGPXbb7bVfZWYJMeZEyZU8JO0dLk7guc12XPNbvpoA==","signatures":[{"sig":"MEYCIQCaJoaagisvHdrmQPqSdw/0Rki72tvrC96kyZlILy9IYAIhAKZHAmr5vsCpTg0bUamOHngeQjpkSBF+3uRWyGaDvZB9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ankimcp%2fanki-mcp-server@0.18.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1057778},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|mime|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20.19.0 <21.0.0 || >=22.12.0"},"gitHead":"e81928add51b2f5bbcd73e21f23e1912068fb85d","mcpName":"ai.ankimcp/anki-mcp-server","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","e2e:up":"cd .docker && docker compose up -d","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","e2e:down":"cd .docker && docker compose down","e2e:logs":"cd .docker && docker compose logs -f","e2e:test":"jest --config test/e2e/jest-e2e.config.js","prebuild":"npm run generate:icon","test:cov":"jest --coverage","test:unit":"jest --testPathPatterns='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\" && mcpb clean \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","e2e:test:http":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='http\\.e2e-spec'","generate:icon":"node scripts/generate-icon.mjs","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","e2e:full:local":"./scripts/e2e-full.sh","e2e:test:stdio":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='stdio\\.e2e-spec'","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","upgrade:interactive":"npx npm-check-updates -i","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0afc1a9d-6517-4973-8757-69847b2a7af6"}},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"11.13.0","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ky":"^1.14.3","zod":"^4.3.6","mime":"^4.1.0","pino":"^10.3.1","rxjs":"^7.8.2","unified":"^11.0.5","passport":"^0.7.0","commander":"^14.0.3","ipaddr.js":"^2.3.0","@nestjs/jwt":"^11.0.2","pino-pretty":"^13.1.3","@nestjs/core":"11.1.19","jsonwebtoken":"^9.0.3","passport-jwt":"^4.0.1","remark-parse":"^11.0.0","@nestjs/common":"^11.1.19","@nestjs/config":"^4.0.4","@rekog/mcp-nest":"^1.9.9","update-notifier":"^7.3.1","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","unist-util-visit":"^5.1.0","zod-to-json-schema":"^3.25.2","@nestjs/platform-express":"^11.1.19","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"packageManager":"npm@11.12.1","devDependencies":{"jest":"^30.3.0","husky":"^9.1.7","sharp":"^0.34.5","eslint":"^10.2.1","globals":"^17.5.0","ts-jest":"^29.4.9","ts-node":"^10.9.2","prettier":"^3.8.3","supertest":"^7.2.2","ts-loader":"^9.5.7","@eslint/js":"^10.0.1","typescript":"^5.9.3","@nestjs/cli":"^11.0.21","@types/jest":"^30.0.0","@types/node":"^25.6.0","@types/mdast":"^4.0.4","@types/express":"^5.0.6","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.19","@eslint/eslintrc":"^3.3.5","@types/supertest":"^7.2.0","typescript-eslint":"^8.59.0","@anthropic-ai/mcpb":"^2.1.2","@nestjs/schematics":"^11.1.0","source-map-support":"^0.5.21","@types/jsonwebtoken":"^9.0.10","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@modelcontextprotocol/inspector":"^0.21.2"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.18.4_1776970851456_0.7100711642068716","host":"s3://npm-registry-packages-npm-production"}},"0.18.4-tunnel":{"name":"@ankimcp/anki-mcp-server","version":"0.18.4-tunnel","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"MIT","_id":"@ankimcp/anki-mcp-server@0.18.4-tunnel","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"14068ff7f2cc90ee27c55cb4c9502c0e7269338c","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.18.4-tunnel.tgz","fileCount":315,"integrity":"sha512-+w/kgtgCs+Sw3W/K4Lp5pnBYabRfcoPNSiAHWHYh4ue1H48E00DGx565Ps69ObXtmMxse7mnhiLK1cq/W028Ug==","signatures":[{"sig":"MEUCIBp2bZp2FmGYmKFuoLWMO3AREUrGUE21E0yJow/dN50yAiEAp/JXcP/ehSYmH/g/EXJls39nSkTmwEGT0QEE2lThv2Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ankimcp%2fanki-mcp-server@0.18.4-tunnel","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1202008},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|mime|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20.19.0 <21.0.0 || >=22.12.0"},"gitHead":"79e47c0a6e140eea9789a31384d4be23cfef7822","mcpName":"ai.ankimcp/anki-mcp-server","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","e2e:up":"cd .docker && docker compose up -d","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","e2e:down":"cd .docker && docker compose down","e2e:logs":"cd .docker && docker compose logs -f","e2e:test":"jest --config test/e2e/jest-e2e.config.js","prebuild":"npm run generate:icon","test:cov":"jest --coverage","test:unit":"jest --testPathPatterns='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","install:npm":"npm install -g @ankimcp/anki-mcp-server@tunnel","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\" && mcpb clean \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","e2e:test:http":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='http\\.e2e-spec'","generate:icon":"node scripts/generate-icon.mjs","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","e2e:full:local":"./scripts/e2e-full.sh","e2e:test:stdio":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='stdio\\.e2e-spec'","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:dev:tunnel":"nest start --watch --entryFile main-tunnel -- --tunnel --debug","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","upgrade:interactive":"npx npm-check-updates -i","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0afc1a9d-6517-4973-8757-69847b2a7af6"}},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"11.12.1","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ky":"^1.14.3","ws":"^8.20.0","zod":"^4.3.6","mime":"^4.1.0","pino":"^10.3.1","rxjs":"^7.8.2","unified":"^11.0.5","passport":"^0.7.0","commander":"^14.0.3","ipaddr.js":"^2.3.0","@nestjs/jwt":"^11.0.2","pino-pretty":"^13.1.3","@nestjs/core":"11.1.19","jsonwebtoken":"^9.0.3","passport-jwt":"^4.0.1","remark-parse":"^11.0.0","@nestjs/common":"^11.1.19","@nestjs/config":"^4.0.4","@rekog/mcp-nest":"^1.9.9","update-notifier":"^7.3.1","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","unist-util-visit":"^5.1.0","zod-to-json-schema":"^3.25.2","@nestjs/platform-express":"^11.1.19","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"packageManager":"npm@11.13.0","readmeFilename":"README.md","devDependencies":{"jest":"^30.3.0","husky":"^9.1.7","sharp":"^0.34.5","eslint":"^10.2.1","globals":"^17.5.0","ts-jest":"^29.4.9","ts-node":"^10.9.2","prettier":"^3.8.3","@types/ws":"^8.18.1","supertest":"^7.2.2","ts-loader":"^9.5.7","@eslint/js":"^10.0.1","typescript":"^5.9.3","@nestjs/cli":"^11.0.21","@types/jest":"^30.0.0","@types/node":"^25.6.0","@types/mdast":"^4.0.4","@types/express":"^5.0.6","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.19","@eslint/eslintrc":"^3.3.5","@types/supertest":"^7.2.0","typescript-eslint":"^8.59.0","@anthropic-ai/mcpb":"^2.1.2","@nestjs/schematics":"^11.1.0","source-map-support":"^0.5.21","@types/jsonwebtoken":"^9.0.10","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@modelcontextprotocol/inspector":"^0.21.2"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.18.4-tunnel_1777017258520_0.7632061022800887","host":"s3://npm-registry-packages-npm-production"}},"0.18.5":{"name":"@ankimcp/anki-mcp-server","version":"0.18.5","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"MIT","_id":"@ankimcp/anki-mcp-server@0.18.5","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"57c617c3ecbc8d8c6f5e484502f32a03dcc092ac","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.18.5.tgz","fileCount":258,"integrity":"sha512-tk/D/zS0sxnAl1O1wDRGtg0ckdgrm7YT/rZxYe96NoGWo2sT7sWbmEjoXCFEEE1/ljE/xMa5AZhrCl+s/IS1rw==","signatures":[{"sig":"MEUCIQDM+pURt7A53SY7vgSdr1MbzzkB6b4hodJRLuLT+MaNOQIgNyR+841JJN8KI7wgpQE2qBiVt7LyOI+Qy64+qgz/QbY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ankimcp%2fanki-mcp-server@0.18.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1057778},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|mime|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20.19.0 <21.0.0 || >=22.12.0"},"gitHead":"30293ab4ab86777cc2dc2b5746b047f9214b8419","mcpName":"ai.ankimcp/anki-mcp-server","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","e2e:up":"cd .docker && docker compose up -d","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","e2e:down":"cd .docker && docker compose down","e2e:logs":"cd .docker && docker compose logs -f","e2e:test":"jest --config test/e2e/jest-e2e.config.js","prebuild":"npm run generate:icon","test:cov":"jest --coverage","test:unit":"jest --testPathPatterns='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\" && mcpb clean \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","e2e:test:http":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='http\\.e2e-spec'","generate:icon":"node scripts/generate-icon.mjs","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","e2e:full:local":"./scripts/e2e-full.sh","e2e:test:stdio":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='stdio\\.e2e-spec'","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","upgrade:interactive":"npx npm-check-updates -i","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0afc1a9d-6517-4973-8757-69847b2a7af6"}},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"11.13.0","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ky":"^1.14.3","zod":"^4.3.6","mime":"^4.1.0","pino":"^10.3.1","rxjs":"^7.8.2","unified":"^11.0.5","passport":"^0.7.0","commander":"^14.0.3","ipaddr.js":"^2.3.0","@nestjs/jwt":"^11.0.2","pino-pretty":"^13.1.3","@nestjs/core":"11.1.19","jsonwebtoken":"^9.0.3","passport-jwt":"^4.0.1","remark-parse":"^11.0.0","@nestjs/common":"^11.1.19","@nestjs/config":"^4.0.4","@rekog/mcp-nest":"^1.9.9","update-notifier":"^7.3.1","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","unist-util-visit":"^5.1.0","zod-to-json-schema":"^3.25.2","@nestjs/platform-express":"^11.1.19","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"packageManager":"npm@11.12.1","devDependencies":{"jest":"^30.3.0","husky":"^9.1.7","sharp":"^0.34.5","eslint":"^10.2.1","globals":"^17.5.0","ts-jest":"^29.4.9","ts-node":"^10.9.2","prettier":"^3.8.3","supertest":"^7.2.2","ts-loader":"^9.5.7","@eslint/js":"^10.0.1","typescript":"^5.9.3","@nestjs/cli":"^11.0.21","@types/jest":"^30.0.0","@types/node":"^25.6.0","@types/mdast":"^4.0.4","@types/express":"^5.0.6","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.19","@eslint/eslintrc":"^3.3.5","@types/supertest":"^7.2.0","typescript-eslint":"^8.59.0","@anthropic-ai/mcpb":"^2.1.2","@nestjs/schematics":"^11.1.0","source-map-support":"^0.5.21","@types/jsonwebtoken":"^9.0.10","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@modelcontextprotocol/inspector":"^0.21.2"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.18.5_1777019856708_0.4572698358810514","host":"s3://npm-registry-packages-npm-production"}},"0.18.5-tunnel":{"name":"@ankimcp/anki-mcp-server","version":"0.18.5-tunnel","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"MIT","_id":"@ankimcp/anki-mcp-server@0.18.5-tunnel","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"327aeaa0a264de4cfeda5e44243189034759b4d7","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.18.5-tunnel.tgz","fileCount":315,"integrity":"sha512-BklmvNgAxPmqN2adVW0yt7PAX3n5wObTdJoMIpkm/gdvKIpERc/O/lCTL1hCMG+gui0BZcRuojQZh9NmrcvkUg==","signatures":[{"sig":"MEUCIQCck5S66CkvTdjPGvMbogfBsKzi9obACevpGmV/1tJN6AIgAeiUjvS1i/99TasE97Z/v1t4EH7DFA0TGX7wyw4EtAE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ankimcp%2fanki-mcp-server@0.18.5-tunnel","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1202008},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|mime|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20.19.0 <21.0.0 || >=22.12.0"},"gitHead":"1606f0742583e83227360bb34140e6073279b23c","mcpName":"ai.ankimcp/anki-mcp-server","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","e2e:up":"cd .docker && docker compose up -d","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","e2e:down":"cd .docker && docker compose down","e2e:logs":"cd .docker && docker compose logs -f","e2e:test":"jest --config test/e2e/jest-e2e.config.js","prebuild":"npm run generate:icon","test:cov":"jest --coverage","test:unit":"jest --testPathPatterns='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","install:npm":"npm install -g @ankimcp/anki-mcp-server@tunnel","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\" && mcpb clean \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","e2e:test:http":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='http\\.e2e-spec'","generate:icon":"node scripts/generate-icon.mjs","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","e2e:full:local":"./scripts/e2e-full.sh","e2e:test:stdio":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='stdio\\.e2e-spec'","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:dev:tunnel":"nest start --watch --entryFile main-tunnel -- --tunnel --debug","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","upgrade:interactive":"npx npm-check-updates -i","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0afc1a9d-6517-4973-8757-69847b2a7af6"}},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"11.12.1","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ky":"^1.14.3","ws":"^8.20.0","zod":"^4.3.6","mime":"^4.1.0","pino":"^10.3.1","rxjs":"^7.8.2","unified":"^11.0.5","passport":"^0.7.0","commander":"^14.0.3","ipaddr.js":"^2.3.0","@nestjs/jwt":"^11.0.2","pino-pretty":"^13.1.3","@nestjs/core":"11.1.19","jsonwebtoken":"^9.0.3","passport-jwt":"^4.0.1","remark-parse":"^11.0.0","@nestjs/common":"^11.1.19","@nestjs/config":"^4.0.4","@rekog/mcp-nest":"^1.9.9","update-notifier":"^7.3.1","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","unist-util-visit":"^5.1.0","zod-to-json-schema":"^3.25.2","@nestjs/platform-express":"^11.1.19","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"packageManager":"npm@11.13.0","readmeFilename":"README.md","devDependencies":{"jest":"^30.3.0","husky":"^9.1.7","sharp":"^0.34.5","eslint":"^10.2.1","globals":"^17.5.0","ts-jest":"^29.4.9","ts-node":"^10.9.2","prettier":"^3.8.3","@types/ws":"^8.18.1","supertest":"^7.2.2","ts-loader":"^9.5.7","@eslint/js":"^10.0.1","typescript":"^5.9.3","@nestjs/cli":"^11.0.21","@types/jest":"^30.0.0","@types/node":"^25.6.0","@types/mdast":"^4.0.4","@types/express":"^5.0.6","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.19","@eslint/eslintrc":"^3.3.5","@types/supertest":"^7.2.0","typescript-eslint":"^8.59.0","@anthropic-ai/mcpb":"^2.1.2","@nestjs/schematics":"^11.1.0","source-map-support":"^0.5.21","@types/jsonwebtoken":"^9.0.10","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@modelcontextprotocol/inspector":"^0.21.2"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.18.5-tunnel_1778697020485_0.7179234063745623","host":"s3://npm-registry-packages-npm-production"}},"0.18.5-tunnel.1":{"name":"@ankimcp/anki-mcp-server","version":"0.18.5-tunnel.1","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"MIT","_id":"@ankimcp/anki-mcp-server@0.18.5-tunnel.1","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"094de4ad4e3632a2bb468f0e633f690a6e1081f9","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.18.5-tunnel.1.tgz","fileCount":315,"integrity":"sha512-VAvYCRAllSl9ymPtgtKS8e94ffYY7kFAGPr+PE22M1oOvvQcpM6N1AKw76t0mJ2qm1mf02FAZEppvZCOkoWneQ==","signatures":[{"sig":"MEYCIQC3Sj5IJRQtL1eyzeKVCxiBaPywJbYgU37aEfF6QgqmRwIhAILCTzVaLAb9+0zySDcqpJ1ta1mzl/KBySBDpQ/+fdyr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ankimcp%2fanki-mcp-server@0.18.5-tunnel.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1202086},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|mime|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20.19.0 <21.0.0 || >=22.12.0"},"gitHead":"fc7362064c73cc85b809b81ab3de6633678b0b77","mcpName":"ai.ankimcp/anki-mcp-server","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","e2e:up":"cd .docker && docker compose up -d","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","e2e:down":"cd .docker && docker compose down","e2e:logs":"cd .docker && docker compose logs -f","e2e:test":"jest --config test/e2e/jest-e2e.config.js","prebuild":"npm run generate:icon","test:cov":"jest --coverage","test:unit":"jest --testPathPatterns='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","install:npm":"npm install -g @ankimcp/anki-mcp-server@tunnel","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\" && mcpb clean \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","e2e:test:http":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='http\\.e2e-spec'","generate:icon":"node scripts/generate-icon.mjs","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","e2e:full:local":"./scripts/e2e-full.sh","e2e:test:stdio":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='stdio\\.e2e-spec'","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:dev:tunnel":"nest start --watch --entryFile main-tunnel -- --tunnel --debug","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","upgrade:interactive":"npx npm-check-updates -i","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0afc1a9d-6517-4973-8757-69847b2a7af6"}},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"11.12.1","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ky":"^1.14.3","ws":"^8.20.0","zod":"^4.3.6","mime":"^4.1.0","pino":"^10.3.1","rxjs":"^7.8.2","unified":"^11.0.5","passport":"^0.7.0","commander":"^14.0.3","ipaddr.js":"^2.3.0","@nestjs/jwt":"^11.0.2","pino-pretty":"^13.1.3","@nestjs/core":"11.1.19","jsonwebtoken":"^9.0.3","passport-jwt":"^4.0.1","remark-parse":"^11.0.0","@nestjs/common":"^11.1.19","@nestjs/config":"^4.0.4","@rekog/mcp-nest":"^1.9.9","update-notifier":"^7.3.1","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","unist-util-visit":"^5.1.0","zod-to-json-schema":"^3.25.2","@nestjs/platform-express":"^11.1.19","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"packageManager":"npm@11.13.0","readmeFilename":"README.md","devDependencies":{"jest":"^30.3.0","husky":"^9.1.7","sharp":"^0.34.5","eslint":"^10.2.1","globals":"^17.5.0","ts-jest":"^29.4.9","ts-node":"^10.9.2","prettier":"^3.8.3","@types/ws":"^8.18.1","supertest":"^7.2.2","ts-loader":"^9.5.7","@eslint/js":"^10.0.1","typescript":"^5.9.3","@nestjs/cli":"^11.0.21","@types/jest":"^30.0.0","@types/node":"^25.6.0","@types/mdast":"^4.0.4","@types/express":"^5.0.6","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.19","@eslint/eslintrc":"^3.3.5","@types/supertest":"^7.2.0","typescript-eslint":"^8.59.0","@anthropic-ai/mcpb":"^2.1.2","@nestjs/schematics":"^11.1.0","source-map-support":"^0.5.21","@types/jsonwebtoken":"^9.0.10","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@modelcontextprotocol/inspector":"^0.21.2"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.18.5-tunnel.1_1778702506155_0.26634965466962157","host":"s3://npm-registry-packages-npm-production"}},"0.18.5-tunnel.2":{"name":"@ankimcp/anki-mcp-server","version":"0.18.5-tunnel.2","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"MIT","_id":"@ankimcp/anki-mcp-server@0.18.5-tunnel.2","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"e5e5a57dada327db3a1f1b9099e2270652035082","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.18.5-tunnel.2.tgz","fileCount":321,"integrity":"sha512-k5BHNQpfoMHNtAK5Bd5JluxOE6YDcIEsvmrEkKvXmbQTcP0imjsj4wAluUbwQAlF8Y4MFFFXKpJRSs5sybSmAA==","signatures":[{"sig":"MEUCIFzz8GmZbg3wORfoa9yxzeCzFwYJXjq+Mo/Wy5KH8xbgAiEA8PXBP5RHGae6Iv2GqdiqTLPWAFCkVxt0Q4SaDjypgbk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ankimcp%2fanki-mcp-server@0.18.5-tunnel.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1207633},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(ky|mime|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=20.19.0 <21.0.0 || >=22.12.0"},"gitHead":"02ab29cb783c16b110cbe5f52731f48a8a1b1647","mcpName":"ai.ankimcp/anki-mcp-server","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","e2e:up":"cd .docker && docker compose up -d","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","e2e:down":"cd .docker && docker compose down","e2e:logs":"cd .docker && docker compose logs -f","e2e:test":"jest --config test/e2e/jest-e2e.config.js","prebuild":"npm run generate:icon","test:cov":"jest --coverage","test:unit":"jest --testPathPatterns='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","install:npm":"npm install -g @ankimcp/anki-mcp-server@tunnel","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\" && mcpb clean \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","e2e:test:http":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='http\\.e2e-spec'","generate:icon":"node scripts/generate-icon.mjs","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","e2e:full:local":"./scripts/e2e-full.sh","e2e:test:stdio":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='stdio\\.e2e-spec'","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:dev:tunnel":"nest start --watch --entryFile main-tunnel -- --tunnel --debug","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","upgrade:interactive":"npx npm-check-updates -i","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0afc1a9d-6517-4973-8757-69847b2a7af6"}},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"11.12.1","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"22.22.3","dependencies":{"ky":"^1.14.3","ws":"^8.21.0","zod":"^4.4.3","mime":"^4.1.0","pino":"^10.3.1","rxjs":"^7.8.2","unified":"^11.0.5","passport":"^0.7.0","commander":"^14.0.3","ipaddr.js":"^2.4.0","@nestjs/jwt":"^11.0.2","pino-pretty":"^13.1.3","@nestjs/core":"11.1.23","jsonwebtoken":"^9.0.3","passport-jwt":"^4.0.1","remark-parse":"^11.0.0","@nestjs/common":"^11.1.23","@nestjs/config":"^4.0.4","@rekog/mcp-nest":"^1.9.10","update-notifier":"^7.3.1","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","unist-util-visit":"^5.1.0","zod-to-json-schema":"^3.25.2","@nestjs/platform-express":"^11.1.23","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"packageManager":"npm@11.15.0","readmeFilename":"README.md","devDependencies":{"jest":"^30.4.2","husky":"^9.1.7","sharp":"^0.34.5","eslint":"^10.4.0","globals":"^17.6.0","ts-jest":"^29.4.11","ts-node":"^10.9.2","prettier":"^3.8.3","@types/ws":"^8.18.1","supertest":"^7.2.2","ts-loader":"^9.5.7","@eslint/js":"^10.0.1","typescript":"^5.9.3","@nestjs/cli":"^11.0.21","@types/jest":"^30.0.0","@types/node":"^25.9.1","@types/mdast":"^4.0.4","@types/express":"^5.0.6","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.23","@eslint/eslintrc":"^3.3.5","@types/supertest":"^7.2.0","typescript-eslint":"^8.59.4","@anthropic-ai/mcpb":"^2.1.2","@nestjs/schematics":"^11.1.0","source-map-support":"^0.5.21","@types/jsonwebtoken":"^9.0.10","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","@modelcontextprotocol/inspector":"^0.21.2"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.18.5-tunnel.2_1779563772115_0.3144846050112817","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"name":"@ankimcp/anki-mcp-server","version":"0.19.0","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"MIT","_id":"@ankimcp/anki-mcp-server@0.19.0","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"498af71e94d61ba6c29a58db5adf85ef4d791c34","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.19.0.tgz","fileCount":320,"integrity":"sha512-YdZzyMc5ZWuKekRDCvAmd+jWiEYC74IGllxipN/g2HWXRM9CEUNeWHfuHzF/H/DvYmNBdTCh/BrcNrLgyciwNQ==","signatures":[{"sig":"MEYCIQCTjCPEcxDFTVAtkNHgopLx2dmxeC85uXQ+7pNT735YeQIhAN+CBHVwGB+dKqXC0LYO298f9KB1djVF1KhhPoTYKMOo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ankimcp%2fanki-mcp-server@0.19.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":920638},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(commander|ky|mime|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"],"modulePathIgnorePatterns":["<rootDir>/dist","<rootDir>/dist-stdio","<rootDir>/dist-http"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=22.12.0"},"gitHead":"c45e98d27b07e675103b45dc132f8612834398e9","mcpName":"ai.ankimcp/anki-mcp-server","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","e2e:up":"cd .docker && docker compose up -d","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","e2e:down":"cd .docker && docker compose down","e2e:logs":"cd .docker && docker compose logs -f","e2e:test":"jest --config test/e2e/jest-e2e.config.js","prebuild":"npm run generate:icon","test:cov":"jest --coverage","test:unit":"jest --testPathPatterns='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","install:npm":"npm install -g @ankimcp/anki-mcp-server@tunnel","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\" && mcpb clean \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","e2e:test:http":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='http\\.e2e-spec'","generate:icon":"node scripts/generate-icon.mjs","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","e2e:full:local":"./scripts/e2e-full.sh","e2e:test:stdio":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='stdio\\.e2e-spec'","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:dev:tunnel":"nest start --watch --entryFile main-tunnel -- --tunnel --debug","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","upgrade:interactive":"npx npm-check-updates -i","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0afc1a9d-6517-4973-8757-69847b2a7af6"}},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"11.12.1","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"22.22.3","dependencies":{"ky":"^2.0.2","ws":"^8.21.0","zod":"^4.4.3","mime":"^4.1.0","pino":"^10.3.1","rxjs":"^7.8.2","unified":"^11.0.5","passport":"^0.7.0","commander":"^15.0.0","ipaddr.js":"^2.4.0","@nestjs/jwt":"^11.0.2","pino-pretty":"^13.1.3","@nestjs/core":"11.1.24","jsonwebtoken":"^9.0.3","passport-jwt":"^4.0.1","remark-parse":"^11.0.0","@nestjs/common":"^11.1.24","@nestjs/config":"^4.0.4","@rekog/mcp-nest":"^1.9.10","update-notifier":"^7.3.1","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","unist-util-visit":"^5.1.0","zod-to-json-schema":"^3.25.2","@nestjs/platform-express":"^11.1.24","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"packageManager":"npm@11.16.0","devDependencies":{"jest":"^30.4.2","husky":"^9.1.7","sharp":"^0.34.5","eslint":"^10.4.1","globals":"^17.6.0","ts-jest":"^29.4.11","ts-node":"^10.9.2","prettier":"^3.8.3","@types/ws":"^8.18.1","supertest":"^7.2.2","ts-loader":"^9.6.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@nestjs/cli":"^11.0.21","@types/jest":"^30.0.0","@types/node":"^25.9.1","@types/mdast":"^4.0.4","@types/express":"^5.0.6","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.24","@eslint/eslintrc":"^3.3.5","@types/supertest":"^7.2.0","typescript-eslint":"^8.60.1","@anthropic-ai/mcpb":"^2.1.2","@nestjs/schematics":"^11.1.0","source-map-support":"^0.5.21","@types/jsonwebtoken":"^9.0.10","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6","@modelcontextprotocol/inspector":"^0.21.2"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.19.0_1780573993898_0.06484126632625054","host":"s3://npm-registry-packages-npm-production"}},"0.19.1":{"name":"@ankimcp/anki-mcp-server","version":"0.19.1","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"author":{"name":"Anatoly Tarnavsky"},"license":"MIT","_id":"@ankimcp/anki-mcp-server@0.19.1","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"homepage":"https://ankimcp.ai","bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"dist":{"shasum":"9fb393347771b24d3c0a9434746bd92508b20fed","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.19.1.tgz","fileCount":320,"integrity":"sha512-iwLD04UsgLNt8RzZT0Kx5Vb9HnorNwaOrpl9vfJDVDPRTbw2ssfDWzLn93mQ1uja5uObsHyKLoAX/Lz5U9o1sA==","signatures":[{"sig":"MEUCIEX4RC/lrjbH89o0Y+i+cpks+HvE+riLS/qM+MMpZailAiEArmRW9eYK1QW7s8EYxHZP2esbRE4brYjQIuCJFzvCMq4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ankimcp%2fanki-mcp-server@0.19.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":921293},"jest":{"roots":["<rootDir>/src","<rootDir>/test"],"rootDir":".","forceExit":true,"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"coverageDirectory":"coverage","coverageThreshold":{"global":{"lines":70,"branches":70,"functions":70,"statements":70}},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["node_modules/(?!(commander|ky|mime|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"],"modulePathIgnorePatterns":["<rootDir>/dist","<rootDir>/dist-stdio","<rootDir>/dist-http"]},"main":"dist/main-http.js","types":"./dist/main-http.d.ts","engines":{"node":">=22.12.0"},"gitHead":"2f055755a62b0f8e073b3b09d8f3cfe5d1ef9253","mcpName":"ai.ankimcp/anki-mcp-server","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","build":"nest build","clean":"rm -rf dist dist-stdio dist-http node_modules","e2e:up":"cd .docker && docker compose up -d","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","prepare":"husky","test:ci":"jest --coverage --silent --maxWorkers=2","e2e:down":"cd .docker && docker compose down","e2e:logs":"cd .docker && docker compose logs -f","e2e:test":"jest --config test/e2e/jest-e2e.config.js","prebuild":"npm run generate:icon","test:cov":"jest --coverage","test:unit":"jest --testPathPatterns='spec\\.ts$' --silent","mcpb:clean":"rm -f *.mcpb","pack:local":"rm -f *.tgz && npm run build && npm pack","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:watch":"jest --watch","type-check":"tsc --noEmit","install:npm":"npm install -g @ankimcp/anki-mcp-server@tunnel","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\" && mcpb clean \"anki-mcp-server-$npm_package_version.mcpb\"","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","sync-version":"node scripts/sync-version.js","e2e:test:http":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='http\\.e2e-spec'","generate:icon":"node scripts/generate-icon.mjs","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","e2e:full:local":"./scripts/e2e-full.sh","e2e:test:stdio":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='stdio\\.e2e-spec'","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","start:dev:http":"nest start --watch --entryFile main-http","test:workflows":"jest test/workflows --silent","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:prod:http":"node dist/main-http","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","start:debug:http":"nest start --debug --watch --entryFile main-http","start:dev:tunnel":"nest start --watch --entryFile main-tunnel -- --tunnel --debug","start:prod:stdio":"node dist/main-stdio","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","upgrade:interactive":"npx npm-check-updates -i","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0afc1a9d-6517-4973-8757-69847b2a7af6"}},"repository":{"url":"git+https://github.com/ankimcp/anki-mcp-server.git","type":"git"},"_npmVersion":"11.12.1","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","directories":{},"_nodeVersion":"22.22.3","dependencies":{"ky":"^2.0.2","ws":"^8.21.0","zod":"^4.4.3","mime":"^4.1.0","pino":"^10.3.1","rxjs":"^7.8.2","unified":"^11.0.5","passport":"^0.7.0","commander":"^15.0.0","ipaddr.js":"^2.4.0","@nestjs/jwt":"^11.0.2","pino-pretty":"^13.1.3","@nestjs/core":"11.1.24","jsonwebtoken":"^9.0.3","passport-jwt":"^4.0.1","remark-parse":"^11.0.0","@nestjs/common":"^11.1.24","@nestjs/config":"^4.0.4","@rekog/mcp-nest":"^1.9.10","update-notifier":"^7.3.1","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","unist-util-visit":"^5.1.0","zod-to-json-schema":"^3.25.2","@nestjs/platform-express":"^11.1.24","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"packageManager":"npm@11.16.0","devDependencies":{"jest":"^30.4.2","husky":"^9.1.7","sharp":"^0.34.5","eslint":"^10.4.1","globals":"^17.6.0","ts-jest":"^29.4.11","ts-node":"^10.9.2","prettier":"^3.8.3","@types/ws":"^8.18.1","supertest":"^7.2.2","ts-loader":"^9.6.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@nestjs/cli":"^11.0.21","@types/jest":"^30.0.0","@types/node":"^25.9.1","@types/mdast":"^4.0.4","@types/express":"^5.0.6","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.1.24","@eslint/eslintrc":"^3.3.5","@types/supertest":"^7.2.0","typescript-eslint":"^8.60.1","@anthropic-ai/mcpb":"^2.1.2","@nestjs/schematics":"^11.1.0","source-map-support":"^0.5.21","@types/jsonwebtoken":"^9.0.10","@types/update-notifier":"^6.0.8","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6","@modelcontextprotocol/inspector":"^0.21.2"},"_npmOperationalInternal":{"tmp":"tmp/anki-mcp-server_0.19.1_1780584150647_0.2249244620660935","host":"s3://npm-registry-packages-npm-production"}},"0.19.2":{"name":"@ankimcp/anki-mcp-server","mcpName":"ai.ankimcp/anki-mcp-server","version":"0.19.2","description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","author":{"name":"Anatoly Tarnavsky"},"private":false,"license":"MIT","main":"dist/main-http.js","bin":{"ankimcp":"bin/ankimcp.js","anki-mcp-server":"bin/ankimcp.js"},"scripts":{"build":"nest build","prebuild":"npm run generate:icon","generate:icon":"node scripts/generate-icon.mjs","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","start:dev:stdio":"nest start --watch --entryFile main-stdio","start:dev:http":"nest start --watch --entryFile main-http","start:dev:tunnel":"nest start --watch --entryFile main-tunnel -- --tunnel --debug","start:debug:stdio":"nest start --debug --watch --entryFile main-stdio","start:debug:http":"nest start --debug --watch --entryFile main-http","start:prod:stdio":"node dist/main-stdio","start:prod:http":"node dist/main-http","lint":"eslint \"{src,test}/**/*.ts\" --fix","test":"jest","test:watch":"jest --watch","test:cov":"jest --coverage","test:unit":"jest --testPathPatterns='spec\\.ts$' --silent","test:tools":"jest src/mcp/primitives/essential/tools/__tests__ --silent","test:workflows":"jest test/workflows --silent","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:ci":"jest --coverage --silent --maxWorkers=2","test:single":"npm test -- src/mcp/primitives/essential/tools/__tests__/delete-notes.tool.spec.ts","e2e:up":"cd .docker && docker compose up -d","e2e:down":"cd .docker && docker compose down","e2e:logs":"cd .docker && docker compose logs -f","e2e:test":"jest --config test/e2e/jest-e2e.config.js","e2e:test:http":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='http\\.e2e-spec'","e2e:test:stdio":"jest --config test/e2e/jest-e2e.config.js --testPathPatterns='stdio\\.e2e-spec'","e2e:full:local":"./scripts/e2e-full.sh","type-check":"tsc --noEmit","clean":"rm -rf dist dist-stdio dist-http node_modules","inspector:stdio":"mcp-inspector --config mcp-inspector-config.json --server stdio-server","inspector:stdio:debug":"mcp-inspector --config mcp-inspector-config.json --server stdio-server-debug","inspector:http":"mcp-inspector --config mcp-inspector-config.json --server http-server","sync-version":"node scripts/sync-version.js","mcpb:clean":"rm -f *.mcpb","mcpb:bundle":"npm run sync-version && npm run mcpb:clean && npm run build && mcpb pack . \"anki-mcp-server-$npm_package_version.mcpb\" && mcpb clean \"anki-mcp-server-$npm_package_version.mcpb\"","pack:local":"rm -f *.tgz && npm run build && npm pack","install:local":"npm install -g ./ankimcp-anki-mcp-server-*.tgz","install:npm":"npm install -g @ankimcp/anki-mcp-server@tunnel","uninstall:local":"npm uninstall -g @ankimcp/anki-mcp-server","upgrade:interactive":"npx npm-check-updates -i","prepare":"husky"},"dependencies":{"@modelcontextprotocol/sdk":"1.29.0","@nestjs/common":"^11.1.24","@nestjs/config":"^4.0.4","@nestjs/core":"11.1.24","@nestjs/jwt":"^11.0.2","@nestjs/passport":"^11.0.5","@nestjs/platform-express":"^11.1.24","@rekog/mcp-nest":"^1.9.10","commander":"^15.0.0","ipaddr.js":"^2.4.0","jsonwebtoken":"^9.0.3","ky":"^2.0.2","mime":"^4.1.0","passport":"^0.7.0","passport-jwt":"^4.0.1","pino":"^10.3.1","pino-pretty":"^13.1.3","reflect-metadata":"^0.2.2","remark-parse":"^11.0.0","rxjs":"^7.8.2","unified":"^11.0.5","unist-util-visit":"^5.1.0","update-notifier":"^7.3.1","ws":"^8.21.0","zod":"^4.4.3","zod-to-json-schema":"^3.25.2"},"devDependencies":{"@anthropic-ai/mcpb":"^2.1.2","@eslint/eslintrc":"^3.3.5","@eslint/js":"^10.0.1","@modelcontextprotocol/inspector":"^0.21.2","@nestjs/cli":"^11.0.21","@nestjs/schematics":"^11.1.0","@nestjs/testing":"^11.1.24","@types/express":"^5.0.6","@types/jest":"^30.0.0","@types/jsonwebtoken":"^9.0.10","@types/mdast":"^4.0.4","@types/node":"^25.9.1","@types/supertest":"^7.2.0","@types/update-notifier":"^6.0.8","@types/ws":"^8.18.1","eslint":"^10.4.1","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6","globals":"^17.6.0","husky":"^9.1.7","jest":"^30.4.2","prettier":"^3.8.3","sharp":"^0.34.5","source-map-support":"^0.5.21","supertest":"^7.2.2","ts-jest":"^29.4.11","ts-loader":"^9.6.0","ts-node":"^10.9.2","tsconfig-paths":"^4.2.0","typescript":"^6.0.3","typescript-eslint":"^8.60.1"},"jest":{"moduleFileExtensions":["js","json","ts"],"rootDir":".","roots":["<rootDir>/src","<rootDir>/test"],"testRegex":".*\\.(spec|test)\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"collectCoverageFrom":["src/**/*.(t|j)s","!src/**/*.spec.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/__mocks__/**","!src/test-fixtures/**","!src/main.ts","!src/main-stdio.ts","!src/main-http.ts","!src/**/index.ts"],"coverageDirectory":"coverage","testEnvironment":"node","coverageThreshold":{"global":{"branches":70,"functions":70,"lines":70,"statements":70}},"moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@test/(.*)$":"<rootDir>/test/$1"},"transformIgnorePatterns":["node_modules/(?!(commander|ky|mime|unified|remark-parse|unist-util-visit|mdast-util-to-string|micromark.*|decode-named-character-reference|character-entities|unist-.*|vfile.*|bail|is-plain-obj|trough|devlop|mdast.*|hast.*)/)"],"modulePathIgnorePatterns":["<rootDir>/dist","<rootDir>/dist-stdio","<rootDir>/dist-http"],"forceExit":true},"packageManager":"npm@11.16.0","engines":{"node":">=22.12.0"},"repository":{"type":"git","url":"git+https://github.com/ankimcp/anki-mcp-server.git"},"bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"homepage":"https://ankimcp.ai","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"gitHead":"0b271a5335a9dad9c7aa791c9184890c22df65df","types":"./dist/main-http.d.ts","_id":"@ankimcp/anki-mcp-server@0.19.2","_nodeVersion":"22.22.3","_npmVersion":"11.12.1","dist":{"integrity":"sha512-ox82Ut4Ff0Lfl6f9BE1U8AfNdUik6TPQaufzLnLJrDImhWF+cSJ0p+c4b4lkwoV5AH32uWAJegXNbAPM8IrJEg==","shasum":"d3e2d609b205d17d7ebba09fad93b64d2a4e4b0a","tarball":"https://registry.npmjs.org/@ankimcp/anki-mcp-server/-/anki-mcp-server-0.19.2.tgz","fileCount":320,"unpackedSize":923351,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ankimcp%2fanki-mcp-server@0.19.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIF9++L8kncOIG9eysXlXOpCdh3Iy/WebhwvxaqXYmzAOAiBtfJmZVAoWH6a9zzFkflfYnYUw7PQIUvNW5JTMfzuScg=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0afc1a9d-6517-4973-8757-69847b2a7af6"}},"directories":{},"maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/anki-mcp-server_0.19.2_1780597661056_0.3891510780448273"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-10T16:58:43.382Z","modified":"2026-06-04T18:27:41.510Z","0.8.0":"2025-11-10T16:58:43.715Z","0.8.2":"2025-11-10T18:01:23.259Z","0.8.3":"2025-11-10T18:45:36.705Z","0.8.4":"2025-11-18T19:22:33.224Z","0.8.5":"2025-11-26T19:50:07.906Z","0.9.0":"2025-12-14T20:21:11.830Z","0.10.0":"2026-01-13T07:15:20.550Z","0.11.0":"2026-01-13T19:28:50.994Z","0.12.0":"2026-01-15T10:34:21.726Z","0.12.1-beta.1":"2026-01-15T11:28:07.587Z","0.12.1":"2026-01-22T10:50:36.737Z","0.13.0-tunnel.1":"2026-01-29T16:10:15.245Z","0.13.0":"2026-02-04T11:05:02.768Z","0.13.1":"2026-02-08T12:13:59.494Z","0.14.0":"2026-02-17T11:57:20.435Z","0.15.0":"2026-03-28T16:46:56.131Z","0.15.0-tunnel.1":"2026-04-02T09:40:22.852Z","0.15.0-tunnel.2":"2026-04-06T05:55:18.755Z","0.15.0-tunnel.3":"2026-04-06T13:44:34.895Z","0.15.0-tunnel.4":"2026-04-07T20:27:09.951Z","0.15.1":"2026-04-09T12:25:49.703Z","0.16.0":"2026-04-23T13:30:51.188Z","0.17.0":"2026-04-23T14:31:02.257Z","0.18.0":"2026-04-23T15:27:47.196Z","0.18.3":"2026-04-23T18:00:24.853Z","0.18.4":"2026-04-23T19:00:51.666Z","0.18.4-tunnel":"2026-04-24T07:54:18.696Z","0.18.5":"2026-04-24T08:37:36.870Z","0.18.5-tunnel":"2026-05-13T18:30:20.766Z","0.18.5-tunnel.1":"2026-05-13T20:01:46.463Z","0.18.5-tunnel.2":"2026-05-23T19:16:12.332Z","0.19.0":"2026-06-04T11:53:14.094Z","0.19.1":"2026-06-04T14:42:30.806Z","0.19.2":"2026-06-04T18:27:41.232Z"},"bugs":{"url":"https://github.com/ankimcp/anki-mcp-server/issues"},"author":{"name":"Anatoly Tarnavsky"},"license":"MIT","homepage":"https://ankimcp.ai","keywords":["mcp","model-context-protocol","anki","flashcards","spaced-repetition","ai","claude","chatgpt","ankiconnect"],"repository":{"type":"git","url":"git+https://github.com/ankimcp/anki-mcp-server.git"},"description":"Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards","maintainers":[{"name":"anatoly314","email":"anatolyt@gmail.com"}],"readme":"# Anki MCP Server\n\n[![Tests](https://github.com/ankimcp/anki-mcp-server/actions/workflows/test.yml/badge.svg)](https://github.com/ankimcp/anki-mcp-server/actions/workflows/test.yml)\n[![npm version](https://badge.fury.io/js/@ankimcp%2Fanki-mcp-server.svg)](https://www.npmjs.com/package/@ankimcp/anki-mcp-server)\n\n<div align=\"center\">\n  <img src=\"./docs/images/ankimcp.png\" alt=\"Anki + MCP Integration\" width=\"600\" />\n\n  <p><strong>Seamlessly integrate <a href=\"https://apps.ankiweb.net\">Anki</a> with AI assistants through the <a href=\"https://modelcontextprotocol.io\">Model Context Protocol</a></strong></p>\n</div>\n\n**Beta** - This project is in active development. APIs and features may change.\n\nA Model Context Protocol (MCP) server that enables AI assistants to interact with Anki, the spaced repetition flashcard application.\n\nTransform your Anki experience with natural language interaction - like having a private tutor. The AI assistant doesn't just present questions and answers; it can explain concepts, make the learning process more engaging and human-like, provide context, and adapt to your learning style. It can create and edit notes on the fly, turning your study sessions into dynamic conversations. More features coming soon!\n\n## Examples and Tutorials\n\nFor comprehensive guides, real-world examples, and step-by-step tutorials on using this MCP server with Claude Desktop, visit:\n\n**[ankimcp.ai](https://ankimcp.ai)** - Complete documentation with practical examples and use cases\n\nSee [`docs/`](./docs/README.md) for supplementary documentation, including the [reviewer setup guide](./docs/reviewer-setup.md) and the sample Anki deck.\n\n## Example Use Cases\n\nThree representative prompts showing the tool flows this server enables:\n\n1. **\"Help me review my Spanish deck.\"** — The assistant syncs with AnkiWeb (`sync`), fetches due cards (`get_due_cards` with deck filter), presents each card (`present_card`), and records your rating (`rate_card`). Natural study conversation with explanations tailored to you.\n\n2. **\"Create 10 Arabic vocab cards with RTL styling.\"** — The assistant lists note types (`modelNames`), creates a custom RTL model if needed (`createModel` + `updateModelStyling` for right-to-left CSS), then batch-creates the cards (`addNotes`).\n\n3. **\"Import this image from my Downloads folder into the front of the selected note.\"** — The assistant uploads the local file (`storeMediaFile` with a file path), reads the currently-selected note from the browser (`guiSelectedNotes` + `notesInfo`), and updates the front field with an `<img>` tag (`updateNoteFields`).\n\n## Available Tools\n\nThe server exposes **42 MCP tools** — 31 essential tools for everyday Anki operations and 11 GUI tools that drive the Anki desktop interface for note editing/creation workflows.\n\n### Essential Tools\n\n#### Review & Study\n- `sync` - Sync with AnkiWeb to pull latest data and push changes\n- `get_due_cards` - Get cards that are due for review, optionally filtered by deck\n- `get_cards` - Get cards with flexible filtering by state (due, new, learning, suspended, buried) and deck\n- `present_card` - Show a card for review with its question/front side\n- `rate_card` - Rate card performance (Again, Hard, Good, Easy) and schedule the next review\n\n#### Deck Management\n- `listDecks` - List all decks, optionally with per-deck card-count statistics\n- `deckStats` - Get comprehensive statistics for a single deck (counts, ease/interval distributions)\n- `createDeck` - Create a new empty deck (supports `Parent::Child`, max 2 levels)\n- `changeDeck` - Move cards to a different deck (created if it doesn't exist)\n\n#### Note Management\n- `addNote` - Create a single note with specified fields and tags\n- `addNotes` - Batch-create up to 100 notes sharing a deck and model (partial success supported)\n- `findNotes` - Search for notes using Anki query syntax (`deck:`, `tag:`, `is:due`, etc.)\n- `notesInfo` - Get detailed information about notes (fields, tags, CSS styling)\n- `updateNoteFields` - Update existing note fields (CSS-aware, supports HTML content)\n- `deleteNotes` - Delete notes and all associated cards (destructive, requires confirmation)\n\n#### Tag Management\n- `getTags` - Get all tags in the collection (use first to avoid duplication)\n- `addTags` - Add space-separated tags to specified notes\n- `removeTags` - Remove space-separated tags from specified notes\n- `replaceTags` - Rename a tag across specified notes\n- `clearUnusedTags` - Remove orphaned tags not used by any notes (destructive)\n\n#### Media Management\n- `getMediaFilesNames` - List media files in `collection.media`, optionally filtered by pattern\n- `retrieveMediaFile` - Download a media file as base64 content\n- `storeMediaFile` - Upload media from base64 data, an absolute file path, or a URL\n- `deleteMediaFile` - Remove a media file from `collection.media` (destructive)\n\n**💡 Best Practice for Images:**\n- ✅ **Use file paths** (e.g., `/Users/you/image.png`) - Fast and efficient\n- ✅ **Use URLs** (e.g., `https://example.com/image.jpg`) - Direct download\n- ❌ **Avoid base64** - Extremely slow and token-inefficient\n\nJust tell Claude where the image is, and it will handle the upload automatically using the most efficient method.\n\n#### Model/Template Management\n- `modelNames` - List all available note types/models\n- `modelFieldNames` - Get field names for a specific note type\n- `modelStyling` - Get CSS styling information for a note type\n- `createModel` - Create a new note type with custom fields, card templates, and CSS (e.g., RTL models)\n- `updateModelStyling` - Update the CSS styling for an existing note type (applies to all its cards)\n\n#### Statistics\n- `collection_stats` - Aggregated statistics across all decks with per-deck breakdown\n- `review_stats` - Review history analysis (temporal patterns, retention metrics, study streaks)\n\n### GUI Tools\n\nTools that drive the Anki desktop interface. Intended for note editing/creation and deck-management workflows, **not** for review sessions.\n\n- `guiBrowse` - Open the Card Browser and search for cards\n- `guiSelectCard` - Select a specific card in the Card Browser\n- `guiSelectedNotes` - Get IDs of notes currently selected in the Card Browser\n- `guiAddCards` - Open the Add Cards dialog with preset note details\n- `guiEditNote` - Open the note editor for a specific note\n- `guiDeckOverview` - Open the Deck Overview dialog for a specific deck\n- `guiDeckBrowser` - Open the Deck Browser dialog\n- `guiCurrentCard` - Get info about the current card in review mode\n- `guiShowQuestion` - Show the question side of the current card\n- `guiShowAnswer` - Show the answer side of the current card\n- `guiUndo` - Undo the last action in Anki\n\n## Prerequisites\n\n- [Anki](https://apps.ankiweb.net/) with [AnkiConnect](https://github.com/FooSoft/anki-connect) plugin installed\n- Node.js 22.12.0+\n\n## Installation\n\nThere are a few ways to get the server onto your machine. Once it's installed, head to [Connecting an AI Client](#connecting-an-ai-client) to wire it up to your AI assistant — locally or remotely.\n\n### npm (global or npx)\n\nThe general-purpose way to install the server, suitable for any MCP client that launches it directly.\n\nInstall it globally for clients that run the `ankimcp` command:\n\n```bash\nnpm install -g @ankimcp/anki-mcp-server\n```\n\nOr run it on demand with no install required:\n\n```bash\nnpx @ankimcp/anki-mcp-server\n```\n\n### MCPB Bundle (Recommended for Claude Desktop)\n\nThe easiest way to install this MCP server for Claude Desktop:\n\n1. Download the latest `.mcpb` bundle from the [Releases](https://github.com/ankimcp/anki-mcp-server/releases) page\n2. In Claude Desktop, install the extension:\n    - **Method 1**: Go to Settings → Extensions, then drag and drop the `.mcpb` file\n    - **Method 2**: Go to Settings → Developer → Extensions → Install Extension, then select the `.mcpb` file\n3. Configure AnkiConnect URL if needed (defaults to `http://localhost:8765`)\n4. Restart Claude Desktop\n\nThat's it! The bundle includes everything needed to run the server locally.\n\n> **For Anthropic MCP Directory reviewers:** a zero-to-integration walkthrough with a pre-populated sample deck lives in [`docs/reviewer-setup.md`](./docs/reviewer-setup.md).\n\n### Install from Source (for development)\n\nFor development or advanced usage:\n\n```bash\nnpm install\nnpm run build\n```\n\n## Connecting an AI Client\n\nThere are two ways an AI assistant can reach this server, depending on where the assistant runs:\n\n- **[Local](#local)** — the server runs on the same machine as the AI client (Claude Desktop, Cursor, Cline, Zed, or a local browser session). Use **STDIO** for desktop MCP clients, **HTTP** for local web-based tools.\n- **[Remote](#remote)** — a hosted/remote AI (e.g. ChatGPT or Claude.ai in the cloud) needs to reach the Anki running on your local machine. Use the managed **Tunnel** (✅ recommended — authenticated) or, as a lighter-weight unauthenticated alternative, **ngrok**.\n\n### Local\n\nThe server runs on the same computer as your AI client and talks to AnkiConnect on `localhost`.\n\n#### STDIO (primary local integration)\n\nSTDIO is the standard transport for local desktop MCP clients — **Claude Desktop**, **Cursor IDE**, **Cline**, **Zed Editor**, and others. The client launches the server as a subprocess and communicates over standard input/output.\n\n**Supported Clients:**\n- [Claude Desktop](https://claude.ai/download)\n- [Cursor IDE](https://www.cursor.com/) - AI-powered code editor\n- [Cline](https://github.com/cline/cline) - VS Code extension for AI assistance\n- [Zed Editor](https://zed.dev/) - Fast, modern code editor\n- Other MCP clients that support STDIO transport\n\nFor Claude Desktop, the [MCPB bundle](#mcpb-bundle-recommended-for-claude-desktop) is the easiest path. For other clients, configure the npm package with the `--stdio` flag.\n\n**Configuration - Choose one method:**\n\n**Method 1: Using npx (recommended - no installation needed)**\n\n```json\n{\n  \"mcpServers\": {\n    \"anki-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@ankimcp/anki-mcp-server\", \"--stdio\"],\n      \"env\": {\n        \"ANKI_CONNECT_URL\": \"http://localhost:8765\"\n      }\n    }\n  }\n}\n```\n\n**Method 2: Using global installation**\n\nFirst, install globally:\n```bash\nnpm install -g @ankimcp/anki-mcp-server\n```\n\nThen configure:\n```json\n{\n  \"mcpServers\": {\n    \"anki-mcp\": {\n      \"command\": \"ankimcp\",\n      \"args\": [\"--stdio\"],\n      \"env\": {\n        \"ANKI_CONNECT_URL\": \"http://localhost:8765\"\n      }\n    }\n  }\n}\n```\n\n**Configuration file locations:**\n- **Cursor IDE**: `~/.cursor/mcp.json` (macOS/Linux) or `%USERPROFILE%\\.cursor\\mcp.json` (Windows)\n- **Cline**: Accessible via settings UI in VS Code\n- **Zed Editor**: Install as MCP extension through extension marketplace\n\nFor client-specific features and troubleshooting, consult your MCP client's documentation. See also [Connect to Claude Desktop](#connect-to-claude-desktop-local-mode) for a config that points directly at a built `dist/main-stdio.js`.\n\n#### HTTP (local web-based AI)\n\nHTTP mode runs the server as a local web server speaking the MCP Streamable HTTP protocol. It's the transport a web-based AI tool talks to when pointed at your machine, and it's also what the [Remote](#remote) options expose to the outside world. On its own, HTTP mode binds to `localhost` only.\n\n**Setup - Choose one method:**\n\n**Method 1: Using npx (recommended - no installation needed)**\n\n```bash\n# Quick start\nnpx @ankimcp/anki-mcp-server\n\n# With custom options\nnpx @ankimcp/anki-mcp-server --port 8080 --host 0.0.0.0\nnpx @ankimcp/anki-mcp-server --anki-connect http://localhost:8765\n```\n\n**Method 2: Using global installation**\n\n```bash\n# Install once\nnpm install -g @ankimcp/anki-mcp-server\n\n# Run the server\nankimcp\n\n# With custom options\nankimcp --port 8080 --host 0.0.0.0\nankimcp --anki-connect http://localhost:8765\n```\n\n**Method 3: Install from source (for development)**\n\n```bash\nnpm install\nnpm run build\nnpm run start:prod:http\n```\n\nTo make a local HTTP server reachable by a cloud-hosted AI, use one of the [Remote](#remote) options below.\n\n### Remote\n\nA hosted/remote AI (such as ChatGPT or Claude.ai running in the cloud) can't reach `localhost` directly. These options expose your **local** Anki to the internet so a remote assistant can talk to it.\n\n#### Tunnel (✅ Recommended)\n\n> **Recommended remote path — authenticated & secure.** Unlike a raw public port, tunnel mode requires you to log in (OAuth 2.0 device flow), so the endpoint isn't open to anyone who guesses the URL.\n\nTunnel mode lets web-based AI assistants reach your **local** Anki without running your own tunnel. The server connects out to the managed AnkiMCP tunnel service (`wss://tunnel.ankimcp.ai`) over a WebSocket and is assigned a public URL. Authentication is built in — no ngrok account or separate tunnel process required, and you log in once.\n\n**Log in (OAuth device flow):**\n\nTunnel mode uses the OAuth 2.0 Device Authorization Grant. Logging in opens your browser automatically to an approval page with the code already embedded in the URL — nothing to type, just approve. (If the browser can't open, the terminal prints a verification URL and code to enter manually as a fallback.) On success, credentials are saved to `~/.ankimcp/credentials.json` (file permissions `0600`).\n\n```bash\n# Pre-authenticate (optional — --tunnel will trigger this automatically if needed)\nankimcp --login\nnpx @ankimcp/anki-mcp-server --login\n\n# Clear saved credentials\nankimcp --logout\n```\n\n**Start the tunnel:**\n\n```bash\n# Connect to the managed tunnel service (wss://tunnel.ankimcp.ai)\nankimcp --tunnel\nnpx @ankimcp/anki-mcp-server --tunnel\n\n# Override the tunnel server URL (must be ws:// or wss://) — e.g. for self-hosting\nankimcp --tunnel wss://my-tunnel.example.com\n```\n\nIf no credentials exist, `--tunnel` automatically starts the login flow first, then continues to the tunnel. This auto-login requires an interactive terminal — when stdout is not a TTY (systemd, headless Docker, CI), the server fast-fails and asks you to run `ankimcp --login` first. Once connected, the public tunnel URL is printed; press Ctrl+C to disconnect. Share that URL with your AI assistant.\n\n**Tunnel-mode environment variables:**\n\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `TUNNEL_SERVER_URL` | Tunnel server WebSocket URL (the `--tunnel`/`--login` flag value overrides this) | `wss://tunnel.ankimcp.ai` |\n| `TUNNEL_AUTH_CLIENT_ID` | OAuth client ID for the device flow. Advanced — only needed when pointing at a self-hosted tunnel/auth service. | (built-in) |\n\nThe device-flow auth endpoints (`/auth/device`, `/auth/token`) are derived from `TUNNEL_SERVER_URL`, so pointing `--tunnel` (or `TUNNEL_SERVER_URL`) at a different host also moves authentication to that host.\n\n**How it works:** Tunnel mode runs the MCP server in-process behind an in-memory transport (`McpModule` is started with no built-in transport). `TunnelMcpService` connects that in-memory transport to the MCP server, and `TunnelClient` bridges it to the remote tunnel service over a WebSocket — relaying MCP requests in and responses out. AnkiConnect is still only ever reached on your local machine.\n\n#### ngrok (unauthenticated alternative)\n\nIf you'd rather expose [local HTTP mode](#http-local-web-based-ai) publicly without an account on the managed tunnel, the built-in `--ngrok` flag launches an [ngrok](https://ngrok.com/) subprocess (`src/services/ngrok.service.ts`) and prints the public URL in the startup banner:\n\n```bash\n# One-time ngrok setup, then:\nankimcp --ngrok\n```\n\nThis route is **unauthenticated** — anyone with the URL can reach your Anki, so it's less secure than [Tunnel](#tunnel--recommended). Prefer Tunnel unless you have a specific reason to manage your own ngrok endpoint. (Requires a global ngrok install and authtoken; the manual two-terminal `ngrok http 3000` setup works too.)\n\n### CLI Options (all modes)\n\n```bash\nankimcp [options]\n\nOptions:\n  --stdio                        Run in STDIO mode (for MCP clients)\n  --tunnel [url]                 Connect via the managed tunnel (authenticated)\n  --login                        Authenticate for tunnel mode (OAuth device flow)\n  --logout                       Clear saved tunnel credentials\n  -p, --port <port>              Port to listen on (HTTP mode, default: 3000)\n  -h, --host <host>              Host to bind to (HTTP mode, default: 127.0.0.1)\n  -a, --anki-connect <url>       AnkiConnect URL (default: http://localhost:8765)\n  --ngrok                        Start ngrok tunnel (requires global ngrok installation)\n  --read-only                    Run in read-only mode (blocks all write operations)\n  --help                         Show help message\n\nUsage with npx (no installation needed):\n  npx @ankimcp/anki-mcp-server                        # HTTP mode\n  npx @ankimcp/anki-mcp-server --port 8080            # Custom port\n  npx @ankimcp/anki-mcp-server --stdio                # STDIO mode\n  npx @ankimcp/anki-mcp-server --tunnel               # Managed tunnel mode\n  npx @ankimcp/anki-mcp-server --ngrok                # HTTP mode with ngrok tunnel\n  npx @ankimcp/anki-mcp-server --read-only            # Read-only mode\n\nUsage with global installation:\n  npm install -g @ankimcp/anki-mcp-server             # Install once\n  ankimcp                                             # HTTP mode\n  ankimcp --port 8080                                 # Custom port\n  ankimcp --stdio                                     # STDIO mode\n  ankimcp --tunnel                                    # Managed tunnel mode\n  ankimcp --ngrok                                     # HTTP mode with ngrok tunnel\n  ankimcp --read-only                                 # Read-only mode\n```\n\n### Read-Only Mode (all modes)\n\nThe `--read-only` flag prevents any modifications to your Anki collection. When enabled:\n- All read operations work normally (browsing decks, viewing cards, searching notes)\n- Review operations are allowed (sync, answerCards, suspend/unsuspend)\n- Content modifications are blocked (addNote, deleteNotes, createDeck, updateNoteFields, etc.)\n- Useful for safely exploring Anki data without risk of accidental changes\n\n```bash\n# HTTP mode with read-only\nankimcp --read-only\n\n# STDIO mode with read-only\nankimcp --stdio --read-only\n\n# Can combine with other flags\nankimcp --ngrok --read-only\n```\n\nYou can also enable read-only mode via environment variable:\n```bash\nREAD_ONLY=true ankimcp\n```\n\nOr in MCP client configuration:\n```json\n{\n  \"mcpServers\": {\n    \"anki-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@ankimcp/anki-mcp-server\", \"--stdio\", \"--read-only\"],\n      \"env\": {\n        \"ANKI_CONNECT_URL\": \"http://localhost:8765\"\n      }\n    }\n  }\n}\n```\n\n## Connect to Claude Desktop (Local Mode)\n\nYou can configure the server in Claude Desktop by either:\n- Going to: Settings → Developer → Edit Config\n- Or manually editing the config file\n\n### Configuration\n\nAdd the following to your Claude Desktop config:\n\n```json\n{\n  \"mcpServers\": {\n    \"anki-mcp\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/anki-mcp-server/dist/main-stdio.js\"],\n      \"env\": {\n        \"ANKI_CONNECT_URL\": \"http://localhost:8765\"\n      }\n    }\n  }\n}\n```\n\nReplace `/path/to/anki-mcp-server` with your actual project path.\n\n### Config File Locations\n\n- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`\n- **Windows**: `%APPDATA%\\Claude\\claude_desktop_config.json`\n- **Linux**: `~/.config/Claude/claude_desktop_config.json`\n\nFor more details, see the [official MCP documentation](https://modelcontextprotocol.io/docs/develop/connect-local-servers).\n\n## Environment Variables (Optional)\n\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `ANKI_CONNECT_URL` | AnkiConnect URL | `http://localhost:8765` |\n| `ANKI_CONNECT_API_VERSION` | API version | `6` |\n| `ANKI_CONNECT_API_KEY` | API key if configured in AnkiConnect | - |\n| `ANKI_CONNECT_TIMEOUT` | Request timeout in ms | `5000` |\n| `READ_ONLY` | Enable read-only mode (`true` or `1`) | `false` |\n| `TUNNEL_SERVER_URL` | Tunnel server WebSocket URL (tunnel mode only) | `wss://tunnel.ankimcp.ai` |\n| `MEDIA_ALLOWED_TYPES` | Extra MIME types to allow for file path imports (comma-separated, e.g., `application/pdf`) | - |\n| `MEDIA_IMPORT_DIR` | Restrict file path imports to this directory | - |\n| `MEDIA_ALLOWED_HOSTS` | Allow specific private network hosts for URL imports (comma-separated, e.g., `192.168.1.50,my-nas`) | - |\n\n## Usage Examples\n\n### Searching and Updating Notes\n\n```\n# Search for notes in a specific deck\nfindNotes(query: \"deck:Spanish\")\n\n# Get detailed information about notes\nnotesInfo(notes: [1234567890, 1234567891])\n\n# Update a note's fields (HTML content supported)\nupdateNoteFields(note: {\n  id: 1234567890,\n  fields: {\n    \"Front\": \"<b>¿Cómo estás?</b>\",\n    \"Back\": \"How are you?\"\n  }\n})\n\n# Delete notes (requires confirmation)\ndeleteNotes(notes: [1234567890], confirmDeletion: true)\n```\n\n### Anki Query Syntax Examples\n\nThe `findNotes` tool supports Anki's powerful query syntax:\n\n- `\"deck:DeckName\"` - All notes in a specific deck\n- `\"tag:important\"` - Notes with the \"important\" tag\n- `\"is:due\"` - Cards that are due for review\n- `\"is:new\"` - New cards that haven't been studied\n- `\"added:7\"` - Notes added in the last 7 days\n- `\"front:hello\"` - Notes with \"hello\" in the front field\n- `\"flag:1\"` - Notes with red flag\n- `\"prop:due<=2\"` - Cards due within 2 days\n- `\"deck:Spanish tag:verb\"` - Spanish deck notes with verb tag (AND)\n- `\"deck:Spanish OR deck:French\"` - Notes from either deck\n\n### Important Notes\n\n#### CSS and HTML Handling\n- The `notesInfo` tool returns CSS styling information for proper rendering awareness\n- The `updateNoteFields` tool supports HTML content in fields and preserves CSS styling\n- Each note model has its own CSS styling - use `modelStyling` to get model-specific CSS\n\n#### Update Warning\n⚠️ **IMPORTANT**: When using `updateNoteFields`, do NOT view the note in Anki's browser while updating, or the fields will not update properly. Close the browser or switch to a different note before updating. See [Known Issues](#known-issues) for more details.\n\n#### Deletion Safety\nThe `deleteNotes` tool requires explicit confirmation (`confirmDeletion: true`) to prevent accidental deletions. Deleting a note removes ALL associated cards permanently.\n\n## Security\n\n### Media File Path and URL Validation\n\nThe media tools (`storeMediaFile`, `retrieveMediaFile`, `deleteMediaFile`) and `updateNoteFields` audio/picture fields include security validation to prevent misuse via prompt injection:\n\n- **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.\n- **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.\n- **Filenames** are sanitized to prevent path traversal (e.g., `../../` sequences are stripped).\n\nThese protections apply to `storeMediaFile`, `retrieveMediaFile`, `deleteMediaFile`, and `updateNoteFields` audio/picture fields.\n\n> Path traversal vulnerability reported by [Hideaki Takahashi](https://github.com/Koukyosyumei).\n\n## Privacy Policy\n\nThis MCP server runs locally on your machine and collects no telemetry, analytics, or usage data.\n\nFull policy: **[https://ankimcp.ai/privacy/](https://ankimcp.ai/privacy/)**\n\n- **Data collection**: The server collects nothing. It proxies requests between your AI assistant and your local AnkiConnect plugin.\n- **Usage / storage**: No server-side storage. All flashcard data stays in your Anki installation on your own device.\n- **Third-party sharing**: None. The server only talks to the AnkiConnect URL you configure (default: localhost). If you enable Anki's built-in AnkiWeb sync, that happens between your Anki install and AnkiWeb directly — outside this server's scope.\n- **Retention**: Not applicable — no data is retained server-side.\n- **Contact**: support@ankimcp.ai\n\n## Known Issues\n\nFor a comprehensive list of known issues and limitations, please visit our documentation:\n\n**[Known Issues Documentation](https://ankimcp.ai/docs/known-issues/)**\n\n### Critical Limitations\n\n#### Note Updates Fail When Viewed in Browser\n⚠️ **IMPORTANT**: When updating notes using `updateNoteFields`, the update will silently fail if the note is currently being viewed in Anki's browser window. This is an upstream AnkiConnect limitation.\n\n**Workaround**: Always close the browser or navigate to a different note before updating.\n\nFor more details and other known issues, see the [full documentation](https://ankimcp.ai/docs/known-issues/).\n\n## Troubleshooting\n\n### ERR_REQUIRE_ESM Error\n\nIf you see an error like:\n```\nError [ERR_REQUIRE_ESM]: require() of ES Module not supported\n```\n\nThis means your Node.js version is not supported. The server requires **Node.js 22.12.0+**.\n\n> **Note:** The minimum supported runtime is Node.js 22.12.0. Node.js 20 (Iron) reached end-of-life on 2026-04-30 and is no longer supported.\n\n**Check your version:**\n```bash\nnode --version\n```\n\n**Solution:** Update Node.js to version 22.12.0+. You can download it from [nodejs.org](https://nodejs.org/) or use a version manager like [nvm](https://github.com/nvm-sh/nvm).\n\n## Development\n\n### Transport Modes\n\nThis server supports three MCP transport modes via **separate entry points**:\n\n#### STDIO Mode (Default)\n- For local MCP clients like Claude Desktop\n- Uses standard input/output for communication\n- **Entry point**: `dist/main-stdio.js`\n- **Run**: `npm run start:prod:stdio` or `node dist/main-stdio.js`\n- **MCPB bundle**: Uses STDIO mode\n\n#### HTTP Mode (Streamable HTTP)\n- For remote MCP clients and web-based integrations\n- Uses MCP Streamable HTTP protocol\n- **Entry point**: `dist/main-http.js`\n- **Run**: `npm run start:prod:http` or `node dist/main-http.js`\n- **Default port**: 3000 (configurable via `PORT` env var)\n- **Default host**: `127.0.0.1` (configurable via `HOST` env var)\n- **MCP endpoint**: `http://127.0.0.1:3000/` (root path)\n\n#### Tunnel Mode (Managed WebSocket Tunnel)\n- For web-based AI assistants via the managed AnkiMCP tunnel service, with built-in authentication\n- The MCP server runs in-process behind an in-memory transport; `TunnelMcpService` wires it to the MCP server and `TunnelClient` bridges it to the tunnel service over a WebSocket\n- **Entry point**: `dist/main-tunnel.js`\n- **Run**: `node dist/main-tunnel.js --tunnel` (or `ankimcp --tunnel`)\n- **Auth**: `ankimcp --login` / `ankimcp --logout`; credentials stored at `~/.ankimcp/credentials.json` (`0600`)\n- **Dev**: `npm run start:dev:tunnel` (watch mode, runs `--tunnel --debug`)\n\n#### Building\n\n```bash\nnpm run build  # Builds once, creates dist/ with all three entry points\n```\n\n`main-stdio.js`, `main-http.js`, and `main-tunnel.js` are all built into the same `dist/` directory. Choose which to run based on your needs.\n\n#### HTTP Mode Configuration\n\n**Environment Variables:**\n- `PORT` - HTTP server port (default: 3000)\n- `HOST` - Bind address (default: 127.0.0.1 for localhost-only)\n- `ALLOWED_ORIGINS` - Comma-separated list of allowed origins for CORS (default: localhost)\n- `LOG_LEVEL` - Logging level (default: info)\n\n**Security:**\n- Origin header validation (prevents DNS rebinding attacks)\n- Binds to localhost (127.0.0.1) by default\n- No authentication in current version (OAuth support planned)\n\n**Example: Running Modes**\n```bash\n# Development - STDIO mode (watch mode with auto-rebuild)\nnpm run start:dev:stdio\n\n# Development - HTTP mode (watch mode with auto-rebuild)\nnpm run start:dev:http\n\n# Production - STDIO mode\nnpm run start:prod:stdio\n# or\nnode dist/main-stdio.js\n\n# Production - HTTP mode\nnpm run start:prod:http\n# or\nPORT=8080 HOST=0.0.0.0 node dist/main-http.js\n```\n\n### Building an MCPB Bundle\n\nTo create a distributable MCPB bundle:\n\n```bash\nnpm run mcpb:bundle\n```\n\nThis command will:\n1. Sync version from `package.json` to `manifest.json`\n2. Remove old `.mcpb` files\n3. Build the TypeScript project\n4. Package `dist/` and `node_modules/` into an `.mcpb` file\n5. Run `mcpb clean` to remove devDependencies (optimizes bundle from ~47MB to ~10MB)\n\nThe output file will be named `anki-mcp-server-X.X.X.mcpb` and can be distributed for one-click installation.\n\n#### What Gets Bundled\n\nThe MCPB bundle includes:\n- Compiled JavaScript (`dist/` directory - includes all three entry points)\n- Production dependencies only (`node_modules/` - devDependencies removed by `mcpb clean`)\n- Package metadata (`package.json`)\n- Manifest configuration (`manifest.json` - configured to use `main-stdio.js`)\n- Icon (`icon.png`)\n\nSource files, tests, and development configs are automatically excluded via `.mcpbignore`.\n\n### Logging in Claude Desktop\n\nWhen running as an MCPB extension in Claude Desktop, logs are written to:\n\n**Log Location**: `~/Library/Logs/Claude/` (macOS)\n\nThe logs are split across multiple files:\n- **main.log** - General Claude Desktop application logs\n- **mcp-server-Anki MCP Server.log** - MCP protocol messages for this extension\n- **mcp.log** - Combined MCP logs from all servers\n\n**Note**: The pino logger output (INFO, ERROR, WARN messages from the server code) goes to stderr and appears in the MCP-specific log files. Claude Desktop determines which log file receives which messages, but generally:\n- Application startup and MCP protocol communication → MCP-specific log\n- Server internal logging (pino) → Both MCP-specific log and sometimes main.log\n\nTo view logs in real-time:\n```bash\ntail -f ~/Library/Logs/Claude/mcp-server-Anki\\ MCP\\ Server.log\n```\n\n### Debugging the MCP Server\n\nYou can debug the MCP server using the MCP Inspector and attaching a debugger from your IDE (WebStorm, VS Code, etc.).\n\n**Note for HTTP Mode:** When testing HTTP mode (Streamable HTTP) with MCP Inspector, use \"Connection Type: Via Proxy\" to avoid CORS errors.\n\n#### Step 1: Configure Debug Server in MCP Inspector\n\nThe `mcp-inspector-config.json` already includes a debug server configuration:\n\n```json\n{\n  \"mcpServers\": {\n    \"stdio-server-debug\": {\n      \"type\": \"stdio\",\n      \"command\": \"node\",\n      \"args\": [\"--inspect-brk=9229\", \"dist/main-stdio.js\"],\n      \"env\": {\n        \"MCP_SERVER_NAME\": \"anki-mcp-stdio-debug\",\n        \"MCP_SERVER_VERSION\": \"1.0.0\",\n        \"LOG_LEVEL\": \"debug\"\n      },\n      \"note\": \"Anki MCP server with debugging enabled on port 9229\"\n    }\n  }\n}\n```\n\n#### Step 2: Start the Debug Server\n\nRun the MCP Inspector with the debug server:\n\n```bash\nnpm run inspector:debug\n```\n\nThis will start the server with Node.js debugging enabled on port 9229 and pause execution at the first line.\n\n#### Step 3: Attach Debugger from Your IDE\n\n##### WebStorm\n1. Go to **Run → Edit Configurations**\n2. Add a new **Attach to Node.js/Chrome** configuration\n3. Set the port to `9229`\n4. Click **Debug** to attach\n\n##### VS Code\n1. Open the Debug panel (Ctrl+Shift+D / Cmd+Shift+D)\n2. Select **Debug MCP Server (Attach)** configuration\n3. Press F5 to attach\n\n#### Step 4: Set Breakpoints and Debug\n\nOnce attached, you can:\n- Set breakpoints in your TypeScript source files\n- Step through code execution\n- Inspect variables and call stack\n- Use the debug console for evaluating expressions\n\nThe debugger will work with source maps, allowing you to debug the original TypeScript code rather than the compiled JavaScript.\n\n### Debugging with Claude Desktop\n\nYou can also debug the MCP server while it runs inside Claude Desktop by enabling the Node.js debugger and attaching your IDE.\n\n#### Step 1: Configure Claude Desktop for Debugging\n\nUpdate your Claude Desktop config to enable debugging:\n\n**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`\n**Windows**: `%APPDATA%\\Claude\\claude_desktop_config.json`\n**Linux**: `~/.config/Claude/claude_desktop_config.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"anki-mcp\": {\n      \"command\": \"node\",\n      \"args\": [\n        \"--inspect=9229\",\n        \"<path_to_project>/anki-mcp-server/dist/main-stdio.js\"\n      ],\n      \"env\": {\n        \"ANKI_CONNECT_URL\": \"http://localhost:8765\"\n      }\n    }\n  }\n}\n```\n\n**Key change**: Add `--inspect=9229` before the path to `dist/main-stdio.js`\n\n**Debug options**:\n- `--inspect=9229` - Start debugger immediately, doesn't block (recommended)\n- `--inspect-brk=9229` - Pause execution until debugger attaches (for debugging startup issues)\n\n#### Step 2: Restart Claude Desktop\n\nAfter saving the config, restart Claude Desktop. The MCP server will now run with debugging enabled on port 9229.\n\n#### Step 3: Attach Debugger from Your IDE\n\n##### WebStorm\n\n1. Go to **Run → Edit Configurations**\n2. Click the **+** button and select **Attach to Node.js/Chrome**\n3. Configure:\n    - **Name**: `Attach to Anki MCP (Claude Desktop)`\n    - **Host**: `localhost`\n    - **Port**: `9229`\n    - **Attach to**: `Node.js < 8` or `Chrome or Node.js > 6.3` (depending on WebStorm version)\n4. Click **OK**\n5. Click **Debug** (Shift+F9) to attach\n\n##### VS Code\n\n1. Add to `.vscode/launch.json`:\n\n```json\n{\n  \"version\": \"0.2.0\",\n  \"configurations\": [\n    {\n      \"type\": \"node\",\n      \"request\": \"attach\",\n      \"name\": \"Attach to Anki MCP (Claude Desktop)\",\n      \"port\": 9229,\n      \"skipFiles\": [\"<node_internals>/**\"],\n      \"sourceMaps\": true,\n      \"outFiles\": [\"${workspaceFolder}/dist/**/*.js\"]\n    }\n  ]\n}\n```\n\n2. Open the Debug panel (Ctrl+Shift+D / Cmd+Shift+D)\n3. Select **Attach to Anki MCP (Claude Desktop)**\n4. Press F5 to attach\n\n#### Step 4: Debug in Real-Time\n\nOnce attached, you can:\n- Set breakpoints in your TypeScript source files (e.g., `src/mcp/primitives/essential/tools/create-model.tool.ts`)\n- Use Claude Desktop normally - breakpoints will hit when tools are invoked\n- Step through code execution\n- Inspect variables and call stack\n- Use the debug console\n\n**Example**: Set a breakpoint in `create-model.tool.ts` at line 119, then ask Claude to create a new model. The debugger will pause at your breakpoint!\n\n**Note**: The debugger stays attached as long as Claude Desktop is running. You can detach/reattach anytime without restarting Claude Desktop.\n\n### Build Commands\n\n```bash\nnpm run build              # Build the project (compile TypeScript to JavaScript)\nnpm run start:dev:stdio    # STDIO mode with watch (auto-rebuild)\nnpm run start:dev:http     # HTTP mode with watch (auto-rebuild)\nnpm run type-check         # Run TypeScript type checking\nnpm run lint               # Run ESLint\nnpm run mcpb:bundle        # Sync version, clean, build, and create MCPB bundle\n```\n\n### NPM Package Testing (Local)\n\nTest the npm package locally before publishing:\n\n```bash\n# 1. Create local package\nnpm run pack:local         # Builds and creates @ankimcp/anki-mcp-server-*.tgz\n\n# 2. Install globally from local package\nnpm run install:local      # Installs from ./@ankimcp/anki-mcp-server-*.tgz\n\n# 3. Test the command\nankimcp                    # Runs HTTP server on port 3000\n\n# 4. Uninstall when done testing\nnpm run uninstall:local    # Removes global installation\n```\n\n**How it works:**\n- `npm pack` creates a `.tgz` file identical to what npm publish would create\n- Installing from `.tgz` simulates what users get from `npm install -g ankimcp`\n- This lets you test the full user experience before publishing to npm\n\n### Testing Commands\n\n```bash\nnpm test              # Run all tests\nnpm run test:unit     # Run unit tests only\nnpm run test:tools    # Run tool-specific tests\nnpm run test:workflows # Run workflow integration tests\nnpm run test:e2e      # Run end-to-end tests\nnpm run test:cov      # Run tests with coverage report\nnpm run test:watch    # Run tests in watch mode\nnpm run test:debug    # Run tests with debugger\nnpm run test:ci       # Run tests for CI (silent, with coverage)\n```\n\n### Test Coverage\n\nThe project maintains 70% minimum coverage thresholds for:\n- Branches\n- Functions\n- Lines\n- Statements\n\nCoverage reports are generated in the `coverage/` directory.\n\n## Versioning\n\nThis project follows [Semantic Versioning](https://semver.org/) with a pre-1.0 development approach:\n\n- **0.x.x** - Beta/Development versions (current phase)\n    - **0.1.x** - Bug fixes and patches\n    - **0.2.0+** - New features or minor improvements\n    - **Breaking changes** are acceptable in 0.x versions\n\n- **1.0.0** - First stable release\n    - Will be released when the API is stable and tested\n    - Breaking changes will require major version bumps (2.0.0, etc.)\n\n**Current Status**: `0.19.0` - Active beta development. Recent features include batch note creation (`addNotes`), integrated ngrok tunneling (`--ngrok` flag), media file management, model/template management, and comprehensive deck statistics. APIs may change based on feedback and testing.\n\n### MCPB spec evolution\n\nThis project targets Anthropic's MCPB bundle specification, which is still evolving. We track the spec at [https://github.com/modelcontextprotocol/mcpb](https://github.com/modelcontextprotocol/mcpb) and may introduce breaking changes to stay compliant. Breaking changes are permitted under the 0.x.x versioning scheme.\n\n## Similar Projects\n\nIf you're exploring Anki MCP integrations, here are other projects in this space:\n\n### [scorzeth/anki-mcp-server](https://github.com/scorzeth/anki-mcp-server)\n- **Status**: Appears to be abandoned (no recent updates)\n- Early implementation of Anki MCP integration\n\n### [nailuoGG/anki-mcp-server](https://github.com/nailuoGG/anki-mcp-server)\n- **Approach**: Lightweight, single-file implementation\n- **Architecture**: Procedural code structure with all tools in one file\n- **Good for**: Simple use cases, minimal dependencies\n\n**Why this project differs:**\n- **Enterprise-grade architecture**: Built on NestJS with dependency injection\n- **Modular design**: Each tool is a separate class with clear separation of concerns\n- **Maintainability**: Easy to extend with new features without touching existing code\n- **Testing**: Comprehensive test suite with 70% coverage requirement\n- **Type safety**: Strict TypeScript with Zod validation\n- **Error handling**: Robust error handling with helpful user feedback\n- **Production-ready**: Proper logging, progress reporting, and MCPB bundle support\n- **Scalability**: Can easily grow from basic tools to complex workflows\n\n**Use case**: If you need a solid foundation for building advanced Anki integrations or plan to extend functionality significantly, this project's architectural approach makes it easier to maintain and scale over time.\n\n## Useful Links\n\n- [Model Context Protocol Documentation](https://modelcontextprotocol.io/docs)\n- [AnkiConnect API Documentation](https://git.sr.ht/~foosoft/anki-connect)\n- [Claude Desktop Download](https://claude.ai/download)\n- [Building Desktop Extensions (Anthropic Blog)](https://www.anthropic.com/engineering/desktop-extensions)\n- [MCP Servers Repository](https://github.com/modelcontextprotocol/servers)\n- [NestJS Documentation](https://docs.nestjs.com)\n- [Anki Official Website](https://apps.ankiweb.net/)\n\n## License & Attribution\n\nThis project is licensed under the MIT License — see [LICENSE](LICENSE) for the full text.\n\nCopyright © 2026 Anatoly Tarnavsky.\n\n### Third-Party Attributions\n\n- **Anki®** is a registered trademark of Ankitects Pty Ltd. This project is an unofficial third-party tool and is not affiliated with, endorsed by, or sponsored by Ankitects Pty Ltd. The Anki logo is used under the alternative license for referencing Anki with a link to [https://apps.ankiweb.net](https://apps.ankiweb.net). For the official Anki application, visit [https://apps.ankiweb.net](https://apps.ankiweb.net).\n\n- **Model Context Protocol (MCP)** is an open standard by Anthropic. The MCP logo is from the official [MCP documentation repository](https://github.com/modelcontextprotocol/docs) and is used under the MIT License. For more information about MCP, visit [https://modelcontextprotocol.io](https://modelcontextprotocol.io).\n\n- This is an independent project that bridges Anki and MCP technologies. All trademarks, service marks, trade names, product names, and logos are the property of their respective owners.\n","readmeFilename":"README.md"}