@cyanheads/hn-mcp-server 0.5.22 → 0.6.1
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 +24 -11
- package/CLAUDE.md +24 -11
- package/Dockerfile +9 -3
- package/README.md +25 -15
- package/changelog/0.6.x/0.6.0.md +38 -0
- package/changelog/0.6.x/0.6.1.md +34 -0
- package/changelog/template.md +10 -3
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-stories.tool.d.ts +14 -0
- package/dist/mcp-server/tools/definitions/get-stories.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-stories.tool.js +25 -6
- package/dist/mcp-server/tools/definitions/get-stories.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-thread.tool.d.ts +8 -0
- package/dist/mcp-server/tools/definitions/get-thread.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-thread.tool.js +304 -182
- package/dist/mcp-server/tools/definitions/get-thread.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-user.tool.d.ts +15 -0
- package/dist/mcp-server/tools/definitions/get-user.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-user.tool.js +177 -104
- package/dist/mcp-server/tools/definitions/get-user.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-content.tool.d.ts +28 -4
- package/dist/mcp-server/tools/definitions/search-content.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-content.tool.js +291 -190
- package/dist/mcp-server/tools/definitions/search-content.tool.js.map +1 -1
- package/dist/mcp-server/tools/response-budget.d.ts +111 -0
- package/dist/mcp-server/tools/response-budget.d.ts.map +1 -0
- package/dist/mcp-server/tools/response-budget.js +204 -0
- package/dist/mcp-server/tools/response-budget.js.map +1 -0
- package/dist/services/hn/hn-service.d.ts +56 -12
- package/dist/services/hn/hn-service.d.ts.map +1 -1
- package/dist/services/hn/hn-service.js +147 -25
- package/dist/services/hn/hn-service.js.map +1 -1
- package/dist/services/hn/types.d.ts +4 -0
- package/dist/services/hn/types.d.ts.map +1 -1
- package/package.json +12 -11
- package/server.json +3 -3
- package/skills/hn-guide/SKILL.md +39 -0
|
@@ -2,12 +2,23 @@
|
|
|
2
2
|
* @fileoverview HN API service — Firebase and Algolia HTTP clients with HTML stripping utilities.
|
|
3
3
|
* @module services/hn/hn-service
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
5
|
+
import { config } from '@cyanheads/mcp-ts-core/config';
|
|
6
|
+
import { invalidParams, JsonRpcErrorCode, McpError, rateLimited, serviceUnavailable, timeout, } from '@cyanheads/mcp-ts-core/errors';
|
|
6
7
|
import { fetchWithTimeout, withRetry } from '@cyanheads/mcp-ts-core/utils';
|
|
7
8
|
import { getServerConfig } from '../../config/server-config.js';
|
|
8
9
|
const HN_API = 'https://hacker-news.firebaseio.com/v0';
|
|
9
10
|
const ALGOLIA_API = 'https://hn.algolia.com/api/v1';
|
|
10
|
-
|
|
11
|
+
/** One attempt's timeout, the body read included. */
|
|
12
|
+
export const REQUEST_TIMEOUT_MS = 10_000;
|
|
13
|
+
/**
|
|
14
|
+
* The time budget of one tool call that chains batch fetches, counted from the
|
|
15
|
+
* call's start and shared by every request in it, retries and backoff included.
|
|
16
|
+
* One hung fetch's whole retry ladder (four attempts and three backoffs, at most
|
|
17
|
+
* 48.75 s with jitter) fits, so a single slow item settles as it would unbounded;
|
|
18
|
+
* the margin under the MCP SDK client's 60-second default request timeout covers
|
|
19
|
+
* transport and serialization.
|
|
20
|
+
*/
|
|
21
|
+
export const CALL_BUDGET_MS = 50_000;
|
|
11
22
|
// ---------------------------------------------------------------------------
|
|
12
23
|
// HTML utilities
|
|
13
24
|
// ---------------------------------------------------------------------------
|
|
@@ -167,7 +178,7 @@ export function stripHtml(html) {
|
|
|
167
178
|
return toPlainText(html, false);
|
|
168
179
|
}
|
|
169
180
|
/**
|
|
170
|
-
* {@link stripHtml} for an Algolia highlight
|
|
181
|
+
* {@link stripHtml} for an Algolia highlight value, which is the field's HTML
|
|
171
182
|
* with `<em>` inserted around matched terms: the `<em>…</em>` markers survive,
|
|
172
183
|
* including inside a link collapsed to its href.
|
|
173
184
|
*/
|
|
@@ -228,30 +239,107 @@ export function dateRangeToEpochSeconds(range) {
|
|
|
228
239
|
/**
|
|
229
240
|
* Settle one page of a batch for the paged tools: the live items in input
|
|
230
241
|
* order, and the IDs whose fetch failed. Dead, deleted, and absent slots drop
|
|
231
|
-
* out of both. When every slot failed, throws the
|
|
232
|
-
*
|
|
242
|
+
* out of both. When every slot failed, throws the page's dominant cause
|
|
243
|
+
* ({@link pageFailure}), since an empty success would read as a page with
|
|
244
|
+
* nothing on it.
|
|
233
245
|
*/
|
|
234
246
|
export function settlePage(slots) {
|
|
235
247
|
const items = [];
|
|
236
|
-
const
|
|
237
|
-
let firstFailure;
|
|
248
|
+
const failed = [];
|
|
238
249
|
for (const slot of slots) {
|
|
239
250
|
if (slot.kind === 'failed') {
|
|
240
|
-
|
|
241
|
-
firstFailure ??= slot;
|
|
251
|
+
failed.push(slot);
|
|
242
252
|
}
|
|
243
253
|
else if (slot.kind === 'item' && !slot.item.deleted && !slot.item.dead) {
|
|
244
254
|
items.push(slot.item);
|
|
245
255
|
}
|
|
246
256
|
}
|
|
247
|
-
if (
|
|
248
|
-
throw
|
|
249
|
-
return { items, failedIds };
|
|
257
|
+
if (failed.length > 0 && failed.length === slots.length)
|
|
258
|
+
throw pageFailure(failed);
|
|
259
|
+
return { items, failedIds: failed.map((slot) => slot.id) };
|
|
260
|
+
}
|
|
261
|
+
/** The cause of a fetch the upstream never answered. */
|
|
262
|
+
const NO_ANSWER = Symbol('no answer');
|
|
263
|
+
/**
|
|
264
|
+
* What a failed slot says about the upstream: the contract reason it answered
|
|
265
|
+
* with (`upstream_unavailable`, `upstream_html`, …), or {@link NO_ANSWER} for a
|
|
266
|
+
* `Timeout` — an exhausted ladder, or a fetch the deadline cut or left
|
|
267
|
+
* unstarted — and for the reason-less `ServiceUnavailable` a connection failure
|
|
268
|
+
* leaves. Any other value is a cause of its own.
|
|
269
|
+
*/
|
|
270
|
+
function causeOf(error) {
|
|
271
|
+
if (!(error instanceof McpError))
|
|
272
|
+
return error;
|
|
273
|
+
if (error.code === JsonRpcErrorCode.Timeout)
|
|
274
|
+
return NO_ANSWER;
|
|
275
|
+
const reason = error.data?.reason;
|
|
276
|
+
if (typeof reason === 'string')
|
|
277
|
+
return reason;
|
|
278
|
+
return error.code === JsonRpcErrorCode.ServiceUnavailable ? NO_ANSWER : error;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* The error a page whose every slot failed throws: its dominant cause. A
|
|
282
|
+
* rate-limited slot comes first — the batch stopped on it, and its `retryAfter`
|
|
283
|
+
* is the caller's next move. Otherwise the most frequent cause wins, ties going
|
|
284
|
+
* to the earliest slot's: a declared upstream reason throws that slot's error
|
|
285
|
+
* unchanged, and no answer throws `upstream_no_response` (`Timeout`), carrying
|
|
286
|
+
* the items on the page and how many of them the call's time budget cut or left
|
|
287
|
+
* unstarted. Its recovery comes from each tool's contract, which names that
|
|
288
|
+
* tool's own page-size input.
|
|
289
|
+
*/
|
|
290
|
+
function pageFailure(failed) {
|
|
291
|
+
const rateLimit = failed.find((slot) => isRateLimited(slot.error));
|
|
292
|
+
if (rateLimit)
|
|
293
|
+
return rateLimit.error;
|
|
294
|
+
const causes = new Map();
|
|
295
|
+
for (const { error } of failed) {
|
|
296
|
+
const key = causeOf(error);
|
|
297
|
+
const cause = causes.get(key);
|
|
298
|
+
if (cause)
|
|
299
|
+
cause.count++;
|
|
300
|
+
else
|
|
301
|
+
causes.set(key, { count: 1, first: error });
|
|
302
|
+
}
|
|
303
|
+
/** A map iterates in first-seen order, so the strict comparison keeps the earliest of a tie. */
|
|
304
|
+
const [key, { count, first }] = [...causes].reduce((best, entry) => entry[1].count > best[1].count ? entry : best);
|
|
305
|
+
if (key !== NO_ANSWER)
|
|
306
|
+
return first;
|
|
307
|
+
const itemCount = failed.length;
|
|
308
|
+
const budgetCut = failed.filter((slot) => isDeadlineCut(slot.error)).length;
|
|
309
|
+
const budget = `${budgetCut} cut by this call's ${CALL_BUDGET_MS / 1000}-second time budget`;
|
|
310
|
+
/** No answer can win while other slots answered with an error; the message then counts only the unanswered ones. */
|
|
311
|
+
const message = count === itemCount
|
|
312
|
+
? `The HN API did not answer for any item on this page (${itemCount} item${itemCount === 1 ? '' : 's'}, ${budget}).`
|
|
313
|
+
: `The HN API did not answer for ${count} of the ${itemCount} items on this page and answered the rest with an error (${budget}).`;
|
|
314
|
+
return timeout(message, { reason: 'upstream_no_response', itemCount, budgetCut }, { cause: first });
|
|
250
315
|
}
|
|
251
316
|
/** True for the classified 429 `getJson` throws once retries are spent or the wait outlasts them. */
|
|
252
317
|
export function isRateLimited(err) {
|
|
253
318
|
return err instanceof McpError && err.data?.reason === 'upstream_rate_limited';
|
|
254
319
|
}
|
|
320
|
+
/**
|
|
321
|
+
* True for a failure a deadline caused: a retry ladder it cut short
|
|
322
|
+
* (`retry_deadline_exceeded`) or a {@link HnService.fetchItems} slot it left
|
|
323
|
+
* unstarted (`deadline_exceeded`). A hung fetch whose whole ladder ran out
|
|
324
|
+
* before the deadline is an ordinary `Timeout`, not a cut.
|
|
325
|
+
*/
|
|
326
|
+
export function isDeadlineCut(err) {
|
|
327
|
+
return (err instanceof McpError &&
|
|
328
|
+
err.code === JsonRpcErrorCode.Timeout &&
|
|
329
|
+
(err.data?.reason === 'retry_deadline_exceeded' || err.data?.reason === 'deadline_exceeded'));
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* The sentence, leading space included, a paged tool's failure notice adds when
|
|
333
|
+
* the call's time budget cut some of the failed `slots`; empty when it cut none.
|
|
334
|
+
*/
|
|
335
|
+
export function timeBudgetCutSentence(slots) {
|
|
336
|
+
const failed = slots.filter((slot) => slot.kind === 'failed');
|
|
337
|
+
const cut = failed.filter((slot) => isDeadlineCut(slot.error)).length;
|
|
338
|
+
if (cut === 0)
|
|
339
|
+
return '';
|
|
340
|
+
const which = cut < failed.length ? `${cut} of them` : failed.length === 1 ? 'it' : 'they';
|
|
341
|
+
return ` This call's ${CALL_BUDGET_MS / 1000}-second time budget ran out before ${which} loaded.`;
|
|
342
|
+
}
|
|
255
343
|
/** Detect HTML error bodies returned by upstream APIs under rate limiting or maintenance. */
|
|
256
344
|
function isHtmlErrorBody(text) {
|
|
257
345
|
return /^\s*<(!DOCTYPE\s+html|html[\s>])/i.test(text);
|
|
@@ -375,23 +463,34 @@ async function withUpstreamHttpErrors(upstream, fn) {
|
|
|
375
463
|
// ---------------------------------------------------------------------------
|
|
376
464
|
export class HnService {
|
|
377
465
|
concurrencyLimit;
|
|
466
|
+
/**
|
|
467
|
+
* Names this server, at the version it advertises, to the HN API and
|
|
468
|
+
* Algolia, in place of the runtime's default client string.
|
|
469
|
+
*/
|
|
470
|
+
userAgent = `hn-mcp-server/${config.mcpServerVersion} (+https://github.com/cyanheads/hn-mcp-server)`;
|
|
378
471
|
constructor(concurrencyLimit) {
|
|
379
472
|
this.concurrencyLimit = concurrencyLimit;
|
|
380
473
|
}
|
|
381
474
|
/**
|
|
382
475
|
* GET a JSON document from an upstream, with retries around the full
|
|
383
476
|
* fetch-and-parse pipeline and both failure shapes — non-2xx status and
|
|
384
|
-
* HTML-instead-of-JSON — classified onto a contract reason.
|
|
477
|
+
* HTML-instead-of-JSON — classified onto a contract reason. Every attempt
|
|
478
|
+
* sends this server's `User-Agent`.
|
|
385
479
|
*
|
|
386
480
|
* `deadline`, a `Date.now()` instant, bounds every attempt and backoff
|
|
387
481
|
* together; past it the call fails with a `Timeout` whose `data.reason` is
|
|
388
482
|
* `retry_deadline_exceeded`, unless the last attempt failed on an HTTP
|
|
389
483
|
* status, which keeps its contract reason. A caller abort still wins over it.
|
|
484
|
+
*
|
|
485
|
+
* An attempt keeps its full request timeout even with less of the deadline
|
|
486
|
+
* left: the deadline's own signal then ends it, so a cut always reads as the
|
|
487
|
+
* deadline's rather than racing an attempt timer set to the same instant.
|
|
390
488
|
*/
|
|
391
489
|
getJson(upstream, operation, url, ctx, deadline) {
|
|
392
|
-
return withUpstreamHttpErrors(upstream, () => withRetry(async ({ signal
|
|
393
|
-
const res = await fetchWithTimeout(url,
|
|
490
|
+
return withUpstreamHttpErrors(upstream, () => withRetry(async ({ signal }) => {
|
|
491
|
+
const res = await fetchWithTimeout(url, REQUEST_TIMEOUT_MS, ctx, {
|
|
394
492
|
signal,
|
|
493
|
+
headers: { 'User-Agent': this.userAgent },
|
|
395
494
|
});
|
|
396
495
|
return parseJsonBody(await res.text(), upstream);
|
|
397
496
|
}, {
|
|
@@ -412,15 +511,19 @@ export class HnService {
|
|
|
412
511
|
* Fetch a user profile by username. Returns null when the user does not exist.
|
|
413
512
|
* The username is percent-encoded as a single path segment — an unencoded
|
|
414
513
|
* value containing `/` or dot-segments would otherwise escape the `/user/`
|
|
415
|
-
* route and resolve to a different Firebase resource.
|
|
514
|
+
* route and resolve to a different Firebase resource. `deadline` bounds its
|
|
515
|
+
* retries as in {@link HnService.getJson}.
|
|
416
516
|
*/
|
|
417
|
-
fetchUser(username, ctx) {
|
|
418
|
-
return this.getJson('HN API', 'hn.fetchUser', `${HN_API}/user/${encodeURIComponent(username)}.json`, ctx);
|
|
517
|
+
fetchUser(username, ctx, deadline) {
|
|
518
|
+
return this.getJson('HN API', 'hn.fetchUser', `${HN_API}/user/${encodeURIComponent(username)}.json`, ctx, deadline);
|
|
419
519
|
}
|
|
420
|
-
/**
|
|
421
|
-
|
|
520
|
+
/**
|
|
521
|
+
* Fetch a feed's ID array. Throws on upstream failure after retries.
|
|
522
|
+
* `deadline` bounds its retries as in {@link HnService.getJson}.
|
|
523
|
+
*/
|
|
524
|
+
fetchFeed(type, ctx, deadline) {
|
|
422
525
|
const endpoint = type === 'jobs' ? 'jobstories' : `${type}stories`;
|
|
423
|
-
return this.getJson('HN API', 'hn.fetchFeed', `${HN_API}/${endpoint}.json`, ctx);
|
|
526
|
+
return this.getJson('HN API', 'hn.fetchFeed', `${HN_API}/${endpoint}.json`, ctx, deadline);
|
|
424
527
|
}
|
|
425
528
|
/**
|
|
426
529
|
* Batch-fetch items with concurrency limiting: one {@link ItemSlot} per ID,
|
|
@@ -437,14 +540,19 @@ export class HnService {
|
|
|
437
540
|
* throttled upstream.
|
|
438
541
|
*
|
|
439
542
|
* With a `deadline` (a `Date.now()` instant), a fetch still retrying when it
|
|
440
|
-
* passes fails its slot with a `Timeout` instead of finishing its ladder
|
|
543
|
+
* passes fails its slot with a `Timeout` instead of finishing its ladder, and
|
|
544
|
+
* no fetch starts past it: every slot not yet started is reported `failed`
|
|
545
|
+
* with one `Timeout` (`data.reason: 'deadline_exceeded'`), or with the rate
|
|
546
|
+
* limit when one also stopped the batch. {@link isDeadlineCut} tells both
|
|
547
|
+
* kinds of cut slot from an ordinary failure.
|
|
441
548
|
*/
|
|
442
549
|
async fetchItems(ids, ctx, deadline) {
|
|
443
550
|
const slots = new Array(ids.length);
|
|
444
551
|
let rateLimit;
|
|
445
552
|
let next = 0;
|
|
553
|
+
const pastDeadline = () => deadline !== undefined && Date.now() >= deadline;
|
|
446
554
|
const worker = async () => {
|
|
447
|
-
while (!rateLimit && next < ids.length) {
|
|
555
|
+
while (!rateLimit && !pastDeadline() && next < ids.length) {
|
|
448
556
|
const i = next++;
|
|
449
557
|
const id = ids[i];
|
|
450
558
|
if (id == null)
|
|
@@ -471,12 +579,24 @@ export class HnService {
|
|
|
471
579
|
const workerCount = Math.min(this.concurrencyLimit, ids.length);
|
|
472
580
|
await Promise.all(Array.from({ length: workerCount }, worker));
|
|
473
581
|
const skipped = ids.length - next;
|
|
474
|
-
|
|
582
|
+
let unstarted = rateLimit;
|
|
583
|
+
if (skipped > 0 && rateLimit) {
|
|
475
584
|
ctx.log.warning('Batch stopped: upstream rate-limited, remaining items not fetched', {
|
|
476
585
|
skipped,
|
|
477
586
|
});
|
|
478
587
|
}
|
|
479
|
-
|
|
588
|
+
else if (skipped > 0) {
|
|
589
|
+
unstarted = timeout('The time budget ran out before this item was fetched.', {
|
|
590
|
+
reason: 'deadline_exceeded',
|
|
591
|
+
recovery: {
|
|
592
|
+
hint: "The HN API was too slow to answer within this call's time budget. Retry the same call after a short delay.",
|
|
593
|
+
},
|
|
594
|
+
});
|
|
595
|
+
ctx.log.warning('Batch stopped: time budget spent, remaining items not fetched', {
|
|
596
|
+
skipped,
|
|
597
|
+
});
|
|
598
|
+
}
|
|
599
|
+
return ids.map((id, i) => slots[i] ?? { kind: 'failed', id, error: unstarted });
|
|
480
600
|
}
|
|
481
601
|
/**
|
|
482
602
|
* Search HN via Algolia. Throws on upstream failure after retries. An omitted
|
|
@@ -502,6 +622,8 @@ export class HnService {
|
|
|
502
622
|
const numericFilters = [];
|
|
503
623
|
if (params.minPoints != null)
|
|
504
624
|
numericFilters.push(`points>=${params.minPoints}`);
|
|
625
|
+
if (params.minComments != null)
|
|
626
|
+
numericFilters.push(`num_comments>=${params.minComments}`);
|
|
505
627
|
const bounds = params.dateRange ? dateRangeToEpochSeconds(params.dateRange) : {};
|
|
506
628
|
if (bounds.start != null)
|
|
507
629
|
numericFilters.push(`created_at_i>${bounds.start}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hn-service.js","sourceRoot":"","sources":["../../../src/services/hn/hn-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hn-service.js","sourceRoot":"","sources":["../../../src/services/hn/hn-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -75,10 +75,14 @@ export interface AlgoliaHit {
|
|
|
75
75
|
job_text?: string | null;
|
|
76
76
|
num_comments?: number | null;
|
|
77
77
|
objectID: string;
|
|
78
|
+
/** A comment's parent: its story's id for a top-level comment, otherwise the comment it replies to. Comment records only. */
|
|
79
|
+
parent_id?: number | null;
|
|
78
80
|
points?: number | null;
|
|
79
81
|
story_id?: number | null;
|
|
80
82
|
story_text?: string | null;
|
|
81
83
|
story_title?: string | null;
|
|
84
|
+
/** The link of a comment's story; absent or `""` when the story is a text post. Comment records only. */
|
|
85
|
+
story_url?: string | null;
|
|
82
86
|
title?: string | null;
|
|
83
87
|
url?: string | null;
|
|
84
88
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/hn/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/hn/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cyanheads/hn-mcp-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.1",
|
|
4
4
|
"description": "Browse Hacker News feeds, threads, and user profiles with full-text search via MCP. STDIO or Streamable HTTP.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
"CLAUDE.md",
|
|
18
18
|
"AGENTS.md",
|
|
19
19
|
"Dockerfile",
|
|
20
|
-
"server.json"
|
|
20
|
+
"server.json",
|
|
21
|
+
"skills/"
|
|
21
22
|
],
|
|
22
23
|
"scripts": {
|
|
23
24
|
"build": "bun run scripts/build.ts",
|
|
@@ -78,27 +79,27 @@
|
|
|
78
79
|
}
|
|
79
80
|
],
|
|
80
81
|
"engines": {
|
|
81
|
-
"bun": ">=1.4.
|
|
82
|
+
"bun": ">=1.4.4",
|
|
82
83
|
"node": ">=24.0.0"
|
|
83
84
|
},
|
|
84
|
-
"packageManager": "bun@1.4.
|
|
85
|
+
"packageManager": "bun@1.4.4",
|
|
85
86
|
"publishConfig": {
|
|
86
87
|
"access": "public"
|
|
87
88
|
},
|
|
88
89
|
"dependencies": {
|
|
89
|
-
"@cyanheads/mcp-ts-core": "^0.13.
|
|
90
|
+
"@cyanheads/mcp-ts-core": "^0.13.22",
|
|
90
91
|
"pino-pretty": "^13.2.0",
|
|
91
92
|
"zod": "^4.6.7"
|
|
92
93
|
},
|
|
93
94
|
"devDependencies": {
|
|
94
|
-
"@biomejs/biome": "^2.
|
|
95
|
+
"@biomejs/biome": "^2.6.6",
|
|
95
96
|
"@socketsecurity/bun-security-scanner": "^1.1.3",
|
|
96
|
-
"@types/node": "^26.6.
|
|
97
|
-
"@vitest/coverage-istanbul": "^5.0
|
|
97
|
+
"@types/node": "^26.6.6",
|
|
98
|
+
"@vitest/coverage-istanbul": "^5.1.0",
|
|
98
99
|
"depcheck": "^1.4.7",
|
|
99
|
-
"ignore": "^7.0.
|
|
100
|
-
"tsc-alias": "^1.9.
|
|
100
|
+
"ignore": "^7.0.14",
|
|
101
|
+
"tsc-alias": "^1.9.10",
|
|
101
102
|
"typescript": "^7.0.2",
|
|
102
|
-
"vitest": "^5.0
|
|
103
|
+
"vitest": "^5.1.0"
|
|
103
104
|
}
|
|
104
105
|
}
|
package/server.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"url": "https://github.com/cyanheads/hn-mcp-server",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "0.
|
|
9
|
+
"version": "0.6.1",
|
|
10
10
|
"remotes": [
|
|
11
11
|
{
|
|
12
12
|
"type": "streamable-http",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
20
20
|
"identifier": "@cyanheads/hn-mcp-server",
|
|
21
21
|
"runtimeHint": "npx",
|
|
22
|
-
"version": "0.
|
|
22
|
+
"version": "0.6.1",
|
|
23
23
|
"environmentVariables": [
|
|
24
24
|
{
|
|
25
25
|
"name": "HN_CONCURRENCY_LIMIT",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
46
46
|
"identifier": "@cyanheads/hn-mcp-server",
|
|
47
47
|
"runtimeHint": "npx",
|
|
48
|
-
"version": "0.
|
|
48
|
+
"version": "0.6.1",
|
|
49
49
|
"environmentVariables": [
|
|
50
50
|
{
|
|
51
51
|
"name": "MCP_TRANSPORT_TYPE",
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hn-guide
|
|
3
|
+
description: Find the Hacker News thread behind a link, search topics without Algolia's fuzzy matches, read large comment trees in full, and search what one user said, with the hn_* tools. Use when a task asks what HN thinks of something, needs the discussion of a URL or story, a user's posts on a topic, the most-discussed front-page stories, or the monthly Who is hiring threads.
|
|
4
|
+
license: Apache-2.0
|
|
5
|
+
metadata:
|
|
6
|
+
author: cyanheads
|
|
7
|
+
version: "1.1"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Scope
|
|
11
|
+
|
|
12
|
+
Hacker News, read-only and keyless: live feeds, items, and profiles from HN's Firebase API, and full-text search over Algolia's HN index. Nothing posts, votes, or flags. A story carries its submitted `url`, never the linked page: read the page with a web-fetch tool when the task needs its content.
|
|
13
|
+
|
|
14
|
+
## Identifiers
|
|
15
|
+
|
|
16
|
+
| To reach | Take |
|
|
17
|
+
|:--|:--|
|
|
18
|
+
| A story's whole discussion | a feed story's or story hit's `id`; a comment hit's `storyId`; a comment root's `item.storyId` from `hn_get_thread` |
|
|
19
|
+
| One comment and its replies | the comment's `id`, from a search hit, a thread page, or a user's submissions |
|
|
20
|
+
| What a comment replied to | `parent` on a `hn_get_thread` comment root or a `hn_get_user` submission; `parentId` on a comment search hit (its story's id for a top-level comment, otherwise the parent comment's id), and `storyUrl` when that story links out |
|
|
21
|
+
| A user | a `by` or `author` field, copied exactly |
|
|
22
|
+
|
|
23
|
+
Usernames match case-sensitively on every tool: `Animats` exists, while `animats` answers `user_not_found` and empties an author-filtered search. When the name came from the user rather than a field, confirm it with `hn_get_user`; on `user_not_found`, keyword-search the name (text search ignores case) and read the `author` of the hits that differ from it only in case.
|
|
24
|
+
|
|
25
|
+
## Gates
|
|
26
|
+
|
|
27
|
+
- **Find a link's thread with a story search.** A URL query searches comment text too, and comments that paste the link crowd out the submission: for `https://paulgraham.com/greatwork.html` the first six hits were all comments. Search it with the story type. One URL is often submitted many times, each a separate thread: that essay has about 11 story submissions, from 1,008 points and 432 comments down to reposts with a handful of points. Take the one with the most comments, or read several when the question is about reception over time.
|
|
28
|
+
- **Quote a term to match it exactly.** Algolia's keyword matching is typo-tolerant and matches the last term as a prefix: `kubernetse` returns Kubernetes stories, and `zig` matches "Zigbee". Wrap a term in double quotes to match only that word, and put `-` before a word to exclude it. October 2026 stories for `zig` number "about 617"; for `"zig"`, exactly 28, and `"zig" -devlog` 27. The `<em>` span in `highlights.title` and `highlights.text` shows what actually matched; `highlights.text` is absent under the compact view and when `highlightsTextOmitted` is true, so read `highlights.title` and `matchedWords` there.
|
|
29
|
+
- **An estimate is not a count.** Report `totalHits` as a number only when `totalHitsExact` is true, and as "about N" otherwise. An unquoted estimate also counts the fuzzy matches: `rust` by one author is "about 1,633" with off-topic comments among the newest hits, `"rust"` an exact 906.
|
|
30
|
+
- **Relevance is not popularity.** With a query, title matches outrank body-only matches whatever their score: a 57-point story that mentions `"zig"` only in its text ranked below 1-point title matches. For the biggest stories on a topic, set a `minPoints` floor; for the most discussed, a `minComments` floor. Both filter rather than sort, so order the survivors by `points` or `numComments` yourself, and both drop comments and jobs (`minComments` drops poll options too, which carry votes but no comment count) and are rejected with `tags: "comment"` or `"job"`.
|
|
31
|
+
- **One thread page is not the thread.** `hn_get_thread` walks breadth-first, so on a large story the default page holds only top-level comments: 50 of 544, every one at depth 0, no replies. Before summarizing a discussion, either follow `nextCursor` until it is absent, or drill into the first top-level comments: each comment's id as `itemId`, with a deeper depth, returns its subtree (one top-level comment returned 23 live replies over four levels in a single call). A story's thread is complete when the comments loaded across pages reach `totalAvailable`. A comment root reports no `totalAvailable`; its subtree is complete when `truncated` is absent.
|
|
32
|
+
- **Comments have no scores.** HN exposes no comment votes: thread comments carry no `score` and comment hits no `points`. "Top comments" are the first top-level comments `hn_get_thread` returns, in HN's ranking order. Never call one the most upvoted.
|
|
33
|
+
- **Feed order is HN's rank, not score.** `hn_get_stories` returns a feed in ranking order: on the top feed a 66-point story sat fifth, above a 1,137-point one. The `front_page` search tag returns the same 30 stories sorted by points instead. "Most discussed" is the highest `descendants` (feeds, threads) or `numComments` (search), and it often disagrees with score: 534 comments on a 387-point story, 364 on the 1,137-point one. In a search window, `minComments` with the story type drops the lightly discussed stories before you rank; it does not sort.
|
|
34
|
+
- **Hiring threads are not the jobs feed.** The `jobs` feed and the `job` type hold YC company job ads, scored 1 with no comments. The monthly "Ask HN: Who is hiring?" and "Ask HN: Who wants to be hired?" threads are stories posted by the user `whoishiring` on the month's first weekday, except January, when they went up on the 2nd in both 2025 and 2026 (in 14 of the 25 months from November 2024 to November 2026, that was the 1st), and each posting is a top-level comment. Find the month's thread with an author search for `whoishiring` and a `dateRange` from the last day of the previous month to the 5th, never the 1st alone, with the title in `query` to tell the two threads apart; list its postings with `hn_get_thread` at depth 1, or search them with a comment search scoped to its `storyId` (`remote rust`).
|
|
35
|
+
- **A user's submissions are everything they posted.** `hn_get_user` returns every item type, newest first, with no topic filter, so an active user's page is mostly comments. For what a user said about a topic, search with the author filter and a quoted term, sorted by date for their recent views; each comment hit's `storyTitle` names the thread it was posted in.
|
|
36
|
+
|
|
37
|
+
## Workflows
|
|
38
|
+
|
|
39
|
+
**What HN thinks of a topic over a period.** A story search with the quoted term and a date range finds the threads about it; a comment search with the same term and range finds what was said inside other threads, where much of the discussion lives. Scan both with the compact view, choose the stories with the most comments, and read them per the thread gate. Cite item ids, since `https://news.ycombinator.com/item?id=<id>` opens any of them.
|