better-web-search-mcp 0.5.1 → 0.5.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/README.md +15 -13
- package/dist/ranking/passages.d.ts +26 -0
- package/dist/ranking/passages.d.ts.map +1 -1
- package/dist/ranking/passages.js +137 -5
- package/dist/ranking/passages.js.map +1 -1
- package/mcp.json +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -135,20 +135,22 @@ as compression losses:
|
|
|
135
135
|
|---|---|---|
|
|
136
136
|
| Numbers (ports, limits) | 8 / 8 | 100% |
|
|
137
137
|
| HTTP status codes | 6 / 6 | 100% |
|
|
138
|
+
| Acronym expansions | 12 / 12 | 100% |
|
|
138
139
|
| Facts (licenses, defaults) | 7 / 8 | 87.5% |
|
|
139
|
-
| **
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
140
|
+
| **Overall** | **33 / 34** | **97.1%** |
|
|
141
|
+
|
|
142
|
+
Acronym questions used to retain only 58.3%: the sentence spelling out
|
|
143
|
+
"transport layer security" states it once while surrounding pages repeat the
|
|
144
|
+
acronym, so BM25 ranked the answer below the noise. Passage selection now
|
|
145
|
+
recognises acronym-definition questions and surfaces the expansion. Verified by
|
|
146
|
+
replaying one frozen page corpus so the only variable is the code — acronyms
|
|
147
|
+
went 6/12 to 12/12, overall 27/34 to 33/34 — and confirmed by a live run at the
|
|
148
|
+
same figures.
|
|
149
|
+
|
|
150
|
+
The remaining loss is not an acronym question: *"Which HTTP request header is
|
|
151
|
+
used to make a conditional request with an ETag?"*, where the answer
|
|
152
|
+
(`If-None-Match`) appears in reference tables that the passage splitter does
|
|
153
|
+
not keep intact.
|
|
152
154
|
|
|
153
155
|
Method and raw per-question results: [`benchmarks/`](benchmarks/).
|
|
154
156
|
|
|
@@ -38,6 +38,32 @@ export declare const TARGET_PASSAGE_CHARS = 500;
|
|
|
38
38
|
* is windowed on sentence boundaries.
|
|
39
39
|
*/
|
|
40
40
|
export declare const MAX_PASSAGE_CHARS = 1200;
|
|
41
|
+
/**
|
|
42
|
+
* Whether the query asks for an acronym's expansion.
|
|
43
|
+
*
|
|
44
|
+
* "What does DNS stand for?" does; "How does DNS caching work?" does not, and
|
|
45
|
+
* promoting a definition passage there would bury the answer actually wanted.
|
|
46
|
+
*/
|
|
47
|
+
export declare function isDefinitionQuery(query: string): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Uppercase acronyms appearing in a query, e.g. "TLS" from "What does TLS
|
|
50
|
+
* stand for?".
|
|
51
|
+
*/
|
|
52
|
+
export declare function findAcronyms(query: string): string[];
|
|
53
|
+
/**
|
|
54
|
+
* Whether `text` contains a phrase whose initials spell `acronym`.
|
|
55
|
+
*
|
|
56
|
+
* "Transport Layer Security" expands TLS; "Atomicity, Consistency, Isolation,
|
|
57
|
+
* Durability" expands ACID. Separators allow the punctuation these lists are
|
|
58
|
+
* usually written with, and a short connector word may sit between initials
|
|
59
|
+
* so "Cross-Origin Resource Sharing" and similar still match.
|
|
60
|
+
*
|
|
61
|
+
* This exists because the expansion is exactly the text a lexical scorer
|
|
62
|
+
* cannot find: the sentence that answers "what does TLS stand for" frequently
|
|
63
|
+
* never repeats the letters TLS, so it shares no term with the query and is
|
|
64
|
+
* dropped before ranking.
|
|
65
|
+
*/
|
|
66
|
+
export declare function expandsAcronym(text: string, acronym: string): boolean;
|
|
41
67
|
/** Lowercase alphanumeric tokens, stop words removed. */
|
|
42
68
|
export declare function tokenize(text: string): string[];
|
|
43
69
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"passages.d.ts","sourceRoot":"","sources":["../../src/ranking/passages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,+CAA+C;AAC/C,MAAM,WAAW,OAAO;IACtB,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,GAAG,EAAE,MAAM,CAAC;IACZ,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;CACf;AAMD,2EAA2E;AAC3E,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,OAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"passages.d.ts","sourceRoot":"","sources":["../../src/ranking/passages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,+CAA+C;AAC/C,MAAM,WAAW,OAAO;IACtB,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,GAAG,EAAE,MAAM,CAAC;IACZ,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;CACf;AAMD,2EAA2E;AAC3E,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,OAAQ,CAAC;AAuCvC;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAMpD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CA+BrE;AAED,yDAAyD;AACzD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAG/C;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,CAsFxD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,KAAK,EAAE,MAAM,GACZ,OAAO,EAAE,CAmHX;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,KAAK,SAAI,GACR,OAAO,EAAE,CAEX"}
|
package/dist/ranking/passages.js
CHANGED
|
@@ -37,6 +37,88 @@ const STOP_WORDS = new Set([
|
|
|
37
37
|
"that", "the", "this", "to", "was", "were", "what", "when", "where", "which",
|
|
38
38
|
"who", "why", "will", "with", "you", "your",
|
|
39
39
|
]);
|
|
40
|
+
/**
|
|
41
|
+
* Shortest acronym worth expanding.
|
|
42
|
+
*
|
|
43
|
+
* Two-letter sequences match far too much ordinary prose to be a useful
|
|
44
|
+
* signal, so only three letters and up are considered.
|
|
45
|
+
*/
|
|
46
|
+
const MIN_ACRONYM_LENGTH = 3;
|
|
47
|
+
/** Longest acronym worth expanding; beyond this the regex is noise. */
|
|
48
|
+
const MAX_ACRONYM_LENGTH = 8;
|
|
49
|
+
/**
|
|
50
|
+
* Weight of an acronym-expansion match, as a multiple of the mean query IDF.
|
|
51
|
+
*
|
|
52
|
+
* Expressed relative to the query's own IDF so it stays comparable to BM25
|
|
53
|
+
* scores instead of being a magic constant tuned to one corpus.
|
|
54
|
+
*/
|
|
55
|
+
const ACRONYM_EXPANSION_WEIGHT = 1.5;
|
|
56
|
+
/** Words allowed between expansion initials without breaking the match. */
|
|
57
|
+
const CONNECTORS = "(?:of|and|the|for|in|to|a)";
|
|
58
|
+
/**
|
|
59
|
+
* Phrasing that marks a question as asking what an acronym means, rather than
|
|
60
|
+
* merely mentioning one.
|
|
61
|
+
*/
|
|
62
|
+
const DEFINITION_QUERY = /\b(?:stands?\s+for|short\s+for|abbreviation|acronym)\b/i;
|
|
63
|
+
/**
|
|
64
|
+
* Whether the query asks for an acronym's expansion.
|
|
65
|
+
*
|
|
66
|
+
* "What does DNS stand for?" does; "How does DNS caching work?" does not, and
|
|
67
|
+
* promoting a definition passage there would bury the answer actually wanted.
|
|
68
|
+
*/
|
|
69
|
+
export function isDefinitionQuery(query) {
|
|
70
|
+
return DEFINITION_QUERY.test(query);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Uppercase acronyms appearing in a query, e.g. "TLS" from "What does TLS
|
|
74
|
+
* stand for?".
|
|
75
|
+
*/
|
|
76
|
+
export function findAcronyms(query) {
|
|
77
|
+
const found = query.match(new RegExp(`\\b[A-Z]{${MIN_ACRONYM_LENGTH},${MAX_ACRONYM_LENGTH}}\\b`, "g")) ?? [];
|
|
78
|
+
return [...new Set(found)];
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Whether `text` contains a phrase whose initials spell `acronym`.
|
|
82
|
+
*
|
|
83
|
+
* "Transport Layer Security" expands TLS; "Atomicity, Consistency, Isolation,
|
|
84
|
+
* Durability" expands ACID. Separators allow the punctuation these lists are
|
|
85
|
+
* usually written with, and a short connector word may sit between initials
|
|
86
|
+
* so "Cross-Origin Resource Sharing" and similar still match.
|
|
87
|
+
*
|
|
88
|
+
* This exists because the expansion is exactly the text a lexical scorer
|
|
89
|
+
* cannot find: the sentence that answers "what does TLS stand for" frequently
|
|
90
|
+
* never repeats the letters TLS, so it shares no term with the query and is
|
|
91
|
+
* dropped before ranking.
|
|
92
|
+
*/
|
|
93
|
+
export function expandsAcronym(text, acronym) {
|
|
94
|
+
const letters = [...acronym.toUpperCase()];
|
|
95
|
+
if (letters.length < MIN_ACRONYM_LENGTH) {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
// Each initial must be followed by at least one lowercase letter, so that it
|
|
99
|
+
// begins a real word. Without that the `i` flag lets `[a-z]*` consume
|
|
100
|
+
// uppercase and the acronym's own letters satisfy the pattern: "DNS" matched
|
|
101
|
+
// D-N-S, and so did a heading like "DNS definition: What does DNS stand for
|
|
102
|
+
// in networking". Every passage on an acronym page then looked like an
|
|
103
|
+
// expansion, so promoting expansions reordered nothing.
|
|
104
|
+
//
|
|
105
|
+
// The separator between initials stays optional, which is what lets a single
|
|
106
|
+
// compound word supply two of them, as "HyperText" does for HTML.
|
|
107
|
+
const gap = `(?:[\\s,;:/()-]+(?:${CONNECTORS}[\\s,;:/()-]+)?)?`;
|
|
108
|
+
const pattern = letters.map((letter) => `${letter}[a-z]+`).join(gap);
|
|
109
|
+
const regex = new RegExp(`\\b${pattern}\\b`, "gi");
|
|
110
|
+
// Belt and braces against a degenerate match no longer than the acronym it
|
|
111
|
+
// claims to expand.
|
|
112
|
+
const minLength = acronym.length * 2;
|
|
113
|
+
for (const match of text.matchAll(regex)) {
|
|
114
|
+
const found = match[0];
|
|
115
|
+
if (found.length >= minLength &&
|
|
116
|
+
found.toUpperCase() !== acronym.toUpperCase()) {
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
40
122
|
/** Lowercase alphanumeric tokens, stop words removed. */
|
|
41
123
|
export function tokenize(text) {
|
|
42
124
|
const tokens = text.toLowerCase().match(/[a-z0-9_]+/g) ?? [];
|
|
@@ -141,7 +223,10 @@ export function splitPassages(content) {
|
|
|
141
223
|
*/
|
|
142
224
|
export function rankPassages(passages, query) {
|
|
143
225
|
const queryTerms = tokenize(query);
|
|
144
|
-
|
|
226
|
+
const acronyms = findAcronyms(query).filter((acronym) =>
|
|
227
|
+
// An acronym the query also spells out needs no special handling.
|
|
228
|
+
queryTerms.includes(acronym.toLowerCase()));
|
|
229
|
+
if ((queryTerms.length === 0 && acronyms.length === 0) || passages.length === 0) {
|
|
145
230
|
return [];
|
|
146
231
|
}
|
|
147
232
|
const docs = passages.map((passage) => tokenize(passage.text));
|
|
@@ -157,6 +242,26 @@ export function rankPassages(passages, query) {
|
|
|
157
242
|
}
|
|
158
243
|
docFreq.set(term, count);
|
|
159
244
|
}
|
|
245
|
+
// Sized from the query's own IDF so the bonus stays comparable to the BM25
|
|
246
|
+
// scores it is added to, rather than being a constant tuned to one corpus.
|
|
247
|
+
const idfOf = (term) => {
|
|
248
|
+
const n = docFreq.get(term) ?? 0;
|
|
249
|
+
return Math.log(1 + (docs.length - n + 0.5) / (n + 0.5));
|
|
250
|
+
};
|
|
251
|
+
const uniqueTerms = [...new Set(queryTerms)];
|
|
252
|
+
// An acronym counts as "in play" when it appears anywhere on this page, not
|
|
253
|
+
// necessarily in the passage holding the expansion. Requiring both in one
|
|
254
|
+
// passage looked safe but was wrong: the sentence defining DNS or CSS
|
|
255
|
+
// routinely writes "Domain Name System" without repeating the letters, so
|
|
256
|
+
// the guard blocked the bonus exactly where it was needed. Page scope still
|
|
257
|
+
// rejects unrelated prose that merely fits the initials, because such a page
|
|
258
|
+
// never names the acronym at all.
|
|
259
|
+
const acronymsInPlay = acronyms.filter((acronym) => docs.some((doc) => doc.includes(acronym.toLowerCase())));
|
|
260
|
+
const meanIdf = uniqueTerms.length === 0
|
|
261
|
+
? 1
|
|
262
|
+
: uniqueTerms.reduce((total, term) => total + idfOf(term), 0) /
|
|
263
|
+
uniqueTerms.length;
|
|
264
|
+
const expansionBonus = ACRONYM_EXPANSION_WEIGHT * meanIdf;
|
|
160
265
|
const scored = [];
|
|
161
266
|
passages.forEach((passage, index) => {
|
|
162
267
|
const doc = docs[index] ?? [];
|
|
@@ -168,23 +273,50 @@ export function rankPassages(passages, query) {
|
|
|
168
273
|
counts.set(token, (counts.get(token) ?? 0) + 1);
|
|
169
274
|
}
|
|
170
275
|
let score = 0;
|
|
171
|
-
for (const term of
|
|
276
|
+
for (const term of uniqueTerms) {
|
|
172
277
|
const freq = counts.get(term);
|
|
173
278
|
if (freq === undefined) {
|
|
174
279
|
continue;
|
|
175
280
|
}
|
|
176
|
-
const n = docFreq.get(term) ?? 0;
|
|
177
281
|
// BM25 IDF, the +1 keeping it positive for terms in every passage.
|
|
178
|
-
const idf =
|
|
282
|
+
const idf = idfOf(term);
|
|
179
283
|
const norm = freq * (K1 + 1);
|
|
180
284
|
const denom = freq + K1 * (1 - B + (B * doc.length) / (avgLength || 1));
|
|
181
285
|
score += idf * (norm / denom);
|
|
182
286
|
}
|
|
287
|
+
// A passage that spells an acronym out is usually the one answering "what
|
|
288
|
+
// does X stand for", but it says the expansion once while pages that merely
|
|
289
|
+
// use the acronym repeat it, so BM25 ranks the answer below the noise.
|
|
290
|
+
//
|
|
291
|
+
// The expansion must sit alongside the acronym itself. The loose gap that
|
|
292
|
+
// lets "HyperText Markup Language" expand HTML also matches ordinary prose
|
|
293
|
+
// — "The lazy squirrel" expands TLS — and requiring the acronym in the same
|
|
294
|
+
// passage removes those without weakening the real case, since the answer
|
|
295
|
+
// sentence almost always names the acronym it is defining.
|
|
296
|
+
if (acronymsInPlay.some((acronym) => expandsAcronym(passage.text, acronym))) {
|
|
297
|
+
score += expansionBonus;
|
|
298
|
+
}
|
|
183
299
|
if (score > 0) {
|
|
184
300
|
scored.push({ ...passage, score });
|
|
185
301
|
}
|
|
186
302
|
});
|
|
187
|
-
|
|
303
|
+
scored.sort((a, b) => b.score - a.score);
|
|
304
|
+
// When the question explicitly asks what an acronym stands for, the passage
|
|
305
|
+
// stating the expansion is the answer, and a score bonus is not enough to
|
|
306
|
+
// surface it. Pages about an acronym are full of headings and nav entries
|
|
307
|
+
// repeating every query term - "What does DNS stand for in networking"
|
|
308
|
+
// outscores the sentence that answers it - and callers keep only the top
|
|
309
|
+
// couple of passages per page, so the answer never became a candidate.
|
|
310
|
+
// Ordering it first is a rule about this question shape, not a constant
|
|
311
|
+
// tuned until one corpus passed.
|
|
312
|
+
if (acronymsInPlay.length > 0 && isDefinitionQuery(query)) {
|
|
313
|
+
const expands = (passage) => acronymsInPlay.some((acronym) => expandsAcronym(passage.text, acronym));
|
|
314
|
+
return [
|
|
315
|
+
...scored.filter((passage) => expands(passage)),
|
|
316
|
+
...scored.filter((passage) => !expands(passage)),
|
|
317
|
+
];
|
|
318
|
+
}
|
|
319
|
+
return scored;
|
|
188
320
|
}
|
|
189
321
|
/**
|
|
190
322
|
* Select the passages of `content` most relevant to `query`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"passages.js","sourceRoot":"","sources":["../../src/ranking/passages.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"passages.js","sourceRoot":"","sources":["../../src/ranking/passages.ts"],"names":[],"mappings":"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"}
|
package/mcp.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "better-web-search-mcp",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.3",
|
|
4
4
|
"description": "MCP server for genuinely better web research — keyless-first (DuckDuckGo), 3-tier extraction, deep research. Brave/Tavily optional.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -55,6 +55,7 @@
|
|
|
55
55
|
"check:publish": "npm pack --dry-run",
|
|
56
56
|
"bench": "node benchmarks/run.mjs",
|
|
57
57
|
"bench:quality": "node benchmarks/quality.mjs",
|
|
58
|
+
"bench:corpus": "node benchmarks/corpus.mjs",
|
|
58
59
|
"docs:api": "typedoc --options typedoc.json && node scripts/typedoc-postprocess.mjs",
|
|
59
60
|
"docs:changelog": "node scripts/sync-docs-changelog.mjs",
|
|
60
61
|
"docs:build": "npm run docs:api && npm run docs:changelog && hugo --source site --gc --minify",
|