mcpField
H
hn-search

hn-search

github.com/dylanfeltusProductivity18085 installsUpdated 6w ago
Repository

About hn-search

hn-search is a skill for finding and monitoring Hacker News stories, comments, and user posts through the Algolia HN Search API. It supports relevance-based and date-based searches, with filters for content type, activity, and time.

Key features

  1. 01Search stories, comments, and users
  2. 02Sort searches by relevance or date
  3. 03Filter by content type and activity
  4. 04Find recent topic mentions
  5. 05Retrieve comments on a story

Use cases

  1. 01Research Hacker News discussion of a topic
  2. 02Track recent mentions of a product or company
  3. 03Find Show HN or Ask HN posts
  4. 04Review comments on a specific story

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/dylanfeltus/skills --skill hn-search

After installing, type/hn-searchin Claude Code to confirm it loaded.

Bundled filesREADME.md

Details

From the project README

Hacker News Search

Search and monitor Hacker News stories, comments, and users via the Algolia HN Search API. No API key required.

When to Use

  • User asks about Hacker News discussions on a topic
  • User wants to find HN posts about a company, product, or technology
  • User wants to monitor HN for mentions of something
  • User asks "what's trending on HN" or "what did HN think about X"
  • User wants to find Show HN / Ask HN / Launch HN posts

API Overview

Base URL: https://hn.algolia.com/api/v1

Two search endpoints:

  • /search — Relevance-sorted (best for finding specific topics)
  • /search_by_date — Date-sorted (best for monitoring / recent activity)

Rate Limits: 10,000 requests/hour (generous, no auth needed)

How to Search

Step 1: Build the URL
https://hn.algolia.com/api/v1/search?query=QUERY&tags=TAG&hitsPerPage=N&numericFilters=FILTERS
Step 2: Fetch with web_fetch

Use web_fetch to call the API. Response is JSON.

Parameters
ParameterDescriptionExample
querySearch terms (URL-encoded)query=openai+gpt
tagsFilter by type (see below)tags=story
hitsPerPageResults per page (max 1000)hitsPerPage=20
pagePage number (0-indexed)page=0
numericFiltersNumeric filters (see below)numericFilters=points>100
Tag Filters

Use tags to filter by content type:

TagDescription
storyStories only
commentComments only
show_hnShow HN posts
ask_hnAsk HN posts
front_pageCurrently on front page
author_USERNAMEPosts by a specific user
story_IDComments on a specific story

Combine tags with commas (AND) or parentheses with commas (OR):

  • tags=story,show_hn → Show HN stories (AND)
  • tags=(story,comment) → Stories OR comments
Numeric Filters
FilterDescription
points>NMinimum points/upvotes
num_comments>NMinimum comments
created_at_i>TIMESTAMPAfter Unix timestamp
created_at_i<TIMESTAMPBefore Unix timestamp

Combine with commas: numericFilters=points>100,num_comments>50

Date Ranges

To search within a time window, use Unix timestamps with created_at_i:

Calculate the current Unix timestamp first (e.g., via exec: date +%s), then subtract:

WindowSubtract from now
Last 24 hours- 86400
Last 7 days- 604800
Last 30 days- 2592000

Example: if now is 1705312200, last 7 days = numericFilters=created_at_i>1704707400

Response Format

Each hit contains:

{
  "objectID": "12345",
  "title": "Story Title",
  "url": "https://example.com/article",
  "author": "username",
  "points": 150,
  "num_comments": 42,
  "created_at": "2024-01-15T10:30:00Z",
  "created_at_i": 1705312200,
  "story_text": "Text for Ask HN / Show HN (HTML)",
  "_tags": ["story", "author_username", "story_12345"]
}

For comments, hits also include:

{
  "comment_text": "The comment body (HTML)",
  "story_id": 12345,
  "story_title": "Parent Story Title",
  "story_url": "https://example.com",
  "parent_id": 12344
}

The response wrapper includes:

{
  "hits": [...],
  "nbHits": 1000,
  "page": 0,
  "nbPages": 50,
  "hitsPerPage": 20
}

Constructing HN Links

  • Story: https://news.ycombinator.com/item?id={objectID}
  • Comment: https://news.ycombinator.com/item?id={objectID}
  • User: https://news.ycombinator.com/user?id={author}

Step-by-Step Instructions

Searching for Stories on a Topic
  1. URL-encode the query
  2. Fetch: https://hn.algolia.com/api/v1/search?query=YOUR_QUERY&tags=story&hitsPerPage=10
  3. Parse the JSON response
  4. For each hit, present: title, points, num_comments, author, date, HN link, and original URL
Finding Recent/Trending Discussions
  1. Calculate Unix timestamp for your time window (e.g., 7 days ago)
  2. Fetch: https://hn.algolia.com/api/v1/search?query=YOUR_QUERY&tags=story&numericFilters=points>50,created_at_i>TIMESTAMP&hitsPerPage=10
  3. Sort results by points or comments for "trending"
Getting Comments on a Story
  1. Get the story's objectID from a search
  2. Fetch: https://hn.algolia.com/api/v1/search?tags=comment,story_STORYID&hitsPerPage=20
  3. Present comment_text, author, points for each
Monitoring a Topic (Show Recent Mentions)
  1. Use /search_by_date instead of /search
  2. Fetch: https://hn.algolia.com/api/v1/search_by_date?query=YOUR_QUERY&tags=(story,comment)&hitsPerPage=20
  3. Results are newest-first — useful for "what's new about X on HN"
Finding a User's Posts
  1. Fetch: https://hn.algolia.com/api/v1/search?tags=author_USERNAME,story&hitsPerPage=20
  2. For their comments: tags=author_USERNAME,comment

Output Format

Present results as a clean list:

### HN Results for "query" (N total)

1. **Story Title** (150 pts, 42 comments)
   By username · Jan 15, 2024
   🔗 https://example.com/article
   💬 https://news.ycombinator.com/item?id=12345

2. ...

For comments:

### HN Comments on "Story Title"

1. **username** (12 pts) · Jan 15, 2024
   > First ~200 chars of the comment text...
   💬 https://news.ycombinator.com/item?id=12345

Error Handling

  • Empty results: Tell the user no results were found. Suggest broadening the query or removing filters.
  • API error / timeout: Retry once. If still failing, inform the user the HN search API may be temporarily down.
  • Rate limited (429): Unlikely at 10k/hr, but if hit, wait 60 seconds and retry.
  • Malformed response: Check the URL construction — common issues are unencoded special characters in the query.

Examples

Example 1: "What's HN saying about Rust?"
Fetch: https://hn.algolia.com/api/v1/search?query=rust+programming&tags=story&hitsPerPage=5&numericFilters=points>50
Example 2: "Find Show HN posts about AI agents from the last month"
# Calculate timestamp for 30 days ago, then:
Fetch: https://hn.algolia.com/api/v1/search_by_date?query=ai+agents&tags=show_hn&numericFilters=created_at_i>TIMESTAMP&hitsPerPage=10
Example 3: "What has pg posted recently?"
Fetch: https://hn.algolia.com/api/v1/search_by_date?tags=author_pg&hitsPerPage=10

Data Source

Algolia HN Search API — Free, no authentication required. Indexes all public Hacker News content in near real-time.

Comments

Markdown supported