@zonuexe/techbook-mcp 0.3.1 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -1
- package/README.md +1 -0
- package/dist/adapters/http/fetch-client.d.ts.map +1 -1
- package/dist/adapters/http/fetch-client.js +13 -5
- package/dist/adapters/http/fetch-client.js.map +1 -1
- package/dist/adapters/publishers/seshop.d.ts.map +1 -1
- package/dist/adapters/publishers/seshop.js +58 -32
- package/dist/adapters/publishers/seshop.js.map +1 -1
- package/dist/application/get-book-by-isbn.d.ts +11 -0
- package/dist/application/get-book-by-isbn.d.ts.map +1 -1
- package/dist/application/get-book-by-isbn.js +20 -7
- package/dist/application/get-book-by-isbn.js.map +1 -1
- package/dist/application/resolve-book.d.ts +52 -0
- package/dist/application/resolve-book.d.ts.map +1 -0
- package/dist/application/resolve-book.js +136 -0
- package/dist/application/resolve-book.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +39 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts +54 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +46 -0
- package/dist/mcp/tools.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.3.3] - 2026-06-03
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- `resolve_book` ツールを追加。手がかり(ISBN・書名・著者)から正規の1冊を確信度つきで同定する。ISBN があれば openBD→出版社→カーリルで解決し、title も渡すと解決結果と照合して版違い・誤ISBN を検出する(`validation.isbnTitleAgree`)。返り値に `status`(matched/ambiguous/not_found)・`confidence`(high/medium/low)・`source` を含み、自動採用の可否を判断しやすくする
|
|
15
|
+
- `resolve_books` ツールを追加(`resolve_book` の一括版)。ローカル蔵書への一括メタデータ付与向けに、入力順に揃った結果配列を返す
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
- 一部の実行環境・プロキシ環境で HTTP レスポンスの `Content-Encoding: gzip` が自動解凍されず、gzip の生バイトを `JSON.parse`/HTML パースしてエラーや空結果になる問題を修正(`get_book_by_isbn` が「is not valid JSON」で失敗、JSON API 系アダプタがエラー、HTML ローカルフィルタ型が無言で 0 件になる等)。gzip マジックバイトを検出した場合は手動で解凍するフォールバックを追加
|
|
20
|
+
- `build` がコンパイル前に `dist/` をクリーンするようにし、ソース削除後の古い生成物が npm パッケージに混入しないようにした
|
|
21
|
+
|
|
22
|
+
## [0.3.2] - 2026-06-03
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
|
|
26
|
+
- SEshop(翔泳社)の `search_books` 結果に著者・ISBN・紹介文が含まれていなかった問題を修正(検索結果の各書籍について詳細ページから著者・ISBN・紹介文を補完する。ISBN が付くことで openBD による補完も有効になる)
|
|
27
|
+
|
|
10
28
|
## [0.3.1] - 2026-06-02
|
|
11
29
|
|
|
12
30
|
### Fixed
|
|
@@ -95,7 +113,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
95
113
|
|
|
96
114
|
- テストを vitest から `node:test` + `node:assert` に移行(Node.js・Bun・Deno で共通実行可能に)
|
|
97
115
|
|
|
98
|
-
[Unreleased]: https://github.com/zonuexe/techbook-mcp/compare/v0.3.
|
|
116
|
+
[Unreleased]: https://github.com/zonuexe/techbook-mcp/compare/v0.3.3...HEAD
|
|
117
|
+
[0.3.3]: https://github.com/zonuexe/techbook-mcp/compare/v0.3.2...v0.3.3
|
|
118
|
+
[0.3.2]: https://github.com/zonuexe/techbook-mcp/compare/v0.3.1...v0.3.2
|
|
99
119
|
[0.3.1]: https://github.com/zonuexe/techbook-mcp/compare/v0.3.0...v0.3.1
|
|
100
120
|
[0.3.0]: https://github.com/zonuexe/techbook-mcp/compare/v0.2.4...v0.3.0
|
|
101
121
|
[0.2.4]: https://github.com/zonuexe/techbook-mcp/compare/v0.2.3...v0.2.4
|
package/README.md
CHANGED
|
@@ -73,6 +73,7 @@ Claude が `list_publishers` ツールを呼び出し、出版社名と ID の
|
|
|
73
73
|
| BOOK TECH | `book-tech` | — | HTML scraping |
|
|
74
74
|
| ボーンデジタル | `born-digital` | `86246` | HTML scraping (EUC-JP) |
|
|
75
75
|
| コロナ社 | `coronasha` | `339` | HTML scraping |
|
|
76
|
+
| CQ出版社 | `cq-publishing` | — | HTML scraping (Tech Village) |
|
|
76
77
|
| 技術評論社 | `gihyo` | `297` | JSON API |
|
|
77
78
|
| インプレスブックス | `impress-books` | `8443` | HTML scraping |
|
|
78
79
|
| 日科技連出版社 | `juse-p` | `8171` | HTML scraping |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-client.d.ts","sourceRoot":"","sources":["../../../src/adapters/http/fetch-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fetch-client.d.ts","sourceRoot":"","sources":["../../../src/adapters/http/fetch-client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AA8CpF,qBAAa,eAAgB,YAAW,UAAU;IAC1C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;IAWjE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;CAYvF"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import iconv from "iconv-lite";
|
|
2
|
+
import zlib from "node:zlib";
|
|
2
3
|
/** Content-Type ヘッダーから charset を取り出す(小文字化)。なければ undefined */
|
|
3
4
|
function charsetFromContentType(contentType) {
|
|
4
5
|
const m = contentType?.match(/charset=["']?([^;"'\s]+)/i);
|
|
@@ -17,17 +18,24 @@ class FetchHttpResponse {
|
|
|
17
18
|
}
|
|
18
19
|
/**
|
|
19
20
|
* レスポンスボディを文字列で返す。
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
21
|
+
*
|
|
22
|
+
* - 一部のランタイム・プロキシ環境では `Content-Encoding: gzip` が自動解凍されず
|
|
23
|
+
* gzip の生バイトが返ることがある(openBD で `JSON.parse` が壊れる等)。
|
|
24
|
+
* gzip マジックバイト (0x1f 0x8b) を検出したら手動で解凍する。
|
|
25
|
+
* - `fetch().text()` は常に UTF-8 として解釈するため、Content-Type が
|
|
26
|
+
* EUC-JP・Shift_JIS など非UTF-8の場合は iconv-lite でデコードし直す
|
|
27
|
+
* (ラトルズ・ボーンデジタル等の EUC-JP サイト対応)。
|
|
23
28
|
*/
|
|
24
29
|
async text() {
|
|
25
30
|
const charset = charsetFromContentType(this.response.headers.get("content-type"));
|
|
31
|
+
let buffer = Buffer.from(await this.response.arrayBuffer());
|
|
32
|
+
if (buffer.length >= 2 && buffer[0] === 0x1f && buffer[1] === 0x8b) {
|
|
33
|
+
buffer = zlib.gunzipSync(buffer);
|
|
34
|
+
}
|
|
26
35
|
if (charset && charset !== "utf-8" && charset !== "utf8" && iconv.encodingExists(charset)) {
|
|
27
|
-
const buffer = Buffer.from(await this.response.arrayBuffer());
|
|
28
36
|
return iconv.decode(buffer, charset);
|
|
29
37
|
}
|
|
30
|
-
return
|
|
38
|
+
return buffer.toString("utf-8");
|
|
31
39
|
}
|
|
32
40
|
header(name) {
|
|
33
41
|
return this.response.headers.get(name);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-client.js","sourceRoot":"","sources":["../../../src/adapters/http/fetch-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"fetch-client.js","sourceRoot":"","sources":["../../../src/adapters/http/fetch-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,6DAA6D;AAC7D,SAAS,sBAAsB,CAAC,WAA0B;IACxD,MAAM,CAAC,GAAG,WAAW,EAAE,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC1D,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,iBAAiB;IACQ;IAA7B,YAA6B,QAAkB;QAAlB,aAAQ,GAAR,QAAQ,CAAU;IAAG,CAAC;IAEnD,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;IAC3B,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,IAAI;QACR,MAAM,OAAO,GAAG,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;QAClF,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QAC5D,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACnE,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,OAAO,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1F,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;CACF;AAED,MAAM,OAAO,eAAe;IAC1B,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,OAAwB;QAC7C,MAAM,IAAI,GAAgB;YACxB,OAAO,EAAE,OAAO,EAAE,OAAO;SAC1B,CAAC;QACF,IAAI,OAAO,EAAE,OAAO,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACxC,OAAO,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAW,EAAE,IAAY,EAAE,OAAwB;QAC5D,MAAM,IAAI,GAAgB;YACxB,MAAM,EAAE,MAAM;YACd,IAAI;YACJ,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE;SACrE,CAAC;QACF,IAAI,OAAO,EAAE,OAAO,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACxC,OAAO,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seshop.d.ts","sourceRoot":"","sources":["../../../src/adapters/publishers/seshop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAiB,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"seshop.d.ts","sourceRoot":"","sources":["../../../src/adapters/publishers/seshop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAiB,MAAM,2BAA2B,CAAC;AAuEjF,eAAO,MAAM,aAAa,EAAE,gBA8E3B,CAAC"}
|
|
@@ -12,6 +12,46 @@ function parseDate(text) {
|
|
|
12
12
|
return undefined;
|
|
13
13
|
return `${m[1]}-${m[2]}-${m[3]}`;
|
|
14
14
|
}
|
|
15
|
+
/** 詳細ページをスクレイピングして BookRecord を組み立てる(search と getDetail で共用) */
|
|
16
|
+
async function fetchSeshopDetail(url, deps) {
|
|
17
|
+
const html = await fetchText(url, deps);
|
|
18
|
+
const doc = deps.parser.parse(html);
|
|
19
|
+
const getMeta = (name) => doc.selectOne(`meta[name="${name}"]`)?.attr("content")?.trim() || undefined;
|
|
20
|
+
const title = doc.selectOne("h1")?.text().trim() ||
|
|
21
|
+
getMeta("cxenseparse:sho-product-name") ||
|
|
22
|
+
"";
|
|
23
|
+
// col-md-5 内の著者リンク(役割語は括弧内テキストノードで隣接しているがリンクテキストは名前のみ)
|
|
24
|
+
const authors = doc.select("a[href*='/product/author/']")
|
|
25
|
+
.map(el => el.text().trim())
|
|
26
|
+
.filter(Boolean);
|
|
27
|
+
const isbnRaw = getMeta("cxenseparse:sho-isbn");
|
|
28
|
+
const isbn = isbnRaw ? isbnRaw.replace(/\s+/g, "") : undefined;
|
|
29
|
+
// meta description は "<翔泳社の公式通販> |<紹介文>" 形式。定型の接頭辞を除去する
|
|
30
|
+
const descRaw = getMeta("description");
|
|
31
|
+
const description = descRaw
|
|
32
|
+
? (descRaw.replace(/^<翔泳社の公式通販>\s*[||]\s*/, "").trim() || undefined)
|
|
33
|
+
: undefined;
|
|
34
|
+
const priceRaw = getMeta("cxenseparse:sho-price");
|
|
35
|
+
const price = priceRaw ? parseInt(priceRaw, 10) : undefined;
|
|
36
|
+
const dateRaw = getMeta("cxenseparse:sho-releasedate");
|
|
37
|
+
const publishedAt = dateRaw ? parseDate(dateRaw) : undefined;
|
|
38
|
+
// カバー画像: book-img または meta
|
|
39
|
+
const coverImgEl = doc.selectOne("img.book-img");
|
|
40
|
+
const coverSrc = coverImgEl?.attr("src") ?? getMeta("cxenseparse:recs:image");
|
|
41
|
+
const coverImageUrl = coverSrc ? resolveUrl(BASE_URL, coverSrc) : undefined;
|
|
42
|
+
return {
|
|
43
|
+
title,
|
|
44
|
+
authors,
|
|
45
|
+
publisher: "翔泳社",
|
|
46
|
+
url,
|
|
47
|
+
isbn,
|
|
48
|
+
price,
|
|
49
|
+
publishedAt,
|
|
50
|
+
coverImageUrl,
|
|
51
|
+
description,
|
|
52
|
+
ebookStores: [{ name: "SEshop", url, drm: "social" }],
|
|
53
|
+
};
|
|
54
|
+
}
|
|
15
55
|
export const seshopAdapter = {
|
|
16
56
|
id: "seshop",
|
|
17
57
|
name: "SEshop (翔泳社)",
|
|
@@ -59,40 +99,26 @@ export const seshopAdapter = {
|
|
|
59
99
|
if (results.length >= limit)
|
|
60
100
|
break;
|
|
61
101
|
}
|
|
62
|
-
|
|
102
|
+
// 検索結果ページには著者・ISBN が無い(data-* に存在しない)ため、各ヒットの
|
|
103
|
+
// 詳細ページから著者と ISBN を補完する。ISBN が付けばアプリ層の openBD 補完が
|
|
104
|
+
// description 等もさらに埋める。詳細取得の失敗は握りつぶし基本情報のみ返す。
|
|
105
|
+
return Promise.all(results.map(async (book) => {
|
|
106
|
+
try {
|
|
107
|
+
const detail = await fetchSeshopDetail(book.url, deps);
|
|
108
|
+
return {
|
|
109
|
+
...book,
|
|
110
|
+
authors: detail.authors.length > 0 ? detail.authors : book.authors,
|
|
111
|
+
isbn: detail.isbn ?? book.isbn,
|
|
112
|
+
description: detail.description ?? book.description,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
return book;
|
|
117
|
+
}
|
|
118
|
+
}));
|
|
63
119
|
},
|
|
64
120
|
async getDetail(url, deps) {
|
|
65
|
-
|
|
66
|
-
const doc = deps.parser.parse(html);
|
|
67
|
-
const getMeta = (name) => doc.selectOne(`meta[name="${name}"]`)?.attr("content")?.trim() || undefined;
|
|
68
|
-
const title = doc.selectOne("h1")?.text().trim() ||
|
|
69
|
-
getMeta("cxenseparse:sho-product-name") ||
|
|
70
|
-
"";
|
|
71
|
-
// col-md-5 内の著者リンク(役割語は括弧内テキストノードで隣接しているがリンクテキストは名前のみ)
|
|
72
|
-
const authors = doc.select("a[href*='/product/author/']")
|
|
73
|
-
.map(el => el.text().trim())
|
|
74
|
-
.filter(Boolean);
|
|
75
|
-
const isbnRaw = getMeta("cxenseparse:sho-isbn");
|
|
76
|
-
const isbn = isbnRaw ? isbnRaw.replace(/\s+/g, "") : undefined;
|
|
77
|
-
const priceRaw = getMeta("cxenseparse:sho-price");
|
|
78
|
-
const price = priceRaw ? parseInt(priceRaw, 10) : undefined;
|
|
79
|
-
const dateRaw = getMeta("cxenseparse:sho-releasedate");
|
|
80
|
-
const publishedAt = dateRaw ? parseDate(dateRaw) : undefined;
|
|
81
|
-
// カバー画像: book-img または meta
|
|
82
|
-
const coverImgEl = doc.selectOne("img.book-img");
|
|
83
|
-
const coverSrc = coverImgEl?.attr("src") ?? getMeta("cxenseparse:recs:image");
|
|
84
|
-
const coverImageUrl = coverSrc ? resolveUrl(BASE_URL, coverSrc) : undefined;
|
|
85
|
-
return {
|
|
86
|
-
title,
|
|
87
|
-
authors,
|
|
88
|
-
publisher: "翔泳社",
|
|
89
|
-
url,
|
|
90
|
-
isbn,
|
|
91
|
-
price,
|
|
92
|
-
publishedAt,
|
|
93
|
-
coverImageUrl,
|
|
94
|
-
ebookStores: [{ name: "SEshop", url, drm: "social" }],
|
|
95
|
-
};
|
|
121
|
+
return fetchSeshopDetail(url, deps);
|
|
96
122
|
},
|
|
97
123
|
};
|
|
98
124
|
//# sourceMappingURL=seshop.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seshop.js","sourceRoot":"","sources":["../../../src/adapters/publishers/seshop.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"seshop.js","sourceRoot":"","sources":["../../../src/adapters/publishers/seshop.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
import type { BookRecord } from "../domain/book.js";
|
|
2
2
|
import type { PublisherAdapter, PublisherDeps } from "../domain/publisher.js";
|
|
3
|
+
/** ISBN 解決の取得元 */
|
|
4
|
+
export type IsbnSource = "isbn:openbd" | "isbn:publisher" | "isbn:calil";
|
|
5
|
+
export interface IsbnResolution {
|
|
6
|
+
book: BookRecord;
|
|
7
|
+
source: IsbnSource;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* ISBN から書誌情報を解決し、取得元(source)付きで返す。見つからなければ null。
|
|
11
|
+
* 経路は上記 docstring の 1〜5 の順。
|
|
12
|
+
*/
|
|
13
|
+
export declare function resolveByIsbn(isbn: string, publishers: readonly PublisherAdapter[], deps: PublisherDeps): Promise<IsbnResolution | null>;
|
|
3
14
|
export declare function getBookByIsbn(isbn: string, publishers: readonly PublisherAdapter[], deps: PublisherDeps): Promise<BookRecord>;
|
|
4
15
|
//# sourceMappingURL=get-book-by-isbn.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-book-by-isbn.d.ts","sourceRoot":"","sources":["../../src/application/get-book-by-isbn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AA8C9E,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,SAAS,gBAAgB,EAAE,EACvC,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"get-book-by-isbn.d.ts","sourceRoot":"","sources":["../../src/application/get-book-by-isbn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AA8C9E,kBAAkB;AAClB,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,gBAAgB,GAAG,YAAY,CAAC;AAEzE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,SAAS,gBAAgB,EAAE,EACvC,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CA4DhC;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,SAAS,gBAAgB,EAAE,EACvC,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,UAAU,CAAC,CAIrB"}
|
|
@@ -39,7 +39,11 @@ async function fetchDetailByIsbnCode(isbn, publishers, deps) {
|
|
|
39
39
|
return undefined;
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
|
-
|
|
42
|
+
/**
|
|
43
|
+
* ISBN から書誌情報を解決し、取得元(source)付きで返す。見つからなければ null。
|
|
44
|
+
* 経路は上記 docstring の 1〜5 の順。
|
|
45
|
+
*/
|
|
46
|
+
export async function resolveByIsbn(isbn, publishers, deps) {
|
|
43
47
|
const normalizedIsbn = isbn.replace(/-/g, "");
|
|
44
48
|
// 言語の既定を刻み、著者の重複を除く(openBD/カーリル/国内出版社はいずれも日本語)
|
|
45
49
|
const stamp = (book, lang = "ja") => {
|
|
@@ -53,12 +57,12 @@ export async function getBookByIsbn(isbn, publishers, deps) {
|
|
|
53
57
|
// openBD 未収録でも、ISBN から詳細URLを決定的に引けるアダプター(O'Reilly 旧刊等)を先に試す
|
|
54
58
|
const byAdapter = await fetchDetailByIsbnCode(normalizedIsbn, publishers, deps);
|
|
55
59
|
if (byAdapter)
|
|
56
|
-
return stamp(byAdapter);
|
|
60
|
+
return { book: stamp(byAdapter), source: "isbn:publisher" };
|
|
57
61
|
// それも不可ならカーリルをフォールバックとして試みる(廃業出版社など)
|
|
58
62
|
const calilBook = await fetchCalilBook(normalizedIsbn, deps);
|
|
59
63
|
if (calilBook)
|
|
60
|
-
return stamp(calilBook);
|
|
61
|
-
|
|
64
|
+
return { book: stamp(calilBook), source: "isbn:calil" };
|
|
65
|
+
return null;
|
|
62
66
|
}
|
|
63
67
|
// hanmoto.storelink が既知アダプターの baseUrl と前方一致する場合は
|
|
64
68
|
// 出版社サイトから詳細取得を試みる
|
|
@@ -69,7 +73,10 @@ export async function getBookByIsbn(isbn, publishers, deps) {
|
|
|
69
73
|
const allowed = await checkRobotsTxt(storelink, deps);
|
|
70
74
|
if (allowed) {
|
|
71
75
|
try {
|
|
72
|
-
return
|
|
76
|
+
return {
|
|
77
|
+
book: stamp(await publisher.getDetail(storelink, deps), publisher.language ?? "ja"),
|
|
78
|
+
source: "isbn:publisher",
|
|
79
|
+
};
|
|
73
80
|
}
|
|
74
81
|
catch {
|
|
75
82
|
// 出版社サイトからの取得失敗は無視して次のフォールバックへ
|
|
@@ -87,13 +94,19 @@ export async function getBookByIsbn(isbn, publishers, deps) {
|
|
|
87
94
|
const matched = results.find(r => r.isbn && r.isbn.replace(/-/g, "") === normalizedIsbn)
|
|
88
95
|
?? results[0];
|
|
89
96
|
if (matched)
|
|
90
|
-
return stamp(matched, publisher.language ?? "ja");
|
|
97
|
+
return { book: stamp(matched, publisher.language ?? "ja"), source: "isbn:publisher" };
|
|
91
98
|
}
|
|
92
99
|
catch {
|
|
93
100
|
// 出版社サイトからの取得失敗は無視して openBD データで返す
|
|
94
101
|
}
|
|
95
102
|
}
|
|
96
103
|
}
|
|
97
|
-
return stamp(openBDEntryToBookRecord(entry));
|
|
104
|
+
return { book: stamp(openBDEntryToBookRecord(entry)), source: "isbn:openbd" };
|
|
105
|
+
}
|
|
106
|
+
export async function getBookByIsbn(isbn, publishers, deps) {
|
|
107
|
+
const resolved = await resolveByIsbn(isbn, publishers, deps);
|
|
108
|
+
if (!resolved)
|
|
109
|
+
throw new Error(`書誌情報が見つかりません: ${isbn}`);
|
|
110
|
+
return resolved.book;
|
|
98
111
|
}
|
|
99
112
|
//# sourceMappingURL=get-book-by-isbn.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-book-by-isbn.js","sourceRoot":"","sources":["../../src/application/get-book-by-isbn.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gDAAgD,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD;;;;;;;;;;;GAWG;AAEH;;;;GAIG;AACH,KAAK,UAAU,qBAAqB,CAClC,IAAY,EACZ,UAAuC,EACvC,IAAmB;IAEnB,MAAM,SAAS,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IAEjC,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,SAAS,EAAE,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAEzC,IAAI,CAAC,CAAC,MAAM,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;
|
|
1
|
+
{"version":3,"file":"get-book-by-isbn.js","sourceRoot":"","sources":["../../src/application/get-book-by-isbn.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { BookRecord } from "../domain/book.js";
|
|
2
|
+
import type { PublisherAdapter, PublisherDeps } from "../domain/publisher.js";
|
|
3
|
+
import { type ScoredBook } from "./search-books.js";
|
|
4
|
+
import { type IsbnSource } from "./get-book-by-isbn.js";
|
|
5
|
+
/**
|
|
6
|
+
* 同定(resolve)クエリ。Riida の read_pdf_colophon が抽出した手がかりを
|
|
7
|
+
* そのまま渡せる。すべて任意だが、isbn / title / author のいずれかは必要。
|
|
8
|
+
*/
|
|
9
|
+
export interface ResolveQuery {
|
|
10
|
+
isbn?: string;
|
|
11
|
+
title?: string;
|
|
12
|
+
author?: string;
|
|
13
|
+
publisherId?: string;
|
|
14
|
+
}
|
|
15
|
+
export type ResolveConfidence = "high" | "medium" | "low";
|
|
16
|
+
export type ResolveStatus = "matched" | "ambiguous" | "not_found";
|
|
17
|
+
export type ResolveSource = IsbnSource | "search" | "none";
|
|
18
|
+
export interface ResolveResult {
|
|
19
|
+
/** matched=本命確定 / ambiguous=候補が拮抗 / not_found=該当なし */
|
|
20
|
+
status: ResolveStatus;
|
|
21
|
+
/** 自動採用の可否目安。high=無確認で採用可、medium=ほぼ確実、low=要確認 */
|
|
22
|
+
confidence: ResolveConfidence;
|
|
23
|
+
/** ベストマッチ。not_found のとき null */
|
|
24
|
+
book: BookRecord | null;
|
|
25
|
+
/** クエリとの一致度(ISBN 完全一致は 1)。0..1 */
|
|
26
|
+
matchScore: number;
|
|
27
|
+
/** 取得元 */
|
|
28
|
+
source: ResolveSource;
|
|
29
|
+
/** isbn と title の両方が与えられたときのみ:解決結果が title と一致するか(版違い検出) */
|
|
30
|
+
validation?: {
|
|
31
|
+
isbnTitleAgree: boolean;
|
|
32
|
+
};
|
|
33
|
+
/** ambiguous のとき上位候補を返す */
|
|
34
|
+
candidates?: ScoredBook[];
|
|
35
|
+
/** not_found のとき理由 */
|
|
36
|
+
reason?: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 手がかり(ISBN / 書名 / 著者)から正規の1冊を確信度つきで同定する。
|
|
40
|
+
*
|
|
41
|
+
* - isbn があれば openBD→出版社→カーリルで解決(resolveByIsbn)。title も来ていれば
|
|
42
|
+
* 解決結果と照合して版違い・誤ISBNを検出する(validation.isbnTitleAgree)。
|
|
43
|
+
* - isbn が無い/解決できない場合は横断検索の matchScore でベストマッチを採る。
|
|
44
|
+
* 上位が拮抗していれば status="ambiguous" として候補を返す。
|
|
45
|
+
*/
|
|
46
|
+
export declare function resolveBook(query: ResolveQuery, publishers: readonly PublisherAdapter[], deps: PublisherDeps): Promise<ResolveResult>;
|
|
47
|
+
/**
|
|
48
|
+
* 複数の手がかりを一括で同定する(Riida の一括メタ付与・batch update に対応)。
|
|
49
|
+
* 入力順に揃った結果配列を返す。個々の失敗は not_found 結果に変換し、配列全体は失敗しない。
|
|
50
|
+
*/
|
|
51
|
+
export declare function resolveBooks(queries: readonly ResolveQuery[], publishers: readonly PublisherAdapter[], deps: PublisherDeps): Promise<ResolveResult[]>;
|
|
52
|
+
//# sourceMappingURL=resolve-book.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-book.d.ts","sourceRoot":"","sources":["../../src/application/resolve-book.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAKvE;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAC1D,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC;AAClE,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC5B,sDAAsD;IACtD,MAAM,EAAE,aAAa,CAAC;IACtB,iDAAiD;IACjD,UAAU,EAAE,iBAAiB,CAAC;IAC9B,gCAAgC;IAChC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACxB,kCAAkC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU;IACV,MAAM,EAAE,aAAa,CAAC;IACtB,2DAA2D;IAC3D,UAAU,CAAC,EAAE;QAAE,cAAc,EAAE,OAAO,CAAA;KAAE,CAAC;IACzC,2BAA2B;IAC3B,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC;IAC1B,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAqBD;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,SAAS,gBAAgB,EAAE,EACvC,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,aAAa,CAAC,CA8FxB;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,SAAS,YAAY,EAAE,EAChC,UAAU,EAAE,SAAS,gBAAgB,EAAE,EACvC,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,aAAa,EAAE,CAAC,CAkB1B"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { searchBooks } from "./search-books.js";
|
|
2
|
+
import { resolveByIsbn } from "./get-book-by-isbn.js";
|
|
3
|
+
import { mapWithConcurrency } from "./concurrency.js";
|
|
4
|
+
import { looksLikeIsbn } from "../domain/isbn.js";
|
|
5
|
+
import { titleMatchScore } from "../domain/text-match.js";
|
|
6
|
+
/** title が ISBN 解決結果と一致しているとみなす最小スコア */
|
|
7
|
+
const TITLE_AGREE_THRESHOLD = 0.5;
|
|
8
|
+
/** confidence: high とみなす最小 matchScore */
|
|
9
|
+
const HIGH_SCORE = 0.9;
|
|
10
|
+
/** confidence: medium とみなす最小 matchScore */
|
|
11
|
+
const MEDIUM_SCORE = 0.5;
|
|
12
|
+
/** 上位2件がこの差未満なら ambiguous(候補拮抗)とみなす */
|
|
13
|
+
const AMBIGUOUS_GAP = 0.1;
|
|
14
|
+
/** バッチ解決の並列度(各 title クエリは横断検索を伴うため低めに抑える) */
|
|
15
|
+
const RESOLVE_BATCH_CONCURRENCY = 4;
|
|
16
|
+
const round3 = (n) => Math.round(n * 1000) / 1000;
|
|
17
|
+
function scoreToConfidence(score) {
|
|
18
|
+
if (score >= HIGH_SCORE)
|
|
19
|
+
return "high";
|
|
20
|
+
if (score >= MEDIUM_SCORE)
|
|
21
|
+
return "medium";
|
|
22
|
+
return "low";
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 手がかり(ISBN / 書名 / 著者)から正規の1冊を確信度つきで同定する。
|
|
26
|
+
*
|
|
27
|
+
* - isbn があれば openBD→出版社→カーリルで解決(resolveByIsbn)。title も来ていれば
|
|
28
|
+
* 解決結果と照合して版違い・誤ISBNを検出する(validation.isbnTitleAgree)。
|
|
29
|
+
* - isbn が無い/解決できない場合は横断検索の matchScore でベストマッチを採る。
|
|
30
|
+
* 上位が拮抗していれば status="ambiguous" として候補を返す。
|
|
31
|
+
*/
|
|
32
|
+
export async function resolveBook(query, publishers, deps) {
|
|
33
|
+
const isbn = query.isbn?.trim();
|
|
34
|
+
const hasTextQuery = Boolean(query.title || query.author);
|
|
35
|
+
if (isbn && looksLikeIsbn(isbn)) {
|
|
36
|
+
const resolved = await resolveByIsbn(isbn, publishers, deps);
|
|
37
|
+
if (resolved) {
|
|
38
|
+
const { book, source } = resolved;
|
|
39
|
+
if (query.title) {
|
|
40
|
+
const ts = titleMatchScore(query.title, book.title);
|
|
41
|
+
const agree = ts >= TITLE_AGREE_THRESHOLD;
|
|
42
|
+
return {
|
|
43
|
+
status: "matched",
|
|
44
|
+
confidence: agree ? "high" : "low",
|
|
45
|
+
book,
|
|
46
|
+
matchScore: round3(ts),
|
|
47
|
+
source,
|
|
48
|
+
validation: { isbnTitleAgree: agree },
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
// ISBN は完全一致=正準。照合する title が無ければ高確信
|
|
52
|
+
return { status: "matched", confidence: "high", book, matchScore: 1, source };
|
|
53
|
+
}
|
|
54
|
+
// ISBN 指定だが見つからない。title/author も無ければ確定的に not_found
|
|
55
|
+
if (!hasTextQuery) {
|
|
56
|
+
return {
|
|
57
|
+
status: "not_found",
|
|
58
|
+
confidence: "low",
|
|
59
|
+
book: null,
|
|
60
|
+
matchScore: 0,
|
|
61
|
+
source: "none",
|
|
62
|
+
reason: `ISBN ${isbn} の書誌情報が見つかりませんでした`,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
// title/author があれば検索経路へフォールバック
|
|
66
|
+
}
|
|
67
|
+
if (!hasTextQuery) {
|
|
68
|
+
return {
|
|
69
|
+
status: "not_found",
|
|
70
|
+
confidence: "low",
|
|
71
|
+
book: null,
|
|
72
|
+
matchScore: 0,
|
|
73
|
+
source: "none",
|
|
74
|
+
reason: "isbn / title / author のいずれも指定がありません",
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
const searchQuery = {
|
|
78
|
+
title: query.title,
|
|
79
|
+
author: query.author,
|
|
80
|
+
publisherId: query.publisherId,
|
|
81
|
+
limit: 5,
|
|
82
|
+
};
|
|
83
|
+
const { books } = await searchBooks(searchQuery, publishers, deps);
|
|
84
|
+
if (books.length === 0) {
|
|
85
|
+
return {
|
|
86
|
+
status: "not_found",
|
|
87
|
+
confidence: "low",
|
|
88
|
+
book: null,
|
|
89
|
+
matchScore: 0,
|
|
90
|
+
source: "none",
|
|
91
|
+
reason: "一致する書籍が見つかりませんでした",
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
const best = books[0];
|
|
95
|
+
const second = books[1];
|
|
96
|
+
const confidence = scoreToConfidence(best.matchScore);
|
|
97
|
+
const ambiguous = second !== undefined &&
|
|
98
|
+
best.matchScore < 1 &&
|
|
99
|
+
best.matchScore >= MEDIUM_SCORE &&
|
|
100
|
+
best.matchScore - second.matchScore < AMBIGUOUS_GAP;
|
|
101
|
+
if (ambiguous) {
|
|
102
|
+
return {
|
|
103
|
+
status: "ambiguous",
|
|
104
|
+
confidence,
|
|
105
|
+
book: best,
|
|
106
|
+
matchScore: best.matchScore,
|
|
107
|
+
source: "search",
|
|
108
|
+
candidates: books.slice(0, 3),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
status: "matched",
|
|
113
|
+
confidence,
|
|
114
|
+
book: best,
|
|
115
|
+
matchScore: best.matchScore,
|
|
116
|
+
source: "search",
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* 複数の手がかりを一括で同定する(Riida の一括メタ付与・batch update に対応)。
|
|
121
|
+
* 入力順に揃った結果配列を返す。個々の失敗は not_found 結果に変換し、配列全体は失敗しない。
|
|
122
|
+
*/
|
|
123
|
+
export async function resolveBooks(queries, publishers, deps) {
|
|
124
|
+
const settled = await mapWithConcurrency(queries, RESOLVE_BATCH_CONCURRENCY, (query) => resolveBook(query, publishers, deps));
|
|
125
|
+
return settled.map((r) => r.status === "fulfilled"
|
|
126
|
+
? r.value
|
|
127
|
+
: {
|
|
128
|
+
status: "not_found",
|
|
129
|
+
confidence: "low",
|
|
130
|
+
book: null,
|
|
131
|
+
matchScore: 0,
|
|
132
|
+
source: "none",
|
|
133
|
+
reason: r.reason instanceof Error ? r.reason.message : String(r.reason),
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=resolve-book.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-book.js","sourceRoot":"","sources":["../../src/application/resolve-book.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAMnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAMnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAkClE;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAahF;AAsBD,wBAAgB,YAAY,CAC1B,UAAU,EAAE,SAAS,gBAAgB,EAAE,EACvC,IAAI,EAAE,aAAa,GAClB,MAAM,CAqGR;AAED,wBAAsB,WAAW,CAC/B,UAAU,EAAE,SAAS,gBAAgB,EAAE,EACvC,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,IAAI,CAAC,CAIf"}
|
package/dist/mcp/server.js
CHANGED
|
@@ -4,6 +4,7 @@ import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextpro
|
|
|
4
4
|
import { searchBooks } from "../application/search-books.js";
|
|
5
5
|
import { getBookDetail } from "../application/get-book-detail.js";
|
|
6
6
|
import { getBookByIsbn } from "../application/get-book-by-isbn.js";
|
|
7
|
+
import { resolveBook, resolveBooks } from "../application/resolve-book.js";
|
|
7
8
|
import { looksLikeIsbn } from "../domain/isbn.js";
|
|
8
9
|
import { VERSION } from "../version.js";
|
|
9
10
|
import { TOOLS } from "./tools.js";
|
|
@@ -46,6 +47,25 @@ export function summarizeErrors(errors) {
|
|
|
46
47
|
publishers,
|
|
47
48
|
}));
|
|
48
49
|
}
|
|
50
|
+
/** MCP 引数オブジェクトを ResolveQuery に変換する(publisher → publisherId) */
|
|
51
|
+
function toResolveQuery(o) {
|
|
52
|
+
return {
|
|
53
|
+
isbn: typeof o["isbn"] === "string" ? o["isbn"] : undefined,
|
|
54
|
+
title: typeof o["title"] === "string" ? o["title"] : undefined,
|
|
55
|
+
author: typeof o["author"] === "string" ? o["author"] : undefined,
|
|
56
|
+
publisherId: typeof o["publisher"] === "string" ? o["publisher"] : undefined,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/** 解決結果内の book / candidates を出力フォーマットに通す */
|
|
60
|
+
function formatResolveResult(result) {
|
|
61
|
+
const out = {
|
|
62
|
+
...result,
|
|
63
|
+
book: result.book ? formatBook(result.book) : null,
|
|
64
|
+
};
|
|
65
|
+
if (result.candidates)
|
|
66
|
+
out["candidates"] = result.candidates.map(formatBook);
|
|
67
|
+
return out;
|
|
68
|
+
}
|
|
49
69
|
export function createServer(publishers, deps) {
|
|
50
70
|
const server = new Server({
|
|
51
71
|
name: "@zonuexe/techbook-mcp",
|
|
@@ -112,6 +132,25 @@ export function createServer(publishers, deps) {
|
|
|
112
132
|
content: [{ type: "text", text: JSON.stringify(formatBook(book), null, 2) }],
|
|
113
133
|
};
|
|
114
134
|
}
|
|
135
|
+
case "resolve_book": {
|
|
136
|
+
const result = await resolveBook(toResolveQuery(args), publishers, deps);
|
|
137
|
+
return {
|
|
138
|
+
content: [{ type: "text", text: JSON.stringify(formatResolveResult(result), null, 2) }],
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
case "resolve_books": {
|
|
142
|
+
const booksArg = args["books"];
|
|
143
|
+
if (!Array.isArray(booksArg))
|
|
144
|
+
throw new Error("books は配列で指定してください");
|
|
145
|
+
const queries = booksArg.map(b => toResolveQuery((b ?? {})));
|
|
146
|
+
const results = await resolveBooks(queries, publishers, deps);
|
|
147
|
+
return {
|
|
148
|
+
content: [{
|
|
149
|
+
type: "text",
|
|
150
|
+
text: JSON.stringify({ results: results.map(formatResolveResult) }, null, 2),
|
|
151
|
+
}],
|
|
152
|
+
};
|
|
153
|
+
}
|
|
115
154
|
default:
|
|
116
155
|
throw new Error(`未知のツール: ${name}`);
|
|
117
156
|
}
|
package/dist/mcp/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/tools.d.ts
CHANGED
|
@@ -56,5 +56,59 @@ export declare const TOOLS: readonly [{
|
|
|
56
56
|
};
|
|
57
57
|
};
|
|
58
58
|
};
|
|
59
|
+
}, {
|
|
60
|
+
readonly name: "resolve_book";
|
|
61
|
+
readonly description: string;
|
|
62
|
+
readonly inputSchema: {
|
|
63
|
+
readonly type: "object";
|
|
64
|
+
readonly properties: {
|
|
65
|
+
readonly isbn: {
|
|
66
|
+
readonly type: "string";
|
|
67
|
+
readonly description: "ISBN(ハイフン有無どちらでも可)";
|
|
68
|
+
};
|
|
69
|
+
readonly title: {
|
|
70
|
+
readonly type: "string";
|
|
71
|
+
readonly description: "書名(ISBN との照合・検索に使用)";
|
|
72
|
+
};
|
|
73
|
+
readonly author: {
|
|
74
|
+
readonly type: "string";
|
|
75
|
+
readonly description: "著者名";
|
|
76
|
+
};
|
|
77
|
+
readonly publisher: {
|
|
78
|
+
readonly type: "string";
|
|
79
|
+
readonly description: "出版社ID(検索経路の絞り込みヒント。任意)";
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
}, {
|
|
84
|
+
readonly name: "resolve_books";
|
|
85
|
+
readonly description: string;
|
|
86
|
+
readonly inputSchema: {
|
|
87
|
+
readonly type: "object";
|
|
88
|
+
readonly required: readonly ["books"];
|
|
89
|
+
readonly properties: {
|
|
90
|
+
readonly books: {
|
|
91
|
+
readonly type: "array";
|
|
92
|
+
readonly description: "同定したい手がかりの配列。各要素に isbn / title / author / publisher のいずれかを指定";
|
|
93
|
+
readonly items: {
|
|
94
|
+
readonly type: "object";
|
|
95
|
+
readonly properties: {
|
|
96
|
+
readonly isbn: {
|
|
97
|
+
readonly type: "string";
|
|
98
|
+
};
|
|
99
|
+
readonly title: {
|
|
100
|
+
readonly type: "string";
|
|
101
|
+
};
|
|
102
|
+
readonly author: {
|
|
103
|
+
readonly type: "string";
|
|
104
|
+
};
|
|
105
|
+
readonly publisher: {
|
|
106
|
+
readonly type: "string";
|
|
107
|
+
};
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
};
|
|
112
|
+
};
|
|
59
113
|
}];
|
|
60
114
|
//# sourceMappingURL=tools.d.ts.map
|
package/dist/mcp/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8HR,CAAC"}
|
package/dist/mcp/tools.js
CHANGED
|
@@ -73,5 +73,51 @@ export const TOOLS = [
|
|
|
73
73
|
},
|
|
74
74
|
},
|
|
75
75
|
},
|
|
76
|
+
{
|
|
77
|
+
name: "resolve_book",
|
|
78
|
+
description: "手元の手がかり(ISBN・書名・著者)から正規の1冊を確信度つきで同定します。" +
|
|
79
|
+
"PDF の奥付から抽出した曖昧なメタデータを書誌レコードに解決する用途に最適です。" +
|
|
80
|
+
"isbn があれば openBD→出版社サイト→カーリルの順で解決し、title も渡すと解決結果と照合して" +
|
|
81
|
+
"版違い・誤ISBN を検出します(validation.isbnTitleAgree)。isbn が無い/解決できない場合は" +
|
|
82
|
+
"横断検索の一致度でベストマッチを採ります。" +
|
|
83
|
+
"返り値: status(matched/ambiguous/not_found)・confidence(high/medium/low)・book・" +
|
|
84
|
+
"matchScore・source・候補(ambiguous時)。confidence=high はそのまま採用、low/ambiguous は要確認の目安です。" +
|
|
85
|
+
"isbn / title / author のいずれかは必須。",
|
|
86
|
+
inputSchema: {
|
|
87
|
+
type: "object",
|
|
88
|
+
properties: {
|
|
89
|
+
isbn: { type: "string", description: "ISBN(ハイフン有無どちらでも可)" },
|
|
90
|
+
title: { type: "string", description: "書名(ISBN との照合・検索に使用)" },
|
|
91
|
+
author: { type: "string", description: "著者名" },
|
|
92
|
+
publisher: { type: "string", description: "出版社ID(検索経路の絞り込みヒント。任意)" },
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
name: "resolve_books",
|
|
98
|
+
description: "複数の手がかりを一括で同定します(resolve_book のバッチ版)。" +
|
|
99
|
+
"ローカル蔵書への一括メタデータ付与に最適で、入力順に揃った結果配列を返します。" +
|
|
100
|
+
"各要素は resolve_book と同じ形(status/confidence/book/matchScore/source)です。" +
|
|
101
|
+
"ISBN 主体の入力は openBD 中心で軽量ですが、書名のみの項目は横断検索を伴うため項目数に注意してください。",
|
|
102
|
+
inputSchema: {
|
|
103
|
+
type: "object",
|
|
104
|
+
required: ["books"],
|
|
105
|
+
properties: {
|
|
106
|
+
books: {
|
|
107
|
+
type: "array",
|
|
108
|
+
description: "同定したい手がかりの配列。各要素に isbn / title / author / publisher のいずれかを指定",
|
|
109
|
+
items: {
|
|
110
|
+
type: "object",
|
|
111
|
+
properties: {
|
|
112
|
+
isbn: { type: "string" },
|
|
113
|
+
title: { type: "string" },
|
|
114
|
+
author: { type: "string" },
|
|
115
|
+
publisher: { type: "string" },
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
},
|
|
76
122
|
];
|
|
77
123
|
//# sourceMappingURL=tools.js.map
|
package/dist/mcp/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,kCAAkC;YAClC,mBAAmB;YACnB,6DAA6D;YAC7D,sCAAsC;YACtC,8CAA8C;YAC9C,gCAAgC;YAChC,wBAAwB;YACxB,kCAAkC;YAClC,qCAAqC;YACrC,mDAAmD;QACrD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,UAAU;iBACxB;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,WAAW;iBACzB;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,uCAAuC;wBACvC,mCAAmC;iBACtC;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kCAAkC;oBAC/C,OAAO,EAAE,EAAE;iBACZ;aACF;SACF;KACF;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,6BAA6B;QAC1C,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,CAAC,KAAK,CAAC;YACjB,UAAU,EAAE;gBACV,GAAG,EAAE;oBACH,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,yBAAyB;iBACvC;aACF;SACF;KACF;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,uBAAuB;QACpC,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;SACf;KACF;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EACT,mBAAmB;YACnB,0CAA0C;YAC1C,mCAAmC;QACrC,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,CAAC,MAAM,CAAC;YAClB,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,4CAA4C;iBAC1D;aACF;SACF;KACF;CACO,CAAC"}
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
package/dist/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zonuexe/techbook-mcp",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.3",
|
|
4
4
|
"description": "MCP server for searching Japanese technical book bibliographic information",
|
|
5
5
|
"license": "AGPL-3.0-or-later",
|
|
6
6
|
"type": "module",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"typescript": "^6.0.3"
|
|
24
24
|
},
|
|
25
25
|
"scripts": {
|
|
26
|
-
"build": "tsc",
|
|
26
|
+
"build": "rm -rf dist && tsc",
|
|
27
27
|
"lint": "oxlint --config .oxlintrc.json src/",
|
|
28
28
|
"test": "node --import tsx/esm --test 'tests/**/*.test.ts'",
|
|
29
29
|
"test:watch": "node --import tsx/esm --test --watch 'tests/**/*.test.ts'"
|