{"_id":"calibre-mcp","_rev":"25-a7cd3a59738609b39522dcd7344a525a","name":"calibre-mcp","dist-tags":{"latest":"0.7.4"},"versions":{"0.1.0":{"name":"calibre-mcp","version":"0.1.0","keywords":["mcp","model-context-protocol","mcp-server","calibre","ebooks","epub","semantic-search","claude"],"author":{"url":"https://github.com/caelum29","name":"Artem Sorochynskyi","email":"caelum29@gmail.com"},"license":"MIT","_id":"calibre-mcp@0.1.0","maintainers":[{"name":"caelum29","email":"caelum29@gmail.com"}],"homepage":"https://github.com/caelum29/calibre-mcp#readme","bugs":{"url":"https://github.com/caelum29/calibre-mcp/issues"},"bin":{"calibre-mcp":"dist/run-stdio.js"},"dist":{"shasum":"b1fe2223b8defcf1cd1b43de1c58f1f2aacafca5","tarball":"https://registry.npmjs.org/calibre-mcp/-/calibre-mcp-0.1.0.tgz","fileCount":193,"integrity":"sha512-Bbx3/yrQX2jpzYQqv6qDURD5dQCQOB3ReL/v/DAauG/Q0QR3MEmxNEk6Zti2HmEqbo8Do/kTdxeYC9pBJMWkyg==","signatures":[{"sig":"MEUCIQCcuTVDSVl24ppidpOr/BofNBcKovQl3yx7svXVCHmVnwIgPI7msCzoZfIN2wov6XoD+swTNuS2LR2Nm3v43rex+Nc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":426648},"type":"module","engines":{"node":">=22.5"},"gitHead":"217a98e5aac3f8177cf63a83aed4fa6cea6d0da5","mcpName":"io.github.caelum29/calibre-mcp","scripts":{"dev":"tsx watch src/run-stdio.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/run-stdio.js","inspect":"tsc -p tsconfig.json && mcp-inspector node dist/run-stdio.js","pack:mcpb":"node scripts/pack-mcpb.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:model":"RUN_MODEL_TESTS=1 vitest run test/semantic/embedder.integration.test.ts","test:watch":"vitest","prepublishOnly":"pnpm run build && pnpm run test"},"_npmUser":{"name":"caelum29","email":"caelum29@gmail.com"},"repository":{"url":"git+https://github.com/caelum29/calibre-mcp.git","type":"git"},"_npmVersion":"11.12.1","description":"The most capable Calibre MCP server — full read/write tool surface plus library- and book-scoped semantic search.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"zod":"4.4.3","snowball-stemmers":"^0.6.0","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","vitest":"4.1.9","typescript":"5.9.3","@types/node":"24.13.2","@modelcontextprotocol/inspector":"0.22.0"},"optionalDependencies":{"@huggingface/transformers":"4.2.0"},"_npmOperationalInternal":{"tmp":"tmp/calibre-mcp_0.1.0_1782944575804_0.8343026416584354","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"calibre-mcp","version":"0.1.1","keywords":["mcp","model-context-protocol","mcp-server","calibre","ebooks","epub","semantic-search","claude"],"author":{"url":"https://github.com/caelum29","name":"Artem Sorochynskyi","email":"caelum29@gmail.com"},"license":"MIT","_id":"calibre-mcp@0.1.1","maintainers":[{"name":"caelum29","email":"caelum29@gmail.com"}],"homepage":"https://github.com/caelum29/calibre-mcp#readme","bugs":{"url":"https://github.com/caelum29/calibre-mcp/issues"},"bin":{"calibre-mcp":"dist/run-stdio.js"},"dist":{"shasum":"9e698dff293e62ddb1755c326b27f93806146e0b","tarball":"https://registry.npmjs.org/calibre-mcp/-/calibre-mcp-0.1.1.tgz","fileCount":193,"integrity":"sha512-8Cp3/qS2I+b6Sjhvkvd10Cnh/1CQeowKN/hh2BkN35lKzo/CzPSS/IZPrEMAkxqZCFCHe6fiEXPbubWvZ1YLSQ==","signatures":[{"sig":"MEYCIQCiLGZmY3VDDZyGpdg5i+UXqzy6R5csSlorZ6illDz3IQIhAIhOnbw464zx0UyVuhr6NX6beLE3+jN1KJn0wfcVUNkK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/calibre-mcp@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":426648},"type":"module","engines":{"node":">=22.5"},"gitHead":"21c6b07a43d77f9b85d8325f1c419e3bfcb20a85","mcpName":"io.github.caelum29/calibre-mcp","scripts":{"dev":"tsx watch src/run-stdio.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/run-stdio.js","inspect":"tsc -p tsconfig.json && mcp-inspector node dist/run-stdio.js","pack:mcpb":"node scripts/pack-mcpb.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:model":"RUN_MODEL_TESTS=1 vitest run test/semantic/embedder.integration.test.ts","test:watch":"vitest","prepublishOnly":"pnpm run build && pnpm run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:75fb0b91-fe5f-45de-8535-6c3afb7e0537"}},"repository":{"url":"git+https://github.com/caelum29/calibre-mcp.git","type":"git"},"_npmVersion":"11.18.0","description":"The most capable Calibre MCP server — full read/write tool surface plus library- and book-scoped semantic search.","directories":{},"_nodeVersion":"24.17.0","dependencies":{"zod":"4.4.3","snowball-stemmers":"^0.6.0","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","vitest":"4.1.9","typescript":"5.9.3","@types/node":"24.13.2","@modelcontextprotocol/inspector":"0.22.0"},"optionalDependencies":{"@huggingface/transformers":"4.2.0"},"_npmOperationalInternal":{"tmp":"tmp/calibre-mcp_0.1.1_1782968399870_0.32910105170927606","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"calibre-mcp","version":"0.1.2","keywords":["mcp","model-context-protocol","mcp-server","calibre","ebooks","epub","semantic-search","claude"],"author":{"url":"https://github.com/caelum29","name":"Artem Sorochynskyi","email":"caelum29@gmail.com"},"license":"MIT","_id":"calibre-mcp@0.1.2","maintainers":[{"name":"caelum29","email":"caelum29@gmail.com"}],"homepage":"https://github.com/caelum29/calibre-mcp#readme","bugs":{"url":"https://github.com/caelum29/calibre-mcp/issues"},"bin":{"calibre-mcp":"dist/run-stdio.js"},"dist":{"shasum":"9fe6a1581c99f39b762fd9257f3732012eda0da2","tarball":"https://registry.npmjs.org/calibre-mcp/-/calibre-mcp-0.1.2.tgz","fileCount":193,"integrity":"sha512-Nx1NZZXYMOSCAysRMS1BUYmP//6lVZObyhXcai16HEMB/9ZUv72EuzuF67n8T6vQHK90S4FDvJk/Y1E5DQsPZg==","signatures":[{"sig":"MEQCIGwElGkhfxUZq0SZh6DD+boJX5bxzKG5avCk8hlBKZGhAiAlPnk27DXr9ZYeJ6M86q3mR0yAm8Y2pxrwd9KxpqjDWg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/calibre-mcp@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":427047},"type":"module","engines":{"node":">=22.5"},"gitHead":"cf90a308359c646e7ca529a8e5ff038dbdda4d37","mcpName":"io.github.caelum29/calibre-mcp","scripts":{"dev":"tsx watch src/run-stdio.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/run-stdio.js","inspect":"tsc -p tsconfig.json && mcp-inspector node dist/run-stdio.js","pack:mcpb":"node scripts/pack-mcpb.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:model":"RUN_MODEL_TESTS=1 vitest run test/semantic/embedder.integration.test.ts","test:watch":"vitest","prepublishOnly":"pnpm run build && pnpm run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:75fb0b91-fe5f-45de-8535-6c3afb7e0537"}},"repository":{"url":"git+https://github.com/caelum29/calibre-mcp.git","type":"git"},"_npmVersion":"11.18.0","description":"The most capable Calibre MCP server — full read/write tool surface plus library- and book-scoped semantic search.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.4.3","snowball-stemmers":"^0.6.0","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","vitest":"4.1.9","typescript":"5.9.3","@types/node":"24.13.2","@modelcontextprotocol/inspector":"0.22.0"},"optionalDependencies":{"@huggingface/transformers":"4.2.0"},"_npmOperationalInternal":{"tmp":"tmp/calibre-mcp_0.1.2_1782971468726_0.3774484111751095","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"calibre-mcp","version":"0.1.3","keywords":["mcp","model-context-protocol","mcp-server","calibre","ebooks","epub","semantic-search","claude"],"author":{"url":"https://github.com/caelum29","name":"Artem Sorochynskyi","email":"caelum29@gmail.com"},"license":"MIT","_id":"calibre-mcp@0.1.3","maintainers":[{"name":"caelum29","email":"caelum29@gmail.com"}],"homepage":"https://github.com/caelum29/calibre-mcp#readme","bugs":{"url":"https://github.com/caelum29/calibre-mcp/issues"},"bin":{"calibre-mcp":"dist/run-stdio.js"},"dist":{"shasum":"eb6cd118c01816a6ff8f6836e1b7a808c9ec6a71","tarball":"https://registry.npmjs.org/calibre-mcp/-/calibre-mcp-0.1.3.tgz","fileCount":193,"integrity":"sha512-UEyzb/dC9prNHzwfyKg8dl76Yy+/flIlFchxguwo4ZMpXww67pr1fKo0yNqRqsT8Rm1RdItzv7DBl+ewI+JIIw==","signatures":[{"sig":"MEUCIFAZigk1xWS0FFbe+y2szSWEkXGSKsPgk6+UL0JZjKvQAiEArOifstTgqv6NX+fF4o42TgskzoJJzFc63MjG3rTVn2g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/calibre-mcp@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":441767},"type":"module","engines":{"node":">=22.5"},"gitHead":"03ca96136c53a80507b3ce5b3b94d1f3f890d03b","mcpName":"io.github.caelum29/calibre-mcp","scripts":{"dev":"tsx watch src/run-stdio.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/run-stdio.js","inspect":"tsc -p tsconfig.json && mcp-inspector node dist/run-stdio.js","pack:mcpb":"node scripts/pack-mcpb.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:model":"RUN_MODEL_TESTS=1 vitest run test/semantic/embedder.integration.test.ts","test:watch":"vitest","prepublishOnly":"pnpm run build && pnpm run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:75fb0b91-fe5f-45de-8535-6c3afb7e0537"}},"repository":{"url":"git+https://github.com/caelum29/calibre-mcp.git","type":"git"},"_npmVersion":"11.18.0","description":"The most capable Calibre MCP server — full read/write tool surface plus library- and book-scoped semantic search.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.4.3","snowball-stemmers":"^0.6.0","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","vitest":"4.1.9","typescript":"5.9.3","@types/node":"24.13.2","@modelcontextprotocol/inspector":"0.22.0"},"optionalDependencies":{"@huggingface/transformers":"4.2.0"},"_npmOperationalInternal":{"tmp":"tmp/calibre-mcp_0.1.3_1782978017171_0.1010991243531918","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"calibre-mcp","version":"0.1.4","keywords":["mcp","model-context-protocol","mcp-server","calibre","ebooks","epub","semantic-search","claude"],"author":{"url":"https://github.com/caelum29","name":"Artem Sorochynskyi","email":"caelum29@gmail.com"},"license":"MIT","_id":"calibre-mcp@0.1.4","maintainers":[{"name":"caelum29","email":"caelum29@gmail.com"}],"homepage":"https://github.com/caelum29/calibre-mcp#readme","bugs":{"url":"https://github.com/caelum29/calibre-mcp/issues"},"bin":{"calibre-mcp":"dist/run-stdio.js"},"dist":{"shasum":"3131bcb1f1516722e0080971569f3d0cd960eec6","tarball":"https://registry.npmjs.org/calibre-mcp/-/calibre-mcp-0.1.4.tgz","fileCount":196,"integrity":"sha512-THBW1KSIz8WXOeL439A+tNlH7I9xwRcL0Y/GGcIfzgCgCrsKnnCBp3e5tKXJ9a0QuIyozJJnCFRW+JR0SHhLHg==","signatures":[{"sig":"MEQCIEI8heTCb6GVlYbaLo8wN/Gh8dVHAk6174n9T8Ytb+f7AiABWNkVeT/RXgB1FhQG+Q4i8385F6sya7RbI4eB1vRISA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/calibre-mcp@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":453281},"type":"module","engines":{"node":">=22.5"},"gitHead":"048d0ccb47924be815263c1f8568b1a6a86aefd5","mcpName":"io.github.caelum29/calibre-mcp","scripts":{"dev":"tsx watch src/run-stdio.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/run-stdio.js","inspect":"tsc -p tsconfig.json && mcp-inspector node dist/run-stdio.js","pack:mcpb":"node scripts/pack-mcpb.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:model":"RUN_MODEL_TESTS=1 vitest run test/semantic/embedder.integration.test.ts","test:watch":"vitest","prepublishOnly":"pnpm run build && pnpm run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:75fb0b91-fe5f-45de-8535-6c3afb7e0537"}},"repository":{"url":"git+https://github.com/caelum29/calibre-mcp.git","type":"git"},"_npmVersion":"11.18.0","description":"The most capable Calibre MCP server — full read/write tool surface plus library- and book-scoped semantic search.","directories":{},"_nodeVersion":"24.17.0","dependencies":{"zod":"4.4.3","snowball-stemmers":"^0.6.0","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","vitest":"4.1.9","typescript":"5.9.3","@types/node":"24.13.2","@modelcontextprotocol/inspector":"0.22.0"},"optionalDependencies":{"@huggingface/transformers":"4.2.0"},"_npmOperationalInternal":{"tmp":"tmp/calibre-mcp_0.1.4_1782999398657_0.3280016450592247","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"calibre-mcp","version":"0.1.5","keywords":["mcp","model-context-protocol","mcp-server","calibre","ebooks","epub","semantic-search","claude"],"author":{"url":"https://github.com/caelum29","name":"Artem Sorochynskyi","email":"caelum29@gmail.com"},"license":"MIT","_id":"calibre-mcp@0.1.5","maintainers":[{"name":"caelum29","email":"caelum29@gmail.com"}],"homepage":"https://github.com/caelum29/calibre-mcp#readme","bugs":{"url":"https://github.com/caelum29/calibre-mcp/issues"},"bin":{"calibre-mcp":"dist/run-stdio.js"},"dist":{"shasum":"57a442ef665a5917a63d26c4f08bd2c0e79c01eb","tarball":"https://registry.npmjs.org/calibre-mcp/-/calibre-mcp-0.1.5.tgz","fileCount":202,"integrity":"sha512-qfQ/a59TtYTeI9C3xQCMSoTJCYhReP9Q0NBtQ+86nlgANvw70KkHO0l/3p/Sdj6b0r2rFvbkz3EYqENs4dZ5fw==","signatures":[{"sig":"MEUCIFJ6LEke/A1WF5+zzCPoXuUcXSoexAzcdb9x+AbZu0fUAiEAzGXgKfz4jtduJN+8eqP15jd3+G9mkTUND/xeFQKHP5k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/calibre-mcp@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":468138},"type":"module","engines":{"node":">=22.5"},"gitHead":"5d8889c0cd3bb934d61ea24a442cd290ba941e5d","mcpName":"io.github.caelum29/calibre-mcp","scripts":{"dev":"tsx watch src/run-stdio.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/run-stdio.js","inspect":"tsc -p tsconfig.json && mcp-inspector node dist/run-stdio.js","pack:mcpb":"node scripts/pack-mcpb.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:model":"RUN_MODEL_TESTS=1 vitest run test/semantic/embedder.integration.test.ts","test:watch":"vitest","prepublishOnly":"pnpm run build && pnpm run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:75fb0b91-fe5f-45de-8535-6c3afb7e0537"}},"repository":{"url":"git+https://github.com/caelum29/calibre-mcp.git","type":"git"},"_npmVersion":"11.18.0","description":"The most capable Calibre MCP server — full read/write tool surface plus library- and book-scoped semantic search.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.4.3","snowball-stemmers":"^0.6.0","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","vitest":"4.1.9","typescript":"5.9.3","@types/node":"24.13.2","@modelcontextprotocol/inspector":"0.22.0"},"optionalDependencies":{"@huggingface/transformers":"4.2.0"},"_npmOperationalInternal":{"tmp":"tmp/calibre-mcp_0.1.5_1783006367413_0.2571840057239845","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"calibre-mcp","version":"0.2.0","keywords":["mcp","model-context-protocol","mcp-server","calibre","ebooks","epub","semantic-search","claude"],"author":{"url":"https://github.com/caelum29","name":"Artem Sorochynskyi","email":"caelum29@gmail.com"},"license":"MIT","_id":"calibre-mcp@0.2.0","maintainers":[{"name":"caelum29","email":"caelum29@gmail.com"}],"homepage":"https://github.com/caelum29/calibre-mcp#readme","bugs":{"url":"https://github.com/caelum29/calibre-mcp/issues"},"bin":{"calibre-mcp":"dist/run-stdio.js"},"dist":{"shasum":"5c51093cf71b44f8fdb55335b3d5b00c402a59dd","tarball":"https://registry.npmjs.org/calibre-mcp/-/calibre-mcp-0.2.0.tgz","fileCount":211,"integrity":"sha512-nOihUUcGxNB+BBqKuDlTlN1Pb00a9YaIfiOguKEHx5Smat1trK2+88gEPKJNCiYv6dbxLtGZoFhPSGzF/44Z/w==","signatures":[{"sig":"MEQCICVNp/y8lWaYCAs7Cl/P+K544t2AbWi6Q2XnewxausDDAiBfE9NG3zDGom7yHzMbzYimbfJqlJPuTAnz6fVj26oFTw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/calibre-mcp@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":585456},"type":"module","engines":{"node":">=22.5"},"gitHead":"83070febaa8d3d317280c29bade4dde9363cfea1","mcpName":"io.github.caelum29/calibre-mcp","scripts":{"dev":"tsx watch src/run-stdio.ts","eval":"node --import tsx test/eval/retrieval/run.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/run-stdio.js","inspect":"tsc -p tsconfig.json && mcp-inspector node dist/run-stdio.js","pack:mcpb":"node scripts/pack-mcpb.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:model":"RUN_MODEL_TESTS=1 vitest run test/semantic/embedder.integration.test.ts","test:watch":"vitest","prepublishOnly":"pnpm run build && pnpm run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:75fb0b91-fe5f-45de-8535-6c3afb7e0537"}},"repository":{"url":"git+https://github.com/caelum29/calibre-mcp.git","type":"git"},"_npmVersion":"11.18.0","description":"The most capable Calibre MCP server — full read/write tool surface plus library- and book-scoped semantic search.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.4.3","snowball-stemmers":"^0.6.0","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","vitest":"4.1.9","typescript":"5.9.3","@types/node":"24.13.2","@modelcontextprotocol/inspector":"0.22.0"},"optionalDependencies":{"@huggingface/transformers":"4.2.0"},"_npmOperationalInternal":{"tmp":"tmp/calibre-mcp_0.2.0_1783589096582_0.17636040778477313","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"calibre-mcp","version":"0.2.1","keywords":["mcp","model-context-protocol","mcp-server","calibre","ebooks","epub","semantic-search","claude"],"author":{"url":"https://github.com/caelum29","name":"Artem Sorochynskyi","email":"caelum29@gmail.com"},"license":"MIT","_id":"calibre-mcp@0.2.1","maintainers":[{"name":"caelum29","email":"caelum29@gmail.com"}],"homepage":"https://github.com/caelum29/calibre-mcp#readme","bugs":{"url":"https://github.com/caelum29/calibre-mcp/issues"},"bin":{"calibre-mcp":"dist/run-stdio.js"},"dist":{"shasum":"8dee1810e166ad22d0b6ff17b29e038daf6840b1","tarball":"https://registry.npmjs.org/calibre-mcp/-/calibre-mcp-0.2.1.tgz","fileCount":211,"integrity":"sha512-tbff+TBxSIXdB7/a9mhcmy8sWlQ91Wz7ALNme9q9rsy4WVp0uPyG7cTzqDvv61Ar69fj/9Sh3GkHu0XQpuq+jQ==","signatures":[{"sig":"MEUCIQCCoTeiOX09CCNapormNEtcOGhLoJ0Bmrqwyr6E7ZdMNwIgTNzIGL1LDBLPPNIJRdcR/TB2vicvDjBQkWSZpZympIA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/calibre-mcp@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":592705},"type":"module","engines":{"node":">=22.5"},"gitHead":"c5ca1cf9f93996f3c8b36c08f9909b5f4db9889c","mcpName":"io.github.caelum29/calibre-mcp","scripts":{"dev":"tsx watch src/run-stdio.ts","eval":"node --import tsx test/eval/retrieval/run.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/run-stdio.js","inspect":"tsc -p tsconfig.json && mcp-inspector node dist/run-stdio.js","pack:mcpb":"node scripts/pack-mcpb.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:model":"RUN_MODEL_TESTS=1 vitest run test/semantic/embedder.integration.test.ts","test:watch":"vitest","prepublishOnly":"pnpm run build && pnpm run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:75fb0b91-fe5f-45de-8535-6c3afb7e0537"}},"repository":{"url":"git+https://github.com/caelum29/calibre-mcp.git","type":"git"},"_npmVersion":"11.18.0","description":"The most capable Calibre MCP server — full read/write tool surface plus library- and book-scoped semantic search.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.4.3","snowball-stemmers":"^0.6.0","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","vitest":"4.1.9","typescript":"5.9.3","@types/node":"24.13.2","@modelcontextprotocol/inspector":"0.22.0"},"optionalDependencies":{"@huggingface/transformers":"4.2.0"},"_npmOperationalInternal":{"tmp":"tmp/calibre-mcp_0.2.1_1783757821297_0.42936113494185246","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"calibre-mcp","version":"0.3.0","keywords":["mcp","model-context-protocol","mcp-server","calibre","ebooks","epub","semantic-search","claude"],"author":{"url":"https://github.com/caelum29","name":"Artem Sorochynskyi","email":"caelum29@gmail.com"},"license":"MIT","_id":"calibre-mcp@0.3.0","maintainers":[{"name":"caelum29","email":"caelum29@gmail.com"}],"homepage":"https://github.com/caelum29/calibre-mcp#readme","bugs":{"url":"https://github.com/caelum29/calibre-mcp/issues"},"bin":{"calibre-mcp":"dist/run-stdio.js"},"dist":{"shasum":"a656489f3a9acfe8e1618d8dd0f3d0299a7184f4","tarball":"https://registry.npmjs.org/calibre-mcp/-/calibre-mcp-0.3.0.tgz","fileCount":211,"integrity":"sha512-U/7XiJoPlqXfNdjlamTCl1QXyeZTG6WBREns2K1T+S1Wzdi4SphvKxAnChdRD2xoq//fBiltRiuNP4i3B0jEQQ==","signatures":[{"sig":"MEQCIGZhRGocTq+Gei0lZ5tflqlKTYWCvzoL9X+3ZGzB+XKKAiAy5H6Wm10eVpwdjNK0aburPBTJcYLq4+tc/dd5LUKETQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/calibre-mcp@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":602661},"type":"module","engines":{"node":">=22.5"},"gitHead":"95273815427b6047b5b27fcf7cf262e46092003e","mcpName":"io.github.caelum29/calibre-mcp","scripts":{"dev":"tsx watch src/run-stdio.ts","eval":"node --import tsx test/eval/retrieval/run.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/run-stdio.js","inspect":"tsc -p tsconfig.json && mcp-inspector node dist/run-stdio.js","pack:mcpb":"node scripts/pack-mcpb.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:model":"RUN_MODEL_TESTS=1 vitest run test/semantic/embedder.integration.test.ts","test:watch":"vitest","prepublishOnly":"pnpm run build && pnpm run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:75fb0b91-fe5f-45de-8535-6c3afb7e0537"}},"repository":{"url":"git+https://github.com/caelum29/calibre-mcp.git","type":"git"},"_npmVersion":"11.18.0","description":"The most capable Calibre MCP server — full read/write tool surface plus library- and book-scoped semantic search.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.4.3","snowball-stemmers":"^0.6.0","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","vitest":"4.1.9","typescript":"5.9.3","@types/node":"24.13.2","@modelcontextprotocol/inspector":"0.22.0"},"optionalDependencies":{"@huggingface/transformers":"4.2.0"},"_npmOperationalInternal":{"tmp":"tmp/calibre-mcp_0.3.0_1784377413030_0.837077426890924","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"calibre-mcp","version":"0.4.0","keywords":["mcp","model-context-protocol","mcp-server","calibre","ebooks","epub","semantic-search","claude"],"author":{"url":"https://github.com/caelum29","name":"Artem Sorochynskyi","email":"caelum29@gmail.com"},"license":"MIT","_id":"calibre-mcp@0.4.0","maintainers":[{"name":"caelum29","email":"caelum29@gmail.com"}],"homepage":"https://github.com/caelum29/calibre-mcp#readme","bugs":{"url":"https://github.com/caelum29/calibre-mcp/issues"},"bin":{"calibre-mcp":"dist/run-stdio.js"},"dist":{"shasum":"64803a8310d0accc97a7775f33cd0b5dfec25893","tarball":"https://registry.npmjs.org/calibre-mcp/-/calibre-mcp-0.4.0.tgz","fileCount":223,"integrity":"sha512-w9umPYHWMWH2CZ9qrRw4k5C8wOLrsx1M1dNTctfVyuk5wncBck/TXKGBke+mfWTYU9LVJ6MHq2zd4ekZm4wH3w==","signatures":[{"sig":"MEUCIF4WIjla+yPdsoVNeykllpSPqi/qN2HCdkSzwghtNqwKAiEA/3PWGVkusCiwYMdjYnlbFGr6T8Tq012qcQlogjIGsQE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/calibre-mcp@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":682925},"type":"module","engines":{"node":">=22.5"},"gitHead":"cdb1a0d0f0f5ba23f52cb68e0c94c2701b195005","mcpName":"io.github.caelum29/calibre-mcp","scripts":{"dev":"tsx watch src/run-stdio.ts","eval":"node --import tsx test/eval/retrieval/run.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/run-stdio.js","inspect":"tsc -p tsconfig.json && mcp-inspector node dist/run-stdio.js","pack:mcpb":"node scripts/pack-mcpb.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:model":"RUN_MODEL_TESTS=1 vitest run test/semantic/embedder.integration.test.ts","test:watch":"vitest","prepublishOnly":"pnpm run build && pnpm run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:75fb0b91-fe5f-45de-8535-6c3afb7e0537"}},"repository":{"url":"git+https://github.com/caelum29/calibre-mcp.git","type":"git"},"_npmVersion":"11.18.0","description":"The most capable Calibre MCP server — full read/write tool surface plus library- and book-scoped semantic search.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.4.3","snowball-stemmers":"^0.6.0","@modelcontextprotocol/sdk":"1.29.0","@modelcontextprotocol/ext-apps":"1.7.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","vitest":"4.1.9","typescript":"5.9.3","@types/node":"24.13.2","@modelcontextprotocol/inspector":"0.22.0"},"optionalDependencies":{"@huggingface/transformers":"4.2.0"},"_npmOperationalInternal":{"tmp":"tmp/calibre-mcp_0.4.0_1784402282325_0.8440203117471641","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"calibre-mcp","version":"0.4.1","keywords":["mcp","model-context-protocol","mcp-server","calibre","ebooks","epub","semantic-search","claude"],"author":{"url":"https://github.com/caelum29","name":"Artem Sorochynskyi","email":"caelum29@gmail.com"},"license":"MIT","_id":"calibre-mcp@0.4.1","maintainers":[{"name":"caelum29","email":"caelum29@gmail.com"}],"homepage":"https://github.com/caelum29/calibre-mcp#readme","bugs":{"url":"https://github.com/caelum29/calibre-mcp/issues"},"bin":{"calibre-mcp":"dist/run-stdio.js"},"dist":{"shasum":"17232f466cbf3499e3de29a0225440a762286a08","tarball":"https://registry.npmjs.org/calibre-mcp/-/calibre-mcp-0.4.1.tgz","fileCount":223,"integrity":"sha512-Iv8/wg7QvKcoiheMLZd3i1CoxmzjrqNmRtmnexnUO0y117vJ8bKu4Deml/32Q11AGOBuVjBiovNFqwhe5Ftrvg==","signatures":[{"sig":"MEUCIQDh+OH+aAnoP8UxvTlM7mUi1BnlXYX4ut41we6qcmciPQIgezg2K7wV9Jf/ZvOH8g8J3elmpp0mFx96kxotqgOqa88=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/calibre-mcp@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":686153},"type":"module","engines":{"node":">=22.5"},"gitHead":"ad37c413be2fbfef930004faaee7c2d836456cd7","mcpName":"io.github.caelum29/calibre-mcp","scripts":{"dev":"tsx watch src/run-stdio.ts","eval":"node --import tsx test/eval/retrieval/run.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/run-stdio.js","inspect":"tsc -p tsconfig.json && mcp-inspector node dist/run-stdio.js","pack:mcpb":"node scripts/pack-mcpb.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:model":"RUN_MODEL_TESTS=1 vitest run test/semantic/embedder.integration.test.ts","test:watch":"vitest","prepublishOnly":"pnpm run build && pnpm run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:75fb0b91-fe5f-45de-8535-6c3afb7e0537"}},"repository":{"url":"git+https://github.com/caelum29/calibre-mcp.git","type":"git"},"_npmVersion":"11.18.0","description":"The most capable Calibre MCP server — full read/write tool surface plus library- and book-scoped semantic search.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.4.3","snowball-stemmers":"^0.6.0","@modelcontextprotocol/sdk":"1.29.0","@modelcontextprotocol/ext-apps":"1.7.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","vitest":"4.1.9","typescript":"5.9.3","@types/node":"24.13.2","@modelcontextprotocol/inspector":"0.22.0"},"optionalDependencies":{"@huggingface/transformers":"4.2.0"},"_npmOperationalInternal":{"tmp":"tmp/calibre-mcp_0.4.1_1784406310604_0.37284064177403886","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"calibre-mcp","version":"0.4.2","keywords":["mcp","model-context-protocol","mcp-server","calibre","ebooks","epub","semantic-search","claude"],"author":{"url":"https://github.com/caelum29","name":"Artem Sorochynskyi","email":"caelum29@gmail.com"},"license":"MIT","_id":"calibre-mcp@0.4.2","maintainers":[{"name":"caelum29","email":"caelum29@gmail.com"}],"homepage":"https://github.com/caelum29/calibre-mcp#readme","bugs":{"url":"https://github.com/caelum29/calibre-mcp/issues"},"bin":{"calibre-mcp":"dist/run-stdio.js"},"dist":{"shasum":"10cbdc741eeb052dc2f52e85afbb15b47817301f","tarball":"https://registry.npmjs.org/calibre-mcp/-/calibre-mcp-0.4.2.tgz","fileCount":223,"integrity":"sha512-iEeVLHCv+IpMuHrvYhaVzvTKPAk38cfQHjDNQYJMN3/SbRCgmzXBV0NKI7oZ0D9vLO4xXCG7BaFIQiR0I6/PWg==","signatures":[{"sig":"MEUCIQCRedHLcfNuFiVHqPAagQ5xa8wO6yf800lnuakROje1jAIgavm03v39ASTTCOBKeAttYbU4Rp1kqTJqy1whesusyz8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/calibre-mcp@0.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":692830},"type":"module","engines":{"node":">=22.5"},"gitHead":"e9abf72d2a84840f8d5816b579ad2017b19f9aa7","mcpName":"io.github.caelum29/calibre-mcp","scripts":{"dev":"tsx watch src/run-stdio.ts","eval":"node --import tsx test/eval/retrieval/run.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/run-stdio.js","inspect":"tsc -p tsconfig.json && mcp-inspector node dist/run-stdio.js","pack:mcpb":"node scripts/pack-mcpb.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:model":"RUN_MODEL_TESTS=1 vitest run test/semantic/embedder.integration.test.ts","test:watch":"vitest","prepublishOnly":"pnpm run build && pnpm run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:75fb0b91-fe5f-45de-8535-6c3afb7e0537"}},"repository":{"url":"git+https://github.com/caelum29/calibre-mcp.git","type":"git"},"_npmVersion":"11.18.0","description":"The most capable Calibre MCP server — full read/write tool surface plus library- and book-scoped semantic search.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.4.3","snowball-stemmers":"^0.6.0","@modelcontextprotocol/sdk":"1.29.0","@modelcontextprotocol/ext-apps":"1.7.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","vitest":"4.1.9","typescript":"5.9.3","@types/node":"24.13.2","@modelcontextprotocol/inspector":"0.22.0"},"optionalDependencies":{"@huggingface/transformers":"4.2.0"},"_npmOperationalInternal":{"tmp":"tmp/calibre-mcp_0.4.2_1784408799166_0.8485279659625231","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"calibre-mcp","version":"0.5.0","keywords":["mcp","model-context-protocol","mcp-server","calibre","ebooks","epub","semantic-search","claude"],"author":{"url":"https://github.com/caelum29","name":"Artem Sorochynskyi","email":"caelum29@gmail.com"},"license":"MIT","_id":"calibre-mcp@0.5.0","maintainers":[{"name":"caelum29","email":"caelum29@gmail.com"}],"homepage":"https://github.com/caelum29/calibre-mcp#readme","bugs":{"url":"https://github.com/caelum29/calibre-mcp/issues"},"bin":{"calibre-mcp":"dist/run-stdio.js"},"dist":{"shasum":"fa2d889eec9ea58eb082f1e633564d38f6d3d8b0","tarball":"https://registry.npmjs.org/calibre-mcp/-/calibre-mcp-0.5.0.tgz","fileCount":232,"integrity":"sha512-uo8KPANGeCmozhpJaKKNBTeT4EAXIYhViYyESsPbwyK/eycfsof6+dRoPX3/nCqdR5Pf4LmPd7VZCiVZOW2M4Q==","signatures":[{"sig":"MEYCIQCdegn9yF8ko9Etr8guq0MPP79x1Hy8Sqapx00tUrnrqwIhAMRE/94JTRgBVLnGeaF3BcDCM3qd8AdsY+dPNn+LNR/J","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/calibre-mcp@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":761968},"type":"module","engines":{"node":">=22.5"},"gitHead":"15d99b12eeddf709fdeedae4e7af6a16583c280c","mcpName":"io.github.caelum29/calibre-mcp","scripts":{"dev":"tsx watch src/run-stdio.ts","eval":"node --import tsx test/eval/retrieval/run.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/run-stdio.js","inspect":"tsc -p tsconfig.json && mcp-inspector node dist/run-stdio.js","pack:mcpb":"node scripts/pack-mcpb.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:model":"RUN_MODEL_TESTS=1 vitest run test/semantic/embedder.integration.test.ts","test:watch":"vitest","test:calibre":"RUN_CALIBRE_TESTS=1 vitest run test/integration/merge.live.test.ts","prepublishOnly":"pnpm run build && pnpm run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:75fb0b91-fe5f-45de-8535-6c3afb7e0537"}},"repository":{"url":"git+https://github.com/caelum29/calibre-mcp.git","type":"git"},"_npmVersion":"11.18.0","description":"The most capable Calibre MCP server — full read/write tool surface plus library- and book-scoped semantic search.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.4.3","snowball-stemmers":"^0.6.0","@modelcontextprotocol/sdk":"1.29.0","@modelcontextprotocol/ext-apps":"1.7.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","vitest":"4.1.9","typescript":"5.9.3","@types/node":"24.13.2","@modelcontextprotocol/inspector":"0.22.0"},"optionalDependencies":{"@huggingface/transformers":"4.2.0"},"_npmOperationalInternal":{"tmp":"tmp/calibre-mcp_0.5.0_1784475570789_0.7785043303340349","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"calibre-mcp","version":"0.5.1","keywords":["mcp","model-context-protocol","mcp-server","calibre","ebooks","epub","semantic-search","claude"],"author":{"url":"https://github.com/caelum29","name":"Artem Sorochynskyi","email":"caelum29@gmail.com"},"license":"MIT","_id":"calibre-mcp@0.5.1","maintainers":[{"name":"caelum29","email":"caelum29@gmail.com"}],"homepage":"https://github.com/caelum29/calibre-mcp#readme","bugs":{"url":"https://github.com/caelum29/calibre-mcp/issues"},"bin":{"calibre-mcp":"dist/run-stdio.js"},"dist":{"shasum":"1d97427d784e5217be0c6dd3643e26bfd2890693","tarball":"https://registry.npmjs.org/calibre-mcp/-/calibre-mcp-0.5.1.tgz","fileCount":238,"integrity":"sha512-0tFFgZ0kaXxNC9Tzgb5P+bwQzM3TAth2YuOzUpeJ9Alw9s15xmLPH4Ld+KHRCzJqcsv9qqY9sejRS/CSy0egfA==","signatures":[{"sig":"MEUCIHkczEwaFURhxKnt1nnt4c12L4Y/EFrQwdBDt/9L1ahfAiEAwKRz+GUh71aP9t9/6n+zL506fbisbl48kXTXdFEsSlc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/calibre-mcp@0.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":783918},"type":"module","engines":{"node":">=22.5"},"gitHead":"56671a698a1ae4a306ae777dba71bb40718d336f","mcpName":"io.github.caelum29/calibre-mcp","scripts":{"dev":"tsx watch src/run-stdio.ts","eval":"node --import tsx test/eval/retrieval/run.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/run-stdio.js","inspect":"tsc -p tsconfig.json && mcp-inspector node dist/run-stdio.js","pack:mcpb":"node scripts/pack-mcpb.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:model":"RUN_MODEL_TESTS=1 vitest run test/semantic/embedder.integration.test.ts","test:watch":"vitest","test:calibre":"RUN_CALIBRE_TESTS=1 vitest run test/integration/merge.live.test.ts","prepublishOnly":"pnpm run build && pnpm run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:75fb0b91-fe5f-45de-8535-6c3afb7e0537"}},"repository":{"url":"git+https://github.com/caelum29/calibre-mcp.git","type":"git"},"_npmVersion":"11.18.0","description":"The most capable Calibre MCP server — full read/write tool surface plus library- and book-scoped semantic search.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.4.3","snowball-stemmers":"^0.6.0","@modelcontextprotocol/sdk":"1.29.0","@modelcontextprotocol/ext-apps":"1.7.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","vitest":"4.1.9","typescript":"5.9.3","@types/node":"24.13.2","@modelcontextprotocol/inspector":"0.22.0"},"optionalDependencies":{"@huggingface/transformers":"4.2.0"},"_npmOperationalInternal":{"tmp":"tmp/calibre-mcp_0.5.1_1784482202551_0.30513456522601756","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"calibre-mcp","version":"0.5.2","keywords":["mcp","model-context-protocol","mcp-server","calibre","ebooks","epub","semantic-search","claude"],"author":{"url":"https://github.com/caelum29","name":"Artem Sorochynskyi","email":"caelum29@gmail.com"},"license":"MIT","_id":"calibre-mcp@0.5.2","maintainers":[{"name":"caelum29","email":"caelum29@gmail.com"}],"homepage":"https://github.com/caelum29/calibre-mcp#readme","bugs":{"url":"https://github.com/caelum29/calibre-mcp/issues"},"bin":{"calibre-mcp":"dist/run-stdio.js"},"dist":{"shasum":"f8f308658e53dbb6fc4b85547701245214fb2ac2","tarball":"https://registry.npmjs.org/calibre-mcp/-/calibre-mcp-0.5.2.tgz","fileCount":238,"integrity":"sha512-J42L/1BARflcWhtcNMs1AoQzOXnln2HywmFqLk+PGkvfWwJMSiN22g6bWcYWDy8Wi4ZCbz0vvFVQKx0dAhfvAw==","signatures":[{"sig":"MEUCIQCJC9m3DGCUBcewwLkdFK+6pF4qePfcx/lv8PqLmtcU0QIgAyqFSPY2Tn0tsowqBud9vFMyz1be558jpgV7LEfOxUI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/calibre-mcp@0.5.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":807005},"type":"module","engines":{"node":">=22.5"},"gitHead":"60b00569f94267a5214c107b1a1a36b62fdafc49","mcpName":"io.github.caelum29/calibre-mcp","scripts":{"dev":"tsx watch src/run-stdio.ts","eval":"node --import tsx test/eval/retrieval/run.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/run-stdio.js","inspect":"tsc -p tsconfig.json && mcp-inspector node dist/run-stdio.js","pack:mcpb":"node scripts/pack-mcpb.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:model":"RUN_MODEL_TESTS=1 vitest run test/semantic/embedder.integration.test.ts","test:watch":"vitest","test:calibre":"RUN_CALIBRE_TESTS=1 vitest run test/integration/merge.live.test.ts","prepublishOnly":"pnpm run build && pnpm run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:75fb0b91-fe5f-45de-8535-6c3afb7e0537"}},"repository":{"url":"git+https://github.com/caelum29/calibre-mcp.git","type":"git"},"_npmVersion":"11.18.0","description":"The most capable Calibre MCP server — full read/write tool surface plus library- and book-scoped semantic search.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.4.3","snowball-stemmers":"^0.6.0","@modelcontextprotocol/sdk":"1.29.0","@modelcontextprotocol/ext-apps":"1.7.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","vitest":"4.1.9","typescript":"5.9.3","@types/node":"24.13.2","@modelcontextprotocol/inspector":"0.22.0"},"optionalDependencies":{"@huggingface/transformers":"4.2.0"},"_npmOperationalInternal":{"tmp":"tmp/calibre-mcp_0.5.2_1784493870257_0.897829243689485","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"calibre-mcp","version":"0.6.0","keywords":["mcp","model-context-protocol","mcp-server","calibre","ebooks","epub","semantic-search","claude"],"author":{"url":"https://github.com/caelum29","name":"Artem Sorochynskyi","email":"caelum29@gmail.com"},"license":"MIT","_id":"calibre-mcp@0.6.0","maintainers":[{"name":"caelum29","email":"caelum29@gmail.com"}],"homepage":"https://github.com/caelum29/calibre-mcp#readme","bugs":{"url":"https://github.com/caelum29/calibre-mcp/issues"},"bin":{"calibre-mcp":"dist/run-stdio.js"},"dist":{"shasum":"f8102a9eec67420b73f3670588c22c4be5325d2e","tarball":"https://registry.npmjs.org/calibre-mcp/-/calibre-mcp-0.6.0.tgz","fileCount":241,"integrity":"sha512-6aXcw0Il1VB1C2LvLJhMEwqpPXOdWhauE/I4JcDlYd3vBxl1IbxzdRMZztoIhfvECHD4XIYWoQk6KwfpG1sb4Q==","signatures":[{"sig":"MEYCIQDDaM58VgzslgOMMwWKP77qNugjwBJYyEMACel8FgE+0wIhAKIhThrcM9IiBU44UlCfhbk5dQndkIh4iwYjGU9R5JLt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/calibre-mcp@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":826730},"type":"module","engines":{"node":">=22.5"},"gitHead":"b0246b5a09b442f3485a09a304d53e5b5d19a115","mcpName":"io.github.caelum29/calibre-mcp","scripts":{"dev":"tsx watch src/run-stdio.ts","eval":"node --import tsx test/eval/retrieval/run.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/run-stdio.js","inspect":"tsc -p tsconfig.json && mcp-inspector node dist/run-stdio.js","pack:mcpb":"node scripts/pack-mcpb.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:model":"RUN_MODEL_TESTS=1 vitest run test/semantic/embedder.integration.test.ts","test:watch":"vitest","test:calibre":"RUN_CALIBRE_TESTS=1 vitest run test/integration/merge.live.test.ts","prepublishOnly":"pnpm run build && pnpm run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:75fb0b91-fe5f-45de-8535-6c3afb7e0537"}},"repository":{"url":"git+https://github.com/caelum29/calibre-mcp.git","type":"git"},"_npmVersion":"11.18.0","description":"The most capable Calibre MCP server — full read/write tool surface plus library- and book-scoped semantic search.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.4.3","open":"^11.0.0","snowball-stemmers":"^0.6.0","@modelcontextprotocol/sdk":"1.29.0","@modelcontextprotocol/ext-apps":"1.7.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","vitest":"4.1.9","typescript":"5.9.3","@types/node":"24.13.2","@modelcontextprotocol/inspector":"0.22.0"},"optionalDependencies":{"@huggingface/transformers":"4.2.0"},"_npmOperationalInternal":{"tmp":"tmp/calibre-mcp_0.6.0_1784550876634_0.09528717321951086","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"calibre-mcp","version":"0.6.1","keywords":["mcp","model-context-protocol","mcp-server","calibre","ebooks","epub","semantic-search","claude"],"author":{"url":"https://github.com/caelum29","name":"Artem Sorochynskyi","email":"caelum29@gmail.com"},"license":"MIT","_id":"calibre-mcp@0.6.1","maintainers":[{"name":"caelum29","email":"caelum29@gmail.com"}],"homepage":"https://github.com/caelum29/calibre-mcp#readme","bugs":{"url":"https://github.com/caelum29/calibre-mcp/issues"},"bin":{"calibre-mcp":"dist/run-stdio.js"},"dist":{"shasum":"2452ff15a0eff9c88f3b63f887ca8924ab30990a","tarball":"https://registry.npmjs.org/calibre-mcp/-/calibre-mcp-0.6.1.tgz","fileCount":244,"integrity":"sha512-7mefKIbveMUxiBr3wcvPB1vDiMngvs8MlVdtqnZIw97GK+GZhGhhAS5LRFIJTC6p+aaItGhtuZitJWMrLzV+5A==","signatures":[{"sig":"MEUCIQCY74j3aVDYCa4QcnTAu2FYSYjuwvRbYinAhATs/wczLwIgaer/gMHiuN95oezR2fHvqDCcKeHfYcuH6DqISXPSEHE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/calibre-mcp@0.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":841291},"type":"module","engines":{"node":">=22.5"},"gitHead":"66aa4e660f06c64509e0b0230cf98bc664e3c998","mcpName":"io.github.caelum29/calibre-mcp","scripts":{"dev":"tsx watch src/run-stdio.ts","eval":"node --import tsx test/eval/retrieval/run.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/run-stdio.js","inspect":"tsc -p tsconfig.json && mcp-inspector node dist/run-stdio.js","pack:mcpb":"node scripts/pack-mcpb.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:model":"RUN_MODEL_TESTS=1 vitest run test/semantic/embedder.integration.test.ts","test:watch":"vitest","test:calibre":"RUN_CALIBRE_TESTS=1 vitest run test/integration/merge.live.test.ts","prepublishOnly":"pnpm run build && pnpm run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:75fb0b91-fe5f-45de-8535-6c3afb7e0537"}},"repository":{"url":"git+https://github.com/caelum29/calibre-mcp.git","type":"git"},"_npmVersion":"11.18.0","description":"The most capable Calibre MCP server — full read/write tool surface plus library- and book-scoped semantic search.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.4.3","open":"^11.0.0","snowball-stemmers":"^0.6.0","@modelcontextprotocol/sdk":"1.29.0","@modelcontextprotocol/ext-apps":"1.7.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","vitest":"4.1.9","typescript":"5.9.3","@types/node":"24.13.2","@modelcontextprotocol/inspector":"0.22.0"},"optionalDependencies":{"@huggingface/transformers":"4.2.0"},"_npmOperationalInternal":{"tmp":"tmp/calibre-mcp_0.6.1_1784629582527_0.44393337738585825","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"calibre-mcp","version":"0.6.2","keywords":["mcp","model-context-protocol","mcp-server","calibre","ebooks","epub","semantic-search","claude"],"author":{"url":"https://github.com/caelum29","name":"Artem Sorochynskyi","email":"caelum29@gmail.com"},"license":"MIT","_id":"calibre-mcp@0.6.2","maintainers":[{"name":"caelum29","email":"caelum29@gmail.com"}],"homepage":"https://github.com/caelum29/calibre-mcp#readme","bugs":{"url":"https://github.com/caelum29/calibre-mcp/issues"},"bin":{"calibre-mcp":"dist/run-stdio.js"},"dist":{"shasum":"4fd00df267e78fc05be1e7e108e72f7fd1c089e2","tarball":"https://registry.npmjs.org/calibre-mcp/-/calibre-mcp-0.6.2.tgz","fileCount":244,"integrity":"sha512-jykR1FXH92MLOtZbbTB+UWOGshrQF4NBdXw2957c3YMuX7C3xMNhuPfyt3xbVViSmLeoBn84YiHzI8u6hnNVcg==","signatures":[{"sig":"MEUCIA+e4Pws8N5kj2VBEVv5Ejf6QqU4dUYAo0lXrQqAKuKeAiEAmcTZgdzaknGLlpAetlS0Tjhpg4dQVPLXL/YetnzzvIM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/calibre-mcp@0.6.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":842750},"type":"module","engines":{"node":">=22.5"},"gitHead":"19c936abd0e91cfd23f29c5041050762c60d516f","mcpName":"io.github.caelum29/calibre-mcp","scripts":{"dev":"tsx watch src/run-stdio.ts","eval":"node --import tsx test/eval/retrieval/run.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/run-stdio.js","inspect":"tsc -p tsconfig.json && mcp-inspector node dist/run-stdio.js","pack:mcpb":"node scripts/pack-mcpb.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:model":"RUN_MODEL_TESTS=1 vitest run test/semantic/embedder.integration.test.ts","test:watch":"vitest","test:calibre":"RUN_CALIBRE_TESTS=1 vitest run test/integration/merge.live.test.ts","prepublishOnly":"pnpm run build && pnpm run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:75fb0b91-fe5f-45de-8535-6c3afb7e0537"}},"repository":{"url":"git+https://github.com/caelum29/calibre-mcp.git","type":"git"},"_npmVersion":"11.18.0","description":"The most capable Calibre MCP server — full read/write tool surface plus library- and book-scoped semantic search.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.4.3","open":"^11.0.0","snowball-stemmers":"^0.6.0","@modelcontextprotocol/sdk":"1.29.0","@modelcontextprotocol/ext-apps":"1.7.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","vitest":"4.1.9","typescript":"5.9.3","@types/node":"24.13.2","@modelcontextprotocol/inspector":"0.22.0"},"optionalDependencies":{"@huggingface/transformers":"4.2.0"},"_npmOperationalInternal":{"tmp":"tmp/calibre-mcp_0.6.2_1784631813394_0.3674064336537999","host":"s3://npm-registry-packages-npm-production"}},"0.6.3":{"name":"calibre-mcp","version":"0.6.3","keywords":["mcp","model-context-protocol","mcp-server","calibre","ebooks","epub","semantic-search","claude"],"author":{"url":"https://github.com/caelum29","name":"Artem Sorochynskyi","email":"caelum29@gmail.com"},"license":"MIT","_id":"calibre-mcp@0.6.3","maintainers":[{"name":"caelum29","email":"caelum29@gmail.com"}],"homepage":"https://github.com/caelum29/calibre-mcp#readme","bugs":{"url":"https://github.com/caelum29/calibre-mcp/issues"},"bin":{"calibre-mcp":"dist/run-stdio.js"},"dist":{"shasum":"bbc27f8c36d776be7b1813c73e1bb955cd7b2c6f","tarball":"https://registry.npmjs.org/calibre-mcp/-/calibre-mcp-0.6.3.tgz","fileCount":244,"integrity":"sha512-NV+kVoQqGs5nAwnLOXU09Tkd86XZB9oaAtw8aSXbEdjcPOR2i4cynu8ST+ZqA/Af6/jir7hhGtrk/gW3ptpo9g==","signatures":[{"sig":"MEYCIQCR1Ur4Vdqeaa6lgXhtt/GD9mElmVaDuxUJH9ULCJF81AIhAOnlqlfgoWtFI/61XaZ/Ef/hpJei5M7t40ycNaR5vcrd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/calibre-mcp@0.6.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":846689},"type":"module","engines":{"node":">=22.5"},"gitHead":"f0dbd7c9711edff96634bab83c908f3d468681e6","mcpName":"io.github.caelum29/calibre-mcp","scripts":{"dev":"tsx watch src/run-stdio.ts","eval":"node --import tsx test/eval/retrieval/run.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/run-stdio.js","inspect":"tsc -p tsconfig.json && mcp-inspector node dist/run-stdio.js","pack:mcpb":"node scripts/pack-mcpb.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:model":"RUN_MODEL_TESTS=1 vitest run test/semantic/embedder.integration.test.ts","test:watch":"vitest","test:calibre":"RUN_CALIBRE_TESTS=1 vitest run test/integration/merge.live.test.ts","pack:mcpb:dev":"node scripts/pack-mcpb.mjs --dev","prepublishOnly":"pnpm run build && pnpm run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:75fb0b91-fe5f-45de-8535-6c3afb7e0537"}},"repository":{"url":"git+https://github.com/caelum29/calibre-mcp.git","type":"git"},"_npmVersion":"11.18.0","description":"The most capable Calibre MCP server — full read/write tool surface plus library- and book-scoped semantic search.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.4.3","open":"^11.0.0","snowball-stemmers":"^0.6.0","@modelcontextprotocol/sdk":"1.29.0","@modelcontextprotocol/ext-apps":"1.7.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","vitest":"4.1.9","typescript":"5.9.3","@types/node":"24.13.2","@modelcontextprotocol/inspector":"0.22.0"},"optionalDependencies":{"@huggingface/transformers":"4.2.0"},"_npmOperationalInternal":{"tmp":"tmp/calibre-mcp_0.6.3_1784673099950_0.9286291797440329","host":"s3://npm-registry-packages-npm-production"}},"0.6.4":{"name":"calibre-mcp","version":"0.6.4","keywords":["mcp","model-context-protocol","mcp-server","calibre","ebooks","epub","semantic-search","claude"],"author":{"url":"https://github.com/caelum29","name":"Artem Sorochynskyi","email":"caelum29@gmail.com"},"license":"MIT","_id":"calibre-mcp@0.6.4","maintainers":[{"name":"caelum29","email":"caelum29@gmail.com"}],"homepage":"https://github.com/caelum29/calibre-mcp#readme","bugs":{"url":"https://github.com/caelum29/calibre-mcp/issues"},"bin":{"calibre-mcp":"dist/run-stdio.js"},"dist":{"shasum":"433c03c5427c60a7265e2fd1b64bf4893e617368","tarball":"https://registry.npmjs.org/calibre-mcp/-/calibre-mcp-0.6.4.tgz","fileCount":244,"integrity":"sha512-H/0pof2Nk0nccHNt7OEAnk6uiprJWNgubDAxALepCR9kgOi4fRKCTbzKKdJhNTcGTIisgCe8B6brsFm07hDUrA==","signatures":[{"sig":"MEYCIQDFLnIq+3+vwlrwf4EL3PyF+VSNtk8s6lmgRWElAXUCOgIhALQGXeLSvK/4riU+9NNEOiyP5dZCzgtrMtoPtMhtg1Gc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/calibre-mcp@0.6.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":848229},"type":"module","engines":{"node":">=22.5"},"gitHead":"3b21a238bbb6198ac1fcbc37f8cc8347b5d4beeb","mcpName":"io.github.caelum29/calibre-mcp","scripts":{"dev":"tsx watch src/run-stdio.ts","eval":"node --import tsx test/eval/retrieval/run.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/run-stdio.js","inspect":"tsc -p tsconfig.json && mcp-inspector node dist/run-stdio.js","pack:mcpb":"node scripts/pack-mcpb.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:model":"RUN_MODEL_TESTS=1 vitest run test/semantic/embedder.integration.test.ts","test:watch":"vitest","test:calibre":"RUN_CALIBRE_TESTS=1 vitest run test/integration/merge.live.test.ts","pack:mcpb:dev":"node scripts/pack-mcpb.mjs --dev","prepublishOnly":"pnpm run build && pnpm run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:75fb0b91-fe5f-45de-8535-6c3afb7e0537"}},"repository":{"url":"git+https://github.com/caelum29/calibre-mcp.git","type":"git"},"_npmVersion":"11.18.0","description":"The most capable Calibre MCP server — full read/write tool surface plus library- and book-scoped semantic search.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.4.3","open":"^11.0.0","snowball-stemmers":"^0.6.0","@modelcontextprotocol/sdk":"1.29.0","@modelcontextprotocol/ext-apps":"1.7.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","vitest":"4.1.9","typescript":"5.9.3","@types/node":"24.13.2","@modelcontextprotocol/inspector":"0.22.0"},"optionalDependencies":{"@huggingface/transformers":"4.2.0"},"_npmOperationalInternal":{"tmp":"tmp/calibre-mcp_0.6.4_1784729489533_0.7257370987232097","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"calibre-mcp","version":"0.7.0","keywords":["mcp","model-context-protocol","mcp-server","calibre","ebooks","epub","semantic-search","claude"],"author":{"url":"https://github.com/caelum29","name":"Artem Sorochynskyi","email":"caelum29@gmail.com"},"license":"MIT","_id":"calibre-mcp@0.7.0","maintainers":[{"name":"caelum29","email":"caelum29@gmail.com"}],"homepage":"https://github.com/caelum29/calibre-mcp#readme","bugs":{"url":"https://github.com/caelum29/calibre-mcp/issues"},"bin":{"calibre-mcp":"dist/run-stdio.js"},"dist":{"shasum":"27e80559675cd392553fe5f2c23566a6ecee4439","tarball":"https://registry.npmjs.org/calibre-mcp/-/calibre-mcp-0.7.0.tgz","fileCount":268,"integrity":"sha512-oaBnmjDZbHVNSuovxlivstbuREco9tdTCybR4bbVF7E+7HEhGYpJRJlVaGPE7MSFT3Oj33Jcy79mdKqO6k6UhA==","signatures":[{"sig":"MEYCIQCOy4HsgyVq9onBGzdys7kUoeQhitk4ZI84Xm3KSIkm0gIhAJ3T4KiGxtbIUUpgOg+MYT0d+kibjn2BNLYwvzIpb9+l","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/calibre-mcp@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1045888},"type":"module","engines":{"node":">=22.5"},"gitHead":"390b1b4847e7679545160e11a1d96a26761ba570","mcpName":"io.github.caelum29/calibre-mcp","scripts":{"dev":"tsx watch src/run-stdio.ts","eval":"node --import tsx test/eval/retrieval/run.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/run-stdio.js","inspect":"tsc -p tsconfig.json && mcp-inspector node dist/run-stdio.js","pack:mcpb":"node scripts/pack-mcpb.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:model":"RUN_MODEL_TESTS=1 vitest run test/semantic/embedder.integration.test.ts","test:watch":"vitest","test:calibre":"RUN_CALIBRE_TESTS=1 vitest run test/integration/merge.live.test.ts","pack:mcpb:dev":"node scripts/pack-mcpb.mjs --dev","prepublishOnly":"pnpm run build && pnpm run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:75fb0b91-fe5f-45de-8535-6c3afb7e0537"}},"repository":{"url":"git+https://github.com/caelum29/calibre-mcp.git","type":"git"},"_npmVersion":"11.18.0","description":"The most capable Calibre MCP server — full read/write tool surface plus library- and book-scoped semantic search.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.4.3","open":"^11.0.0","snowball-stemmers":"^0.6.0","@modelcontextprotocol/sdk":"1.29.0","@modelcontextprotocol/ext-apps":"1.7.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","vitest":"4.1.9","typescript":"5.9.3","@types/node":"24.13.2","@modelcontextprotocol/inspector":"0.22.0"},"optionalDependencies":{"@huggingface/transformers":"4.2.0"},"_npmOperationalInternal":{"tmp":"tmp/calibre-mcp_0.7.0_1785157659910_0.6245603323910358","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"calibre-mcp","version":"0.7.1","keywords":["mcp","model-context-protocol","mcp-server","calibre","ebooks","epub","semantic-search","claude"],"author":{"url":"https://github.com/caelum29","name":"Artem Sorochynskyi","email":"caelum29@gmail.com"},"license":"MIT","_id":"calibre-mcp@0.7.1","maintainers":[{"name":"caelum29","email":"caelum29@gmail.com"}],"homepage":"https://github.com/caelum29/calibre-mcp#readme","bugs":{"url":"https://github.com/caelum29/calibre-mcp/issues"},"bin":{"calibre-mcp":"dist/run-stdio.js"},"dist":{"shasum":"d342f99afa4a085e7570a7f51855da1d72902375","tarball":"https://registry.npmjs.org/calibre-mcp/-/calibre-mcp-0.7.1.tgz","fileCount":271,"integrity":"sha512-8LQ64T7AfpAKkJ9HEpoqj14kDTGI6WF2feD3daZNyuEd/48TtjDJHBeALFALD7eDjJM82pn7eu/t2kwZK3mItg==","signatures":[{"sig":"MEYCIQDALS+hDv2FcKqd32NWxPB1JGFpqF1HfYlSwLdBwqqVJwIhAIt6HeYnz0ydu7Q3aLUl7J7PqiQMmW4i23QBn3WxifY3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/calibre-mcp@0.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1065817},"type":"module","engines":{"node":">=22.5"},"gitHead":"5a0019bc7091e588577d2b549aac98b67e57f550","mcpName":"io.github.caelum29/calibre-mcp","scripts":{"dev":"tsx watch src/run-stdio.ts","eval":"node --import tsx test/eval/retrieval/run.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/run-stdio.js","inspect":"tsc -p tsconfig.json && mcp-inspector node dist/run-stdio.js","pack:mcpb":"node scripts/pack-mcpb.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:model":"RUN_MODEL_TESTS=1 vitest run test/semantic/embedder.integration.test.ts","test:watch":"vitest","test:calibre":"RUN_CALIBRE_TESTS=1 vitest run test/integration/merge.live.test.ts","pack:mcpb:dev":"node scripts/pack-mcpb.mjs --dev","prepublishOnly":"pnpm run build && pnpm run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:75fb0b91-fe5f-45de-8535-6c3afb7e0537"}},"repository":{"url":"git+https://github.com/caelum29/calibre-mcp.git","type":"git"},"_npmVersion":"11.18.0","description":"The most capable Calibre MCP server — full read/write tool surface plus library- and book-scoped semantic search.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.4.3","open":"^11.0.0","snowball-stemmers":"^0.6.0","@modelcontextprotocol/sdk":"1.29.0","@modelcontextprotocol/ext-apps":"1.7.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","vitest":"4.1.9","typescript":"5.9.3","@types/node":"24.13.2","@modelcontextprotocol/inspector":"0.22.0"},"optionalDependencies":{"@huggingface/transformers":"4.2.0"},"_npmOperationalInternal":{"tmp":"tmp/calibre-mcp_0.7.1_1785181328110_0.34706019510115294","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"calibre-mcp","version":"0.7.2","keywords":["mcp","model-context-protocol","mcp-server","calibre","ebooks","epub","semantic-search","claude"],"author":{"url":"https://github.com/caelum29","name":"Artem Sorochynskyi","email":"caelum29@gmail.com"},"license":"MIT","_id":"calibre-mcp@0.7.2","maintainers":[{"name":"caelum29","email":"caelum29@gmail.com"}],"homepage":"https://github.com/caelum29/calibre-mcp#readme","bugs":{"url":"https://github.com/caelum29/calibre-mcp/issues"},"bin":{"calibre-mcp":"dist/run-stdio.js"},"dist":{"shasum":"db41a00ec25b669ca0de12928cd10c75af07c093","tarball":"https://registry.npmjs.org/calibre-mcp/-/calibre-mcp-0.7.2.tgz","fileCount":271,"integrity":"sha512-lAYvcaZ/lIznpHYO6iN169r81bvyG6IIHYbFsAu2ctY26rGKUfQxobtTh+d0VeY8SuOcYReXgRVOhFjbx0rXVw==","signatures":[{"sig":"MEYCIQD5QdLEhrWsNTNOSMMW7ZZMmDQR3LeQb1rQbc6hKViOWwIhAMwir1C888lEUEYDWSFSipGHjiKCTle80LNnD7MIPyks","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/calibre-mcp@0.7.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1066112},"type":"module","engines":{"node":">=22.5"},"gitHead":"fc66dad98c38356ced17cfac74e8b99d1390adfe","mcpName":"io.github.caelum29/calibre-mcp","scripts":{"dev":"tsx watch src/run-stdio.ts","eval":"node --import tsx test/eval/retrieval/run.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/run-stdio.js","inspect":"tsc -p tsconfig.json && mcp-inspector node dist/run-stdio.js","pack:mcpb":"node scripts/pack-mcpb.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:model":"RUN_MODEL_TESTS=1 vitest run test/semantic/embedder.integration.test.ts","test:watch":"vitest","test:calibre":"RUN_CALIBRE_TESTS=1 vitest run test/integration/merge.live.test.ts","pack:mcpb:dev":"node scripts/pack-mcpb.mjs --dev","prepublishOnly":"pnpm run build && pnpm run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:75fb0b91-fe5f-45de-8535-6c3afb7e0537"}},"repository":{"url":"git+https://github.com/caelum29/calibre-mcp.git","type":"git"},"_npmVersion":"11.18.0","description":"The most capable Calibre MCP server — full read/write tool surface plus library- and book-scoped semantic search.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.4.3","open":"^11.0.0","snowball-stemmers":"^0.6.0","@modelcontextprotocol/sdk":"1.29.0","@modelcontextprotocol/ext-apps":"1.7.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","vitest":"4.1.9","typescript":"5.9.3","@types/node":"24.13.2","@modelcontextprotocol/inspector":"0.22.0"},"optionalDependencies":{"@huggingface/transformers":"4.2.0"},"_npmOperationalInternal":{"tmp":"tmp/calibre-mcp_0.7.2_1785182501693_0.2936954725331944","host":"s3://npm-registry-packages-npm-production"}},"0.7.3":{"name":"calibre-mcp","version":"0.7.3","keywords":["mcp","model-context-protocol","mcp-server","calibre","ebooks","epub","semantic-search","claude"],"author":{"url":"https://github.com/caelum29","name":"Artem Sorochynskyi","email":"caelum29@gmail.com"},"license":"MIT","_id":"calibre-mcp@0.7.3","maintainers":[{"name":"caelum29","email":"caelum29@gmail.com"}],"homepage":"https://github.com/caelum29/calibre-mcp#readme","bugs":{"url":"https://github.com/caelum29/calibre-mcp/issues"},"bin":{"calibre-mcp":"dist/run-stdio.js"},"dist":{"shasum":"0b9804f11585ee5b201cc217de8b0a873d3916c7","tarball":"https://registry.npmjs.org/calibre-mcp/-/calibre-mcp-0.7.3.tgz","fileCount":277,"integrity":"sha512-Or9CiT4TGvopR58oMbdIMon6mSEeN6VbDQAjYspCkIbjW96Y/L51Sls7tEA0aKP/Z0nwrIT7rnQ3gJ6LlwiYPg==","signatures":[{"sig":"MEQCIF7o/egSneGrEDNhEo34ApH9JWWD9u6CC5KiKSZrKXfcAiAkwjvmIuNWq1FxRFctKtP9XgPTl9b2lfegxF0q6ja4xA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/calibre-mcp@0.7.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1133270},"type":"module","engines":{"node":">=22.5"},"gitHead":"2b1d865d00a9ef113adc2f03dfd9cf746e079000","mcpName":"io.github.caelum29/calibre-mcp","scripts":{"dev":"tsx watch src/run-stdio.ts","eval":"node --import tsx test/eval/retrieval/run.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/run-stdio.js","inspect":"tsc -p tsconfig.json && mcp-inspector node dist/run-stdio.js","pack:mcpb":"node scripts/pack-mcpb.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:model":"RUN_MODEL_TESTS=1 vitest run test/semantic/embedder.integration.test.ts","test:watch":"vitest","test:calibre":"RUN_CALIBRE_TESTS=1 vitest run test/integration/merge.live.test.ts","pack:mcpb:dev":"node scripts/pack-mcpb.mjs --dev","prepublishOnly":"pnpm run build && pnpm run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:75fb0b91-fe5f-45de-8535-6c3afb7e0537"}},"repository":{"url":"git+https://github.com/caelum29/calibre-mcp.git","type":"git"},"_npmVersion":"11.18.0","description":"The most capable Calibre MCP server — full read/write tool surface plus library- and book-scoped semantic search.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"4.4.3","open":"^11.0.1","snowball-stemmers":"^0.6.0","@modelcontextprotocol/sdk":"1.29.0","@modelcontextprotocol/ext-apps":"1.7.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","vitest":"4.1.9","typescript":"5.9.3","@types/node":"24.13.2","@modelcontextprotocol/inspector":"0.22.0"},"optionalDependencies":{"@huggingface/transformers":"4.2.0"},"_npmOperationalInternal":{"tmp":"tmp/calibre-mcp_0.7.3_1787049703724_0.9087754742458976","host":"s3://npm-registry-packages-npm-production"}},"0.7.4":{"name":"calibre-mcp","version":"0.7.4","description":"The most capable Calibre MCP server — full read/write tool surface plus library- and book-scoped semantic search.","type":"module","license":"MIT","author":{"name":"Artem Sorochynskyi","email":"caelum29@gmail.com","url":"https://github.com/caelum29"},"repository":{"type":"git","url":"git+https://github.com/caelum29/calibre-mcp.git"},"homepage":"https://github.com/caelum29/calibre-mcp#readme","bugs":{"url":"https://github.com/caelum29/calibre-mcp/issues"},"keywords":["mcp","model-context-protocol","mcp-server","calibre","ebooks","epub","semantic-search","claude"],"mcpName":"io.github.caelum29/calibre-mcp","bin":{"calibre-mcp":"dist/run-stdio.js"},"engines":{"node":">=22.5"},"scripts":{"build":"tsc -p tsconfig.json","dev":"tsx watch src/run-stdio.ts","start":"node dist/run-stdio.js","inspect":"tsc -p tsconfig.json && mcp-inspector node dist/run-stdio.js","typecheck":"tsc -p tsconfig.json --noEmit","test":"vitest run","test:watch":"vitest","test:model":"RUN_MODEL_TESTS=1 vitest run test/semantic/embedder.integration.test.ts","test:calibre":"RUN_CALIBRE_TESTS=1 vitest run test/integration/merge.live.test.ts","eval":"node --import tsx test/eval/retrieval/run.ts","prepublishOnly":"pnpm run build && pnpm run test","pack:mcpb":"node scripts/pack-mcpb.mjs","pack:mcpb:dev":"node scripts/pack-mcpb.mjs --dev"},"dependencies":{"@modelcontextprotocol/ext-apps":"1.7.4","@modelcontextprotocol/sdk":"1.29.0","open":"^11.0.1","snowball-stemmers":"^0.6.0","zod":"4.4.3"},"optionalDependencies":{"@huggingface/transformers":"4.2.0"},"devDependencies":{"@modelcontextprotocol/inspector":"2.2.0","@types/node":"24.13.2","tsx":"4.22.4","typescript":"5.9.3","vitest":"4.1.9"},"gitHead":"e58db358d7df2ddbcd2087df6d51239f526e838c","_id":"calibre-mcp@0.7.4","_nodeVersion":"24.19.0","_npmVersion":"11.18.0","dist":{"integrity":"sha512-FOetvndc26JUGtHhfh2ER/Qs24J59emo0y6oDpWaz2PZ16Je/bHEK9eGl0J6wbx6Eu4gk41iHrnC4psRpBzpIw==","shasum":"7fc6ce31849ddc96a6214e734a49423779a5711d","tarball":"https://registry.npmjs.org/calibre-mcp/-/calibre-mcp-0.7.4.tgz","fileCount":277,"unpackedSize":1135381,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/calibre-mcp@0.7.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDTHeo0xGbbO+BdPo/qFXVV4c64n75O98OlxGHiVdYhaAIgUxAUxdayArqqHS9MyRDyIk5olJnEhfPdnpPPaRxXUZw="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:75fb0b91-fe5f-45de-8535-6c3afb7e0537"}},"directories":{},"maintainers":[{"name":"caelum29","email":"caelum29@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/calibre-mcp_0.7.4_1787299946563_0.8240681761386068"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-01T22:22:55.729Z","modified":"2026-08-21T08:12:27.350Z","0.1.0":"2026-07-01T22:22:55.940Z","0.1.1":"2026-07-02T05:00:00.049Z","0.1.2":"2026-07-02T05:51:08.911Z","0.1.3":"2026-07-02T07:40:17.326Z","0.1.4":"2026-07-02T13:36:38.791Z","0.1.5":"2026-07-02T15:32:47.576Z","0.2.0":"2026-07-09T09:24:56.717Z","0.2.1":"2026-07-11T08:17:01.471Z","0.3.0":"2026-07-18T12:23:33.175Z","0.4.0":"2026-07-18T19:18:02.494Z","0.4.1":"2026-07-18T20:25:10.827Z","0.4.2":"2026-07-18T21:06:39.346Z","0.5.0":"2026-07-19T15:39:31.008Z","0.5.1":"2026-07-19T17:30:02.734Z","0.5.2":"2026-07-19T20:44:30.442Z","0.6.0":"2026-07-20T12:34:36.798Z","0.6.1":"2026-07-21T10:26:22.678Z","0.6.2":"2026-07-21T11:03:33.593Z","0.6.3":"2026-07-21T22:31:40.252Z","0.6.4":"2026-07-22T14:11:29.694Z","0.7.0":"2026-07-27T13:07:40.057Z","0.7.1":"2026-07-27T19:42:08.285Z","0.7.2":"2026-07-27T20:01:41.926Z","0.7.3":"2026-08-18T10:41:43.877Z","0.7.4":"2026-08-21T08:12:26.710Z"},"bugs":{"url":"https://github.com/caelum29/calibre-mcp/issues"},"author":{"name":"Artem Sorochynskyi","email":"caelum29@gmail.com","url":"https://github.com/caelum29"},"license":"MIT","homepage":"https://github.com/caelum29/calibre-mcp#readme","keywords":["mcp","model-context-protocol","mcp-server","calibre","ebooks","epub","semantic-search","claude"],"repository":{"type":"git","url":"git+https://github.com/caelum29/calibre-mcp.git"},"description":"The most capable Calibre MCP server — full read/write tool surface plus library- and book-scoped semantic search.","maintainers":[{"name":"caelum29","email":"caelum29@gmail.com"}],"readme":"# 📚 calibre-mcp\n\n[![npm version](https://img.shields.io/npm/v/calibre-mcp?logo=npm&color=cb3837)](https://www.npmjs.com/package/calibre-mcp)\n[![npm downloads](https://img.shields.io/npm/dm/calibre-mcp?logo=npm&color=cb3837)](https://www.npmjs.com/package/calibre-mcp)\n[![MCP Registry](https://img.shields.io/badge/MCP_Registry-io.github.caelum29%2Fcalibre--mcp-6E56CF?logo=anthropic)](https://registry.modelcontextprotocol.io)\n[![CI](https://github.com/caelum29/calibre-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/caelum29/calibre-mcp/actions/workflows/ci.yml)\n[![Node](https://img.shields.io/node/v/calibre-mcp?logo=node.js&color=339933)](https://nodejs.org)\n[![license](https://img.shields.io/badge/license-MIT-blue)](./LICENSE)\n[![skills.sh](https://skills.sh/b/caelum29/calibre-mcp)](https://skills.sh/caelum29/calibre-mcp)\n\n> **The most capable Calibre MCP server in existence** — connect Claude (or any MCP client)\n> to your [Calibre](https://calibre-ebook.com) ebook library and search it by *meaning*, not\n> just keywords.\n\nAsk your AI assistant *“which of my books explain consumer-group rebalancing?”* and get the\nexact chapter — across 800+ books or inside one. Curate metadata, dedupe, and safely edit\nyour library, all through natural language.\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/caelum29/calibre-mcp/main/demo.gif\" width=\"720\" alt=\"Claude Desktop: a plain-language question becomes a semantic search across the library, results render as a 3D cover flow, a click opens the book card, search-inside returns the exact passage with its location, and the figure viewer shows the book's diagrams\" />\n  <br/>\n  <em>One question → semantic search → 3D cover flow → book card → exact passage → figure viewer, all inside Claude Desktop (MCP&nbsp;Apps)</em>\n</p>\n\n## ✨ Highlights\n\n- **19 tools** covering the full surface: search, read content, browse categories, curate,\n  and (opt-in) write — update metadata, bulk-edit, merge duplicates, import, delete, and\n  manage bundles (named topical filters).\n- **Semantic search** — meaning-based, hybrid vector + keyword retrieval over your whole\n  library *or inside a single book*. Multilingual (English + Russian verified,\n  cross-lingual queries work). No other Calibre MCP server has this.\n- **In-chat UI (MCP Apps)** — in hosts that support MCP Apps (Claude Desktop), library\n  searches render an interactive cover carousel, `calibre_get_book` a book detail card\n  with cover, rating, and read/similar actions, and `calibre_get_figures` a figure viewer\n  that shows you the same diagrams the assistant fetched. Text-only hosts are unaffected.\n- **Curation tools** — find duplicates with merge-safety scoring, audit metadata quality,\n  and recover real metadata for books with raw filenames (`795731065.pdf` →\n  *Fundamentals of Software Engineering*) via Open Library / Google Books.\n- **Safe by default** — read-only unless you explicitly enable writes; destructive\n  operations preview first and require confirmation; all writes route through the\n  Content Server so they never race the Calibre GUI.\n\n## 📋 Requirements\n\n- **Calibre** with the **Content Server running** (in Calibre: *Connect/share → Start\n  Content server*). Tested against Calibre 9.x; any recent version should work.\n- **Node.js ≥ 22.5** for the npm/npx install (not needed for the Claude Desktop\n  one-click bundle — Desktop ships its own runtime).\n- Optional, for best PDF text extraction: poppler's `pdftotext`\n  (`brew install poppler`) or Python 3 with PyMuPDF (`pip install pymupdf`). Without\n  them the server falls back to Calibre's `ebook-convert`.\n\n## 🚀 Quick start\n\n### Easiest — let your agent install it for you\n\nGrab the guided-installer skill and hand the whole job to your agent:\n\n```sh\nnpx skills@latest add caelum29/calibre-mcp   # pick calibre-mcp-setup\n```\n\nThen tell your agent: **\"set up calibre-mcp\"**. The `calibre-mcp-setup` skill drives\neverything below — preflight (Node, calibredb, Content Server), the Calibre-side\nconfig, the right install for your client (macOS/Windows/Linux), and a `calibre_ping`\nverification — asking you only the questions that are yours to answer (which client,\nwrites on/off). Works in any Agent-Skills-compatible harness (Claude Code, Copilot,\nAmp, …). Prefer doing it by hand? Pick your client below.\n\n### Claude Code\n\nMCP server only:\n\n```sh\nclaude mcp add calibre -- npx -y calibre-mcp\n```\n\nOr install the plugin — server **and** the companion skills in one step, with a settings\ndialog (server URL, library, write gate) at install time:\n\n```\n/plugin marketplace add caelum29/calibre-mcp\n/plugin install calibre-mcp@caelum29\n```\n\n### Claude Desktop (one-click)\n\nDownload the `.mcpb` bundle from the\n[latest release](https://github.com/caelum29/calibre-mcp/releases/latest) and open it —\nClaude Desktop installs it and prompts for settings (server URL, library, writes on/off).\nNo terminal needed.\n\n> **About the install warning.** Claude Desktop shows *“Installing will grant this\n> extension access to everything on your computer… developer information has not been\n> verified by Anthropic”* for **every** extension installed from a file rather than the\n> built-in directory — it’s not specific to this one. The server runs as a local Node\n> process under your user account, exactly like the `npx` install below; the bundle is\n> built and published by CI from this repository, so you can audit what you’re running.\n> Click **Install** to proceed.\n\n> The bundle ships without the optional embeddings dependency to stay small, so the two\n> semantic-search tools report themselves unavailable. Metadata and full-text search work\n> fully. For semantic search, use the npx install below instead.\n\n### Claude Desktop (JSON config)\n\nAdd to `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"calibre\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"calibre-mcp\"]\n    }\n  }\n}\n```\n\n### Cowork\n\nConfigure the server in Claude Desktop (either method above) — Desktop bridges local MCP\nservers into Cowork automatically. No extra setup.\n\n### Skills only — any agent (Claude Code, Codex, Cursor, …)\n\nThe repo's Agent Skills — a guided installer (`calibre-mcp-setup`), the calibre-mcp usage\nguide, and the two distill skills — install into any Agent-Skills-compatible harness with\nthe [skills.sh](https://skills.sh) installer:\n\n```sh\nnpx skills@latest add caelum29/calibre-mcp\n```\n\nPick the skills and target agents interactively. Two philosophies, same as\n[mattpocock/skills](https://github.com/mattpocock/skills): **skills.sh copies** the files\ninto your setup so you can hack on them; the **Claude Code plugin** (above) keeps them as a\nmanaged, auto-updating bundle. Either way the skills drive this MCP server's tools, so\ninstall the server too — or let the `calibre-mcp-setup` skill do it: it walks any agent\nthrough preflight, per-client install (macOS/Windows/Linux), and verification.\n\n### First contact — a five-prompt tour\n\nThe server auto-detects your default library; if the Content Server isn’t reachable it\nlogs an actionable hint to stderr. Then try, in order:\n\n1. *“list my calibre libraries”* — connectivity sanity check.\n2. *“find books about Rust”* — metadata search; in Claude Desktop the results render as\n   the cover carousel above.\n3. *“show me The Rust Programming Language”* — full metadata; renders as a book card with\n   cover, rating, and per-format read buttons.\n4. *“show me figure 2.3 from the JWT Handbook”* — the figure arrives as an image for the\n   assistant and, in Claude Desktop, in a figure viewer you can zoom and pan. If the\n   first description doesn’t match what you see, ask *“look at the image — what does it\n   actually show?”*: models sometimes answer figure questions from memory before reading\n   the pixels (the tool result nudges them to look; see Troubleshooting).\n5. *“build the semantic index for my Kafka books”* — one-time prep for meaning-based search\n   (see below).\n6. *“which of my books explain consumer-group rebalancing?”* — semantic search; answers\n   with ranked books, or exact passages when scoped to one book.\n\nBonus: *“what’s wrong with my library?”* runs the quality audit (missing metadata,\nraw-filename titles, invalid ISBNs).\n\n## ✍️ Enabling writes\n\nWrite tools (`calibre_update_book`, `calibre_bulk_update`, `calibre_add_book`,\n`calibre_remove_book`, `calibre_merge_books`, `calibre_manage_bundles`) are **hidden by\ndefault** — including `calibre_manage_bundles`' read-only `list` action, since the gate works\nper tool, not per action. Two independent switches must be on:\n\n1. **The MCP-side gate** — set `CALIBRE_MCP_ENABLE_WRITE=1` (or tick *Enable writes* in\n   the Desktop bundle settings). Without it the write tools aren’t even registered.\n2. **The Calibre-side gate** — the Content Server must allow local writes. **By\n   default the server embedded in the Calibre GUI is read-only**, so either enable\n   the GUI option below or run a standalone server with `--enable-local-write`:\n\n   ```sh\n   # quit the Calibre GUI first (it holds the library lock), then:\n   calibre-server --enable-local-write --port 8080 \"/path/to/Calibre Library\"\n   ```\n\n   Or enable it on the **GUI-embedded** server without quitting the app: open\n   Calibre → **Preferences → Sharing over the net → Advanced** and tick\n   **“Allow un-authenticated local connections to make changes to the library”**\n   (i.e. permit local write access), then restart the Content Server from the GUI.\n   This is the `--enable-local-write` equivalent for the embedded server.\n\nWith only the first switch on, write tools appear but Calibre refuses the write — the\nerror message tells you exactly that. Reads work fine against the GUI-embedded server.\n\nSafety behavior: `calibre_bulk_update` requires an explicit book selection (`ids` or\n`query` — there is no “all books” default) and previews changes until you pass\n`preview: false`. `calibre_remove_book` is a dry-run until you pass `confirm: true`;\ndeletion removes records *and* files, permanently. `calibre_merge_books` shows its full\nmerge plan until you pass `confirm: true`, and trashed sources stay recoverable from\nCalibre's trash (mode `safe` keeps them entirely). `calibre_add_book` only imports files\nfrom whitelisted folders (`CALIBRE_MCP_ADD_ROOTS`).\n\n## 🔎 Semantic search\n\n> Deep dive: [`docs/SEMANTIC-SEARCH.md`](./docs/SEMANTIC-SEARCH.md) — how indexing, hybrid retrieval, and reranking work.\n\nMeaning-based search is **opt-in** and needs two things:\n\n1. **The embeddings dependency** — `@huggingface/transformers` is an\n   `optionalDependencies` entry, so a normal `npx calibre-mcp` / `npm install` gets it\n   automatically. (Only the MCPB bundle excludes it.)\n2. **An index** — ask Claude to run `calibre_build_index` for the books you care about\n   (by ids or a Calibre query). The first build downloads the embedding model\n   (`multilingual-e5-small`, ~118 MB, one-time) into the index directory; after that\n   everything runs offline. Indexing runs at roughly 100 chunks/sec on Apple Silicon.\n\n> [!IMPORTANT]\n> **Search results are sharpened by a cross-encoder reranker whose model is a separate\n> ~576 MB one-time download.** `calibre_build_index` pre-downloads it during the build —\n> the step you already expect to be slow. If you skip straight to searching on a machine\n> without the cached model, your **first** hybrid/vector search triggers that download\n> instead. Reranking also adds seconds of CPU per semantic search; set\n> `CALIBRE_MCP_RERANK=off` to disable it (faster, noticeably less precise ranking).\n\nThen `calibre_semantic_search` answers queries like *“which of my books explain consumer\ngroup rebalancing?”* — across the library (`scope: library`, ranks books) or within one\nbook (`scope: book`, returns located passages). Retrieval is **hybrid** by default:\nvector cosine + stemmed keyword FTS, fused with reciprocal rank fusion, then reranked by\nthe cross-encoder (top 30 candidates) when its model is available. Queries in one\nlanguage find passages in another (EN⇄RU verified).\n\n**No embeddings? Keyword search still works.** `mode: keyword` uses no model *at query\ntime*, but it needs an index. If the embedding model isn’t installed (the default MCPB\nbundle ships without it), build a **keyword-only** index — `calibre_build_index` with\n`keywordOnly: true`, or it happens automatically when the model is absent — and search with\n`mode: keyword`. That path has zero ML dependencies. `mode: vector` then errors actionably\nand `mode: hybrid` degrades to keyword (with a note); rebuild with the model installed\n(`force: true`) to add semantic ranking.\n\n## 🧰 Tools\n\n> Full reference with parameters and examples: [`docs/TOOLS.md`](./docs/TOOLS.md).\n\n| Tool | Access | What it does |\n|---|---|---|\n| `calibre_search` | read | Find books by title/author/ISBN/tag or Calibre query syntax (`mode: meta`), or full text (`mode: fts`); `scope: book` searches inside one book; `filter` scopes to a bundle |\n| `calibre_get_book` | read | Full metadata, formats, and cover link for one book (id or uuid); `include_cover: true` embeds the cover image in the result |\n| `calibre_get_content` | read | Read a book’s text as capped excerpts; walk the whole book via cursor. `structure: true` returns a chapter map (headings, offsets, per-chapter cursors) — EN + RU/UK |\n| `calibre_get_figures`\\* | read | List a book’s figures/illustrations with captions and page locations; fetched ones render in an in-chat figure viewer |\n| `calibre_list_categories` | read | Browse tags, authors, series, publishers, custom columns with counts |\n| `calibre_list_libraries` | read | List the libraries the Content Server exposes (+ which is default) |\n| `calibre_semantic_search` | read | Meaning-based search; `mode: hybrid\\|vector\\|keyword`, library- or book-scoped; `filter` scopes to a bundle |\n| `calibre_build_index` | read* | Build/refresh the local semantic index for selected books (writes only a local index file); `keywordOnly: true` builds a model-free keyword index |\n| `calibre_find_duplicates` | read | Duplicate groups with merge-safety scores; `mode: compare` diffs two books |\n| `calibre_quality_report` | read | Audit: missing metadata, raw-filename titles, invalid ISBNs, author-sort issues, series gaps |\n| `calibre_recover_metadata` | read | Propose real metadata via Open Library → Google Books; **preview-only**, apply with `calibre_update_book` |\n| `calibre_extract_isbn` | **write** | Scan a book’s own text for a valid ISBN and set its `isbn` identifier; preview-first, apply with `apply: true` |\n| `calibre_update_book` | **write** | Set metadata fields on one book (incl. `#custom` columns); returns the applied diff |\n| `calibre_bulk_update` | **write** | Same change across a set of books; selection required, preview-first |\n| `calibre_add_book` | **write** | Import a local ebook file (path-whitelisted) |\n| `calibre_remove_book` | **write, destructive** | Permanently delete books (records + files); dry-run unless confirmed |\n| `calibre_merge_books` | **write, destructive** | Merge duplicate records: move formats into a target, merge metadata per Calibre's rules, trash sources; dry-run plan unless confirmed |\n| `calibre_manage_bundles` | **write** | List/create/update/delete Bundles — named topical filters backed by Calibre saved searches; `-`-named bundles auto-hide their books from discovery searches; preview-first |\n| `calibre_ping` | read | Health check: is Calibre reachable end-to-end? |\n\n\\* Figures reach the assistant as real images, but models sometimes describe a figure from\nmemory before looking at it — if the first description doesn’t match the picture, re-ask\nwith *“look at the image — what does it actually show?”* (details in\n[Troubleshooting](./docs/TROUBLESHOOTING.md#the-assistant-describes-a-figure-wrongly-on-the-first-try)).\n\nIn MCP Apps hosts, `calibre_search` and `calibre_semantic_search` (library scope) render\ntheir results as a cover-board carousel, `calibre_get_book` as a book card, and\n`calibre_get_figures` as a figure viewer (reading pane + margin rail, click to zoom to 100%)\nso you see the diagrams the assistant is reading — covers load from your local Content\nServer. Everywhere else the same tools return their usual text results; no configuration\nneeded either way.\n\n## 📚 Companion skill: calibre-distill\n\nAn Agent Skill that distills a book from your library into a reusable, structured skill\n(frameworks, mental models, glossary, cheatsheet) by driving the tools above — the chapter\nmap (`calibre_get_content structure=true`) plus in-book keyword + semantic search. Works on\nEN and RU/UK books, no temp files, and can optionally stamp what you learned back into the\ncatalog (tags + a distill note) through the gated write tools.\n\nIt ships in this repo at [`skills/calibre-distill/`](./skills/calibre-distill). Install it\nvia `npx skills@latest add caelum29/calibre-mcp` or the Claude Code plugin (see\n[Quick start](#-quick-start)), or manually by symlinking:\n\n```sh\nln -s \"$PWD/skills/calibre-distill\" ~/.claude/skills/calibre-distill\n```\n\nThen ask, e.g., *“distill book 187 into a skill called kafka-ops”*. Note: the MCPB bundle\ncan’t ship skills — install the skills separately from the MCP server on Claude Desktop.\n\n### Companion skill: calibre-distill-topic\n\nA sibling skill that synthesizes **one topic across several books** (≥3) into a single\n**concept-keyed** skill — a decision framework, per-concept sections, a cross-source config\ntable, an explicit *“where the sources disagree or complement”* section, and an ISBN\nbibliography that doubles as a live-source binding. Use it when you want a topic study aid\nbuilt from a shelf of books rather than a single-book distill (single-book requests belong\nto `calibre-distill`). Ships at [`skills/calibre-distill-topic/`](./skills/calibre-distill-topic);\ninstalled by the same skills.sh / plugin / symlink paths as above.\n\nThen ask, e.g., *“synthesize kafka reliability from books 187 182 571 186 into a skill.”*\n\nGenerated skills can be checked with the bundled verifier — verbatim-overlap (8-gram\nshingles vs the source books), quote budget, compression floor, heading mirroring,\ncursor leaks, and attribution:\n\n```sh\npnpm build && node scripts/legal-gate.mjs <skill-dir> --book <id> [--book <id>…]\n```\n\n## ⚙️ Configuration\n\nEverything is optional — with a running Content Server on the default port, zero config\nworks. Environment variables (the Desktop bundle exposes the same settings as UI fields):\n\n| Variable | Default | Purpose |\n|---|---|---|\n| `CALIBRE_MCP_SERVER_URL` | `http://localhost:8080` | Calibre Content Server base URL |\n| `CALIBRE_MCP_LIBRARY` | *auto-detect* | Library name; empty = the server’s default library |\n| `CALIBRE_MCP_ENABLE_WRITE` | off | Master write gate (`1`/`true`/`yes`) |\n| `CALIBRE_MCP_CALIBREDB_PATH` | *auto-discover* | `calibredb` binary; found via standard install paths, then `PATH` |\n| `CALIBRE_MCP_INDEX_DIR` | platform data dir¹ | Semantic index + embedding-model cache |\n| `CALIBRE_MCP_SEMANTIC_FLOOR` | `0.78` | Cosine score below which semantic results are flagged low-confidence |\n| `CALIBRE_MCP_RERANK` | on | Cross-encoder rerank stage on semantic search (~576 MB model, seconds of CPU per query); set `off`/`false`/`0` to disable |\n| `CALIBRE_MCP_MAX_BOOK_BYTES` | `268435456` (256 MB) | Largest book download `calibre_build_index` / `calibre_get_content` will extract; bigger books are skipped² |\n| `CALIBRE_MCP_ADD_ROOTS` | `~/Documents`, `~/Downloads` | Folders `calibre_add_book` may import from (path-delimiter separated) |\n| `CALIBRE_MCP_BOARD_STYLE` | `shelf` | Search-results widget style in MCP Apps hosts: `shelf` (scrolling cover shelf) or `coverflow` (3D cover flow; the Desktop bundle exposes this as a *Coverflow search results* toggle) |\n\n¹ macOS `~/Library/Application Support/calibre-mcp/index`, Windows\n`%APPDATA%\\calibre-mcp\\index`, Linux `$XDG_DATA_HOME/calibre-mcp/index`.\n\n² Size the cap against what the **Content Server serves**, not the file on disk — it can hand\nback a much heavier copy (an 8 MB PDF served as 70 MB), so a disk-sized cap silently skips books.\n\n## 🩺 Troubleshooting\n\n> More symptoms and fixes: [`docs/TROUBLESHOOTING.md`](./docs/TROUBLESHOOTING.md).\n\n- **“Calibre unreachable” / connection refused** — the Content Server isn’t running.\n  In Calibre: *Connect/share → Start Content server*, or point\n  `CALIBRE_MCP_SERVER_URL` at the right host/port.\n- **Write refused / “Forbidden”** — the Content Server doesn’t allow local writes.\n  See *Enabling writes* above: run a standalone server with\n  `--enable-local-write`, or tick the GUI’s *Sharing over the net → Advanced* option\n  and restart the Content Server.\n- **Full-text search returns nothing / errors** — Calibre’s FTS index isn’t enabled for\n  the library. In Calibre: *Preferences → Searching → Full text search*, enable it, and\n  let indexing finish (it can take a while on large libraries).\n- **“embedding model unavailable”** — the optional `@huggingface/transformers` package\n  isn’t installed (expected with the MCPB bundle). Use the npx install, or\n  `npm install @huggingface/transformers` next to the server. To search without it, build a\n  keyword-only index (`calibre_build_index keywordOnly=true`) and use `mode: keyword`.\n- **`calibredb` not found** — install Calibre, or set `CALIBRE_MCP_CALIBREDB_PATH` to\n  the binary (macOS: `/Applications/calibre.app/Contents/MacOS/calibredb`).\n- **A PDF extracts to empty text** — it’s a scanned/image PDF; Calibre has no OCR, and\n  neither do we.\n- **Library not found (404)** — pass the library’s *display name* or *ID* as shown by\n  `calibre_list_libraries`; when in doubt, leave the library unset and let the server\n  pick its default.\n\n## 🛠️ Development\n\n```sh\npnpm install\npnpm build        # tsc → dist/\npnpm test         # vitest (unit; no network, no model download)\npnpm test:model   # gated embedding-model integration tests (~118 MB download)\npnpm inspect      # MCP Inspector against the built server\npnpm pack:mcpb    # build the Claude Desktop .mcpb bundle\n```\n\nThe codebase is Clean Architecture: tool handlers, Calibre clients, and the semantic\ncore are SDK-free; only `src/server.ts` touches the MCP SDK. User docs — the tool\nreference and the semantic-search guide — live in [`docs/`](./docs).\n\nQuestions, ideas, and setups welcome in\n[**Discussions**](https://github.com/caelum29/calibre-mcp/discussions); bug reports and PRs\nin [Issues](https://github.com/caelum29/calibre-mcp/issues).\n\n## 📄 License\n\n[MIT](./LICENSE) © 2026 Artem Sorochynskyi\n\nAn independent project, not affiliated with Calibre.\n[Calibre](https://calibre-ebook.com) itself is\n[Kovid Goyal's open-source project](https://github.com/kovidgoyal/calibre) (GPLv3) —\nthis server drives it as a separate program via `calibredb` and the Content Server.\n","readmeFilename":"README.md"}