calibreweb-mcp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shelves.js","sourceRoot":"","sources":["../../src/tools/shelves.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { CalibreWebApi } from '../api.js';
3
+ export declare function registerStatsTools(server: McpServer, api: CalibreWebApi): void;
@@ -0,0 +1,25 @@
1
+ import { jsonResult, run } from '../result.js';
2
+ export function registerStatsTools(server, api) {
3
+ server.registerTool('get_stats', {
4
+ title: 'Get library statistics',
5
+ description: 'Returns the total number of books, authors, categories (tags) and ' +
6
+ 'series in the library.',
7
+ inputSchema: {},
8
+ annotations: { readOnlyHint: true },
9
+ }, async () => run(async () => {
10
+ const raw = await api.getJson('/opds/stats');
11
+ const stats = typeof raw === 'object' && raw !== null
12
+ ? raw
13
+ : {};
14
+ // Only the four documented numeric counters are passed through — the
15
+ // endpoint answer goes into the model context verbatim otherwise.
16
+ const pick = (key) => typeof stats[key] === 'number' ? stats[key] : undefined;
17
+ return jsonResult({
18
+ books: pick('books'),
19
+ authors: pick('authors'),
20
+ categories: pick('categories'),
21
+ series: pick('series'),
22
+ });
23
+ }));
24
+ }
25
+ //# sourceMappingURL=stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/tools/stats.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,UAAU,kBAAkB,CAChC,MAAiB,EACjB,GAAkB;IAElB,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EACT,oEAAoE;YACpE,wBAAwB;QAC1B,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,KAAK,IAAI,EAAE,CACT,GAAG,CAAC,KAAK,IAAI,EAAE;QACb,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAC7C,MAAM,KAAK,GACT,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;YACrC,CAAC,CAAE,GAA+B;YAClC,CAAC,CAAC,EAAE,CAAC;QACT,qEAAqE;QACrE,kEAAkE;QAClE,MAAM,IAAI,GAAG,CAAC,GAAW,EAAsB,EAAE,CAC/C,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1D,OAAO,UAAU,CAAC;YAChB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;YACpB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;YACxB,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC;YAC9B,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC;SACvB,CAAC,CAAC;IACL,CAAC,CAAC,CACL,CAAC;AACJ,CAAC"}
package/package.json ADDED
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "calibreweb-mcp",
3
+ "version": "0.1.0",
4
+ "mcpName": "io.github.ni-c/calibreweb-mcp",
5
+ "description": "MCP server for Calibre-Web — read-only library access via the OPDS feed",
6
+ "keywords": [
7
+ "mcp",
8
+ "model-context-protocol",
9
+ "calibre-web",
10
+ "calibre",
11
+ "opds",
12
+ "ebooks",
13
+ "library"
14
+ ],
15
+ "license": "MIT",
16
+ "author": "Willi Thiel",
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git+https://github.com/ni-c/calibreweb-mcp.git"
20
+ },
21
+ "bugs": {
22
+ "url": "https://github.com/ni-c/calibreweb-mcp/issues"
23
+ },
24
+ "homepage": "https://github.com/ni-c/calibreweb-mcp#readme",
25
+ "type": "module",
26
+ "bin": {
27
+ "calibreweb-mcp": "dist/index.js"
28
+ },
29
+ "main": "dist/index.js",
30
+ "files": [
31
+ "dist"
32
+ ],
33
+ "engines": {
34
+ "node": ">=22"
35
+ },
36
+ "scripts": {
37
+ "build": "tsc",
38
+ "watch": "tsc --watch",
39
+ "lint": "eslint . && prettier --check .",
40
+ "format": "prettier --write .",
41
+ "test": "vitest run",
42
+ "test:coverage": "vitest run --coverage",
43
+ "prepublishOnly": "npm run lint && npm test && npm run build",
44
+ "assets": "node scripts/gen-assets.mjs",
45
+ "assets:check": "node scripts/gen-assets.mjs --check"
46
+ },
47
+ "dependencies": {
48
+ "@modelcontextprotocol/sdk": "^1.30.0",
49
+ "fast-xml-parser": "^5.11.0",
50
+ "undici": "^8.10.0",
51
+ "zod": "^4.4.3"
52
+ },
53
+ "devDependencies": {
54
+ "@eslint/js": "^10.0.1",
55
+ "@resvg/resvg-js": "^2.6.2",
56
+ "@types/node": "^26.2.0",
57
+ "@vitest/coverage-v8": "4.1.11",
58
+ "eslint": "^10.8.1",
59
+ "prettier": "^3.9.6",
60
+ "typescript": "^6.0.3",
61
+ "typescript-eslint": "^8.67.0",
62
+ "vitest": "^4.1.11"
63
+ }
64
+ }