@cyanheads/hn-mcp-server 0.5.17 → 0.5.19
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/AGENTS.md +5 -3
- package/CLAUDE.md +5 -3
- package/README.md +21 -12
- package/changelog/0.5.x/0.5.18.md +24 -0
- package/changelog/0.5.x/0.5.19.md +19 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-stories.tool.d.ts +2 -1
- package/dist/mcp-server/tools/definitions/get-stories.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-stories.tool.js +48 -14
- package/dist/mcp-server/tools/definitions/get-stories.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-thread.tool.d.ts +30 -2
- package/dist/mcp-server/tools/definitions/get-thread.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-thread.tool.js +513 -161
- package/dist/mcp-server/tools/definitions/get-thread.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-user.tool.d.ts +4 -1
- package/dist/mcp-server/tools/definitions/get-user.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-user.tool.js +55 -22
- package/dist/mcp-server/tools/definitions/get-user.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-content.tool.d.ts +24 -3
- package/dist/mcp-server/tools/definitions/search-content.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-content.tool.js +172 -46
- package/dist/mcp-server/tools/definitions/search-content.tool.js.map +1 -1
- package/dist/services/hn/hn-service.d.ts +69 -10
- package/dist/services/hn/hn-service.d.ts.map +1 -1
- package/dist/services/hn/hn-service.js +101 -23
- package/dist/services/hn/hn-service.js.map +1 -1
- package/package.json +2 -2
- package/server.json +3 -3
|
@@ -4,7 +4,83 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
6
6
|
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
-
import { extractDomain, getHnService, normalizeUrl, stripHtml, stripHtmlPreservingEm, } from '../../../services/hn/hn-service.js';
|
|
7
|
+
import { dateBoundToEpochMs, extractDomain, getHnService, normalizeUrl, stripHtml, stripHtmlPreservingEm, } from '../../../services/hn/hn-service.js';
|
|
8
|
+
/** Largest page `count` accepts, mirrored in the input schema. */
|
|
9
|
+
const MAX_COUNT = 50;
|
|
10
|
+
/**
|
|
11
|
+
* ISO 8601 calendar forms accepted for a date bound: `YYYY`, `YYYY-MM`,
|
|
12
|
+
* `YYYY-MM-DD`, or `YYYY-MM-DDThh:mm[:ss[.sss]]` with an optional `Z` or
|
|
13
|
+
* `±hh:mm` offset. Advertised as the bound's `pattern`; the captures feed the
|
|
14
|
+
* calendar-range check the pattern cannot express.
|
|
15
|
+
*/
|
|
16
|
+
const DATE_BOUND_PATTERN = /^(\d{4})(?:-(\d{2})(?:-(\d{2})(?:T(\d{2}):(\d{2})(?::(\d{2})(?:\.\d{1,3})?)?(?:Z|[+-](\d{2}):(\d{2}))?)?)?)?$/;
|
|
17
|
+
const DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
|
18
|
+
/**
|
|
19
|
+
* True when a pattern-matching bound names a real calendar instant — rejecting
|
|
20
|
+
* `2024-02-30` or `T24:00`, which `Date.parse` would silently roll over. A value
|
|
21
|
+
* the pattern rejects passes here, so it is reported once, as a format error.
|
|
22
|
+
*/
|
|
23
|
+
function isCalendarValid(value) {
|
|
24
|
+
const m = DATE_BOUND_PATTERN.exec(value);
|
|
25
|
+
if (!m)
|
|
26
|
+
return true;
|
|
27
|
+
/** Omitted month and day read as 1; omitted time and offset fields as 0. */
|
|
28
|
+
const field = (i, omitted) => Number(m[i] ?? omitted);
|
|
29
|
+
const [year, month, day] = [field(1, 0), field(2, 1), field(3, 1)];
|
|
30
|
+
const [hour, minute, second] = [field(4, 0), field(5, 0), field(6, 0)];
|
|
31
|
+
const [offsetHour, offsetMinute] = [field(7, 0), field(8, 0)];
|
|
32
|
+
const leap = year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
|
|
33
|
+
const days = month === 2 && leap ? 29 : DAYS_IN_MONTH[month - 1];
|
|
34
|
+
return (days !== undefined &&
|
|
35
|
+
day >= 1 &&
|
|
36
|
+
day <= days &&
|
|
37
|
+
hour <= 23 &&
|
|
38
|
+
minute <= 59 &&
|
|
39
|
+
second <= 59 &&
|
|
40
|
+
offsetHour <= 23 &&
|
|
41
|
+
offsetMinute <= 59);
|
|
42
|
+
}
|
|
43
|
+
const dateBound = () => z
|
|
44
|
+
.string()
|
|
45
|
+
.regex(DATE_BOUND_PATTERN, 'must be an ISO 8601 date or date-time — YYYY, YYYY-MM, YYYY-MM-DD, or YYYY-MM-DDThh:mm[:ss[.sss]] with an optional Z or ±hh:mm offset.')
|
|
46
|
+
.refine(isCalendarValid, 'is not a real calendar date or time — check the month, day, hour, minute, second, and offset ranges.')
|
|
47
|
+
.optional();
|
|
48
|
+
/** The filters a caller set, in the order notices name them. `sort`, `count`, `page`, and `view` are not filters. */
|
|
49
|
+
function appliedFilters(input) {
|
|
50
|
+
const filters = [];
|
|
51
|
+
if (input.tags)
|
|
52
|
+
filters.push('tags');
|
|
53
|
+
if (input.author)
|
|
54
|
+
filters.push('author');
|
|
55
|
+
if (input.storyId != null)
|
|
56
|
+
filters.push('storyId');
|
|
57
|
+
if (input.minPoints != null)
|
|
58
|
+
filters.push('minPoints');
|
|
59
|
+
if (input.dateRange?.start || input.dateRange?.end)
|
|
60
|
+
filters.push('dateRange');
|
|
61
|
+
return filters;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Notice for a page that came back empty. A page past the end names the last
|
|
65
|
+
* valid page when Algolia reports one; past its 1,000-hit ceiling Algolia
|
|
66
|
+
* answers `nbPages: 0`, so the last page is unknown and the notice resets to
|
|
67
|
+
* page 0. Only a first page with no hits is a zero-match search.
|
|
68
|
+
*/
|
|
69
|
+
function emptyPageNotice(input, filters, page, totalHits, totalPages) {
|
|
70
|
+
if (page > 0) {
|
|
71
|
+
return totalPages > 0
|
|
72
|
+
? `Page ${page} is past the last page of results (${totalHits} hits across ${totalPages} page${totalPages === 1 ? '' : 's'}). Pass page: ${totalPages - 1} for the last page, or page: 0 to start over.`
|
|
73
|
+
: `Page ${page} is past the last page Algolia serves for this search (at most 1,000 hits per search), where totalHits and totalPages read 0. Pass page: 0 to start over; if that also returns nothing, the search itself matches nothing.`;
|
|
74
|
+
}
|
|
75
|
+
const base = input.query == null
|
|
76
|
+
? `No items matched these filters: ${filters.join(', ')}. Relax or change them.`
|
|
77
|
+
: filters.length
|
|
78
|
+
? `Try broader keywords, or relax these filters: ${filters.join(', ')}.`
|
|
79
|
+
: 'Try broader keywords or different terms.';
|
|
80
|
+
return input.storyId == null
|
|
81
|
+
? base
|
|
82
|
+
: `${base} storyId must be a story or poll root id — take it from hits[].storyId or the hn_get_thread root; a comment id matches nothing.`;
|
|
83
|
+
}
|
|
8
84
|
/**
|
|
9
85
|
* Project Algolia's `_highlightResult` into a flat snippet object: the title
|
|
10
86
|
* snippet, the body snippet (preferring comment_text over story_text to match
|
|
@@ -37,9 +113,30 @@ function extractHighlights(hit, includeBody) {
|
|
|
37
113
|
};
|
|
38
114
|
}
|
|
39
115
|
export const searchHn = tool('hn_search_content', {
|
|
40
|
-
description: 'Search Hacker News stories and
|
|
116
|
+
description: 'Search Hacker News stories, comments, polls, and jobs via Algolia — by keyword, by filters alone, or both. Filterable by content type, author, parent story, date range, and minimum points.',
|
|
41
117
|
annotations: { readOnlyHint: true },
|
|
42
118
|
errors: [
|
|
119
|
+
{
|
|
120
|
+
reason: 'missing_query_or_filter',
|
|
121
|
+
code: JsonRpcErrorCode.InvalidParams,
|
|
122
|
+
when: 'Neither a query nor any filter was supplied, so there is nothing to search by.',
|
|
123
|
+
recovery: 'Pass a query, or at least one filter: tags, author, storyId, minPoints, or a dateRange bound. sort, count, page, and view do not count as filters.',
|
|
124
|
+
severity: 'notice',
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
reason: 'invalid_date_range',
|
|
128
|
+
code: JsonRpcErrorCode.InvalidParams,
|
|
129
|
+
when: 'dateRange was supplied with neither bound, or with start not before end.',
|
|
130
|
+
recovery: 'Give dateRange a start, an end, or both with start before end — both bounds are exclusive — or omit dateRange entirely.',
|
|
131
|
+
severity: 'notice',
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
reason: 'min_points_unscored_type',
|
|
135
|
+
code: JsonRpcErrorCode.InvalidParams,
|
|
136
|
+
when: 'minPoints was combined with tags "comment" or "job", record types Algolia stores without points.',
|
|
137
|
+
recovery: 'Drop minPoints to search comments or jobs, or search a scored type (story, poll, ask_hn, show_hn, front_page) to filter by points.',
|
|
138
|
+
severity: 'notice',
|
|
139
|
+
},
|
|
43
140
|
{
|
|
44
141
|
reason: 'upstream_rejected',
|
|
45
142
|
code: JsonRpcErrorCode.InvalidParams,
|
|
@@ -51,7 +148,7 @@ export const searchHn = tool('hn_search_content', {
|
|
|
51
148
|
reason: 'upstream_rate_limited',
|
|
52
149
|
code: JsonRpcErrorCode.RateLimited,
|
|
53
150
|
when: 'Algolia answered with HTTP 429.',
|
|
54
|
-
recovery: 'Wait several seconds
|
|
151
|
+
recovery: 'Wait the interval in retryAfter when the error carries one, otherwise several seconds, then retry and call this tool less often.',
|
|
55
152
|
retryable: true,
|
|
56
153
|
thrownBy: 'service',
|
|
57
154
|
},
|
|
@@ -84,44 +181,49 @@ export const searchHn = tool('hn_search_content', {
|
|
|
84
181
|
query: z
|
|
85
182
|
.string()
|
|
86
183
|
.trim()
|
|
87
|
-
.min(1)
|
|
88
|
-
.
|
|
184
|
+
.min(1, 'blank after trimming whitespace — pass one or more search terms, or omit query for a filter-only search.')
|
|
185
|
+
.optional()
|
|
186
|
+
.describe('Search terms. Supports simple keywords — Algolia handles stemming and relevance. Trimmed before searching; blank or whitespace-only input is rejected. Omit for a filter-only search, which needs at least one of tags, author, storyId, minPoints, or a dateRange bound.'),
|
|
89
187
|
tags: z
|
|
90
|
-
.enum(['story', 'comment', 'ask_hn', 'show_hn', 'front_page'])
|
|
188
|
+
.enum(['story', 'comment', 'poll', 'job', 'ask_hn', 'show_hn', 'front_page'])
|
|
91
189
|
.optional()
|
|
92
|
-
.describe(
|
|
190
|
+
.describe('Filter results by content type: "story", "comment", "poll", or "job", or the story subsets "ask_hn", "show_hn", and "front_page". Omit to search all types.'),
|
|
93
191
|
author: z
|
|
94
192
|
.string()
|
|
95
193
|
.trim()
|
|
96
|
-
.min(1)
|
|
194
|
+
.min(1, 'blank after trimming whitespace — omit author to search all authors.')
|
|
97
195
|
.optional()
|
|
98
196
|
.describe(`Filter results to a specific author. Useful for finding a user's posts on a topic (hn_get_user only shows recent submissions). Trimmed before filtering; omit the field to search all authors rather than passing a blank string.`),
|
|
197
|
+
storyId: z
|
|
198
|
+
.number()
|
|
199
|
+
.int()
|
|
200
|
+
.positive()
|
|
201
|
+
.optional()
|
|
202
|
+
.describe('Restrict results to one discussion: the id of a story or poll root, combined with the other filters. Pair with tags "comment" to search within a thread. Take it from hits[].storyId or the root item of hn_get_thread — a comment id matches nothing.'),
|
|
99
203
|
sort: z
|
|
100
204
|
.enum(['relevance', 'date'])
|
|
101
205
|
.default('relevance')
|
|
102
206
|
.describe('Sort order. "relevance" for best match, "date" for most recent first.'),
|
|
103
207
|
dateRange: z
|
|
104
208
|
.object({
|
|
105
|
-
start:
|
|
106
|
-
|
|
107
|
-
.refine((s) => !Number.isNaN(Date.parse(s)), 'Must be a parseable ISO 8601 date')
|
|
108
|
-
.optional()
|
|
109
|
-
.describe('Start date (ISO 8601). Results created after this date.'),
|
|
110
|
-
end: z
|
|
111
|
-
.string()
|
|
112
|
-
.refine((s) => !Number.isNaN(Date.parse(s)), 'Must be a parseable ISO 8601 date')
|
|
113
|
-
.optional()
|
|
114
|
-
.describe('End date (ISO 8601). Results created before this date.'),
|
|
209
|
+
start: dateBound().describe('Exclusive lower bound — only items created strictly after this instant match. ISO 8601: YYYY, YYYY-MM, YYYY-MM-DD, or YYYY-MM-DDThh:mm[:ss[.sss]] with an optional Z or ±hh:mm offset. Reduced and date-only forms mean UTC midnight at the start of that period; a date-time without an offset is read as UTC.'),
|
|
210
|
+
end: dateBound().describe('Exclusive upper bound — only items created strictly before this instant match. Same formats and UTC reading as start, and must be later than start. A date-only end excludes that whole UTC day: to include it, pass the next day or a full timestamp.'),
|
|
115
211
|
})
|
|
116
212
|
.optional()
|
|
117
|
-
.describe('Filter to a
|
|
213
|
+
.describe('Filter to a creation-time window with a start, an end, or both. An empty object is rejected — omit dateRange instead.'),
|
|
118
214
|
minPoints: z
|
|
119
215
|
.number()
|
|
120
216
|
.int()
|
|
121
217
|
.min(0)
|
|
122
218
|
.optional()
|
|
123
|
-
.describe('Minimum score
|
|
124
|
-
count: z
|
|
219
|
+
.describe('Minimum score. Applies to stories and polls, including the ask_hn, show_hn, and front_page subsets. Comments and jobs carry no points in the search index, so any minPoints excludes them — combining it with tags "comment" or "job" is rejected.'),
|
|
220
|
+
count: z
|
|
221
|
+
.number()
|
|
222
|
+
.int()
|
|
223
|
+
.min(1)
|
|
224
|
+
.max(MAX_COUNT)
|
|
225
|
+
.default(30)
|
|
226
|
+
.describe('Number of results to return.'),
|
|
125
227
|
page: z.number().int().min(0).default(0).describe('Page number for pagination (0-indexed).'),
|
|
126
228
|
view: z
|
|
127
229
|
.enum(['full', 'compact'])
|
|
@@ -133,7 +235,10 @@ export const searchHn = tool('hn_search_content', {
|
|
|
133
235
|
.array(z
|
|
134
236
|
.object({
|
|
135
237
|
id: z.number().describe('HN item ID — use with hn_get_thread to read the discussion.'),
|
|
136
|
-
title: z
|
|
238
|
+
title: z
|
|
239
|
+
.string()
|
|
240
|
+
.optional()
|
|
241
|
+
.describe('Item title (present for stories, polls, and jobs).'),
|
|
137
242
|
url: z.string().optional().describe('External link URL.'),
|
|
138
243
|
domain: z
|
|
139
244
|
.string()
|
|
@@ -172,9 +277,12 @@ export const searchHn = tool('hn_search_content', {
|
|
|
172
277
|
.optional()
|
|
173
278
|
.describe('Algolia per-field highlight metadata showing which terms matched and where. Absent when no fields produced a match.'),
|
|
174
279
|
})
|
|
175
|
-
.describe('A single Algolia search hit (story or
|
|
280
|
+
.describe('A single Algolia search hit (story, comment, poll, or job).'))
|
|
176
281
|
.describe('Search results ranked by sort order.'),
|
|
177
|
-
query: z
|
|
282
|
+
query: z
|
|
283
|
+
.string()
|
|
284
|
+
.optional()
|
|
285
|
+
.describe('The query that was searched. Absent for a filter-only search.'),
|
|
178
286
|
}),
|
|
179
287
|
enrichment: {
|
|
180
288
|
totalHits: z.number().describe('Total matching results across all pages.'),
|
|
@@ -185,15 +293,32 @@ export const searchHn = tool('hn_search_content', {
|
|
|
185
293
|
truncated: z
|
|
186
294
|
.boolean()
|
|
187
295
|
.optional()
|
|
188
|
-
.describe('True when
|
|
296
|
+
.describe('True when more pages remain after this one (page + 1 < totalPages). Absent on the last page Algolia serves.'),
|
|
189
297
|
shown: z.number().optional().describe('Number of hits returned.'),
|
|
190
298
|
cap: z.number().optional().describe('The count cap that was applied.'),
|
|
191
299
|
notice: z
|
|
192
300
|
.string()
|
|
193
301
|
.optional()
|
|
194
|
-
.describe('
|
|
302
|
+
.describe('Agent guidance: the next page to request while more pages remain, the last valid page when the requested page is past the end, or the filters to relax when a first page comes back empty. Absent on the last page of a non-empty result.'),
|
|
195
303
|
},
|
|
196
304
|
async handler(input, ctx) {
|
|
305
|
+
const { dateRange } = input;
|
|
306
|
+
if (dateRange) {
|
|
307
|
+
const { start, end } = dateRange;
|
|
308
|
+
if (!start && !end) {
|
|
309
|
+
throw ctx.fail('invalid_date_range', 'dateRange has neither a start nor an end bound.', ctx.recoveryFor('invalid_date_range'));
|
|
310
|
+
}
|
|
311
|
+
if (start && end && dateBoundToEpochMs(start) >= dateBoundToEpochMs(end)) {
|
|
312
|
+
throw ctx.fail('invalid_date_range', `dateRange.start (${start}) is not before dateRange.end (${end}); both bounds are exclusive, so the window holds nothing.`, ctx.recoveryFor('invalid_date_range'));
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
if (input.minPoints != null && (input.tags === 'comment' || input.tags === 'job')) {
|
|
316
|
+
throw ctx.fail('min_points_unscored_type', `minPoints cannot match tags "${input.tags}": ${input.tags} records carry no points, so any minPoints excludes every one.`, ctx.recoveryFor('min_points_unscored_type'));
|
|
317
|
+
}
|
|
318
|
+
const filters = appliedFilters(input);
|
|
319
|
+
if (input.query == null && filters.length === 0) {
|
|
320
|
+
throw ctx.fail('missing_query_or_filter', 'No query and no filter were supplied, so there is nothing to search by.', ctx.recoveryFor('missing_query_or_filter'));
|
|
321
|
+
}
|
|
197
322
|
const hn = getHnService();
|
|
198
323
|
const result = await hn.search(input, ctx);
|
|
199
324
|
const includeBody = input.view === 'full';
|
|
@@ -222,33 +347,32 @@ export const searchHn = tool('hn_search_content', {
|
|
|
222
347
|
hits: hits.length,
|
|
223
348
|
totalHits: result.nbHits,
|
|
224
349
|
});
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
ctx.enrich.truncated({ shown: hits.length, cap: input.count });
|
|
228
|
-
}
|
|
350
|
+
const { nbHits: totalHits, nbPages: totalPages, page } = result;
|
|
351
|
+
ctx.enrich({ totalHits, page, totalPages });
|
|
229
352
|
if (hits.length === 0) {
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
const notice = filters.length
|
|
240
|
-
? `Try broader keywords, or relax these filters: ${filters.join(', ')}.`
|
|
241
|
-
: `Try broader keywords or different terms.`;
|
|
242
|
-
ctx.enrich.notice(notice);
|
|
353
|
+
ctx.enrich.notice(emptyPageNotice(input, filters, page, totalHits, totalPages));
|
|
354
|
+
}
|
|
355
|
+
else if (page + 1 < totalPages) {
|
|
356
|
+
const raiseCount = input.count < MAX_COUNT ? `, or raise count (max ${MAX_COUNT})` : '';
|
|
357
|
+
ctx.enrich.truncated({
|
|
358
|
+
shown: hits.length,
|
|
359
|
+
cap: input.count,
|
|
360
|
+
guidance: `Showing ${hits.length} of ${totalHits} hits (page ${page} of ${totalPages}). Pass page: ${page + 1} for more${raiseCount}.`,
|
|
361
|
+
});
|
|
243
362
|
}
|
|
244
363
|
return {
|
|
245
364
|
hits,
|
|
246
|
-
query: input.query,
|
|
365
|
+
...(input.query != null && { query: input.query }),
|
|
247
366
|
};
|
|
248
367
|
},
|
|
249
368
|
format: (result) => {
|
|
250
369
|
if (result.hits.length === 0) {
|
|
251
|
-
return [
|
|
370
|
+
return [
|
|
371
|
+
{
|
|
372
|
+
type: 'text',
|
|
373
|
+
text: result.query != null ? `"${result.query}" — no results.` : 'No results.',
|
|
374
|
+
},
|
|
375
|
+
];
|
|
252
376
|
}
|
|
253
377
|
/** Render highlight metadata as a `> match: ...` footer. Surfaces each highlights field separately so structured consumers and the LLM both see what matched. */
|
|
254
378
|
const renderHighlights = (hl) => {
|
|
@@ -295,7 +419,9 @@ export const searchHn = tool('hn_search_content', {
|
|
|
295
419
|
const hlLine = h.highlights ? renderHighlights(h.highlights) : '';
|
|
296
420
|
return `### Comment on "${h.storyTitle ?? 'unknown'}" (story id:${h.storyId ?? '?'})\n${meta}${text}${hlLine}`;
|
|
297
421
|
});
|
|
298
|
-
const header =
|
|
422
|
+
const header = result.query != null
|
|
423
|
+
? `## "${result.query}" — search results`
|
|
424
|
+
: '## Search results (filters only)';
|
|
299
425
|
return [{ type: 'text', text: `${header}\n\n${lines.join('\n\n')}` }];
|
|
300
426
|
},
|
|
301
427
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-content.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-content.tool.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"search-content.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-content.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* @module services/hn/hn-service
|
|
4
4
|
*/
|
|
5
5
|
import type { Context } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { McpError } from '@cyanheads/mcp-ts-core/errors';
|
|
6
7
|
import type { AlgoliaResponse, HnFeedType, HnItem, HnUser } from './types.js';
|
|
7
8
|
/** Decode numeric and named HTML entities. */
|
|
8
9
|
export declare function decodeHtmlEntities(text: string): string;
|
|
@@ -21,8 +22,55 @@ export declare function normalizeUrl(url?: string | null): string | undefined;
|
|
|
21
22
|
* Returns undefined for missing or unparseable URLs.
|
|
22
23
|
*/
|
|
23
24
|
export declare function extractDomain(url: string | undefined): string | undefined;
|
|
24
|
-
/**
|
|
25
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Convert a validated ISO 8601 date bound to its exact instant in Unix
|
|
27
|
+
* milliseconds. A date-time without a `Z` or `±hh:mm` offset is read as UTC —
|
|
28
|
+
* the same as a date-only value, and unlike JS's own parsing, which reads it in
|
|
29
|
+
* the host's local time zone.
|
|
30
|
+
*/
|
|
31
|
+
export declare function dateBoundToEpochMs(bound: string): number;
|
|
32
|
+
/**
|
|
33
|
+
* Convert a validated ISO 8601 date bound to Unix seconds, read as
|
|
34
|
+
* {@link dateBoundToEpochMs} reads it.
|
|
35
|
+
*
|
|
36
|
+
* A fractional second rounds down by default, which suits an exclusive start.
|
|
37
|
+
* An exclusive end over whole-second timestamps passes `'ceil'`: an end at
|
|
38
|
+
* `10:00:00.5` must still admit an item created at `10:00:00`.
|
|
39
|
+
*/
|
|
40
|
+
export declare function dateBoundToEpochSeconds(bound: string, rounding?: 'floor' | 'ceil'): number;
|
|
41
|
+
/**
|
|
42
|
+
* One slot of a {@link HnService.fetchItems} batch, in input order.
|
|
43
|
+
*
|
|
44
|
+
* - `item` — HN returned the item. It may be dead or deleted; callers filter.
|
|
45
|
+
* - `absent` — HN answered `null`: no item exists under this ID.
|
|
46
|
+
* - `failed` — the fetch failed after retries, or never started because an
|
|
47
|
+
* earlier slot was rate-limited. `error` is the classified failure. A later
|
|
48
|
+
* call may succeed, so a caller reports the ID rather than dropping it.
|
|
49
|
+
*/
|
|
50
|
+
export type ItemSlot = {
|
|
51
|
+
kind: 'item';
|
|
52
|
+
id: number;
|
|
53
|
+
item: HnItem;
|
|
54
|
+
} | {
|
|
55
|
+
kind: 'absent';
|
|
56
|
+
id: number;
|
|
57
|
+
} | {
|
|
58
|
+
kind: 'failed';
|
|
59
|
+
id: number;
|
|
60
|
+
error: unknown;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Settle one page of a batch for the paged tools: the live items in input
|
|
64
|
+
* order, and the IDs whose fetch failed. Dead, deleted, and absent slots drop
|
|
65
|
+
* out of both. When every slot failed, throws the first failure's classified
|
|
66
|
+
* error, since an empty success would read as a page with nothing on it.
|
|
67
|
+
*/
|
|
68
|
+
export declare function settlePage(slots: readonly ItemSlot[]): {
|
|
69
|
+
items: HnItem[];
|
|
70
|
+
failedIds: number[];
|
|
71
|
+
};
|
|
72
|
+
/** True for the classified 429 `getJson` throws once retries are spent or the wait outlasts them. */
|
|
73
|
+
export declare function isRateLimited(err: unknown): err is McpError;
|
|
26
74
|
export declare class HnService {
|
|
27
75
|
private readonly concurrencyLimit;
|
|
28
76
|
constructor(concurrencyLimit: number);
|
|
@@ -44,18 +92,29 @@ export declare class HnService {
|
|
|
44
92
|
/** Fetch a feed's ID array. Throws on upstream failure after retries. */
|
|
45
93
|
fetchFeed(type: HnFeedType, ctx: Context): Promise<number[]>;
|
|
46
94
|
/**
|
|
47
|
-
* Batch-fetch items with concurrency limiting
|
|
48
|
-
*
|
|
49
|
-
* so
|
|
50
|
-
*
|
|
51
|
-
*
|
|
95
|
+
* Batch-fetch items with concurrency limiting: one {@link ItemSlot} per ID,
|
|
96
|
+
* in input order. A per-item failure after exhausted retries fills a
|
|
97
|
+
* `failed` slot, so one bad item does not fail the batch. Two failures are
|
|
98
|
+
* not per-item:
|
|
99
|
+
*
|
|
100
|
+
* - A caller abort rethrows, ending the batch instead of spending the rest of
|
|
101
|
+
* the ID list on fetches nobody is waiting for.
|
|
102
|
+
* - An `upstream_rate_limited` failure stops the batch. Fetches already in
|
|
103
|
+
* flight settle, and every slot not yet started is reported `failed` with
|
|
104
|
+
* that error, rather than each running its own retry ladder against a
|
|
105
|
+
* throttled upstream.
|
|
106
|
+
*/
|
|
107
|
+
fetchItems(ids: readonly number[], ctx: Context): Promise<ItemSlot[]>;
|
|
108
|
+
/**
|
|
109
|
+
* Search HN via Algolia. Throws on upstream failure after retries. An omitted
|
|
110
|
+
* `query` sends no `query` param, making a filter-only search; the tags are
|
|
111
|
+
* comma-joined, which Algolia ANDs. Both date bounds are exclusive.
|
|
52
112
|
*/
|
|
53
|
-
fetchItems(ids: number[], ctx: Context): Promise<(HnItem | null)[]>;
|
|
54
|
-
/** Search HN via Algolia. Throws on upstream failure after retries. */
|
|
55
113
|
search(params: {
|
|
56
|
-
query
|
|
114
|
+
query?: string | undefined;
|
|
57
115
|
tags?: string | undefined;
|
|
58
116
|
author?: string | undefined;
|
|
117
|
+
storyId?: number | undefined;
|
|
59
118
|
sort: 'relevance' | 'date';
|
|
60
119
|
dateRange?: {
|
|
61
120
|
start?: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hn-service.d.ts","sourceRoot":"","sources":["../../../src/services/hn/hn-service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"hn-service.d.ts","sourceRoot":"","sources":["../../../src/services/hn/hn-service.ts"],"names":[],"mappings":"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"}
|