Skip to main content
Glama

get-top-stories

Retrieve HackerNews stories that meet a minimum point threshold, sorted by publication date. Filter content by score and browse results with pagination controls.

Instructions

Get stories with a minimum number of points, sorted by date

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
hitsPerPageNoNumber of results per page (default: 20)
minPointsNoMinimum number of points (default: 100)
pageNoPage number for pagination (default: 0)

Implementation Reference

  • The handler function for the 'get-top-stories' tool. It constructs a query for stories with at least the specified minimum points using the HackerNews Algolia API's search_by_date endpoint, fetches the data, and returns both text and structured content.
    async ({ minPoints = 100, page, hitsPerPage }) => { const params = new URLSearchParams(); params.append('tags', 'story'); params.append('numericFilters', `points>=${minPoints}`); if (page !== undefined) params.append('page', page.toString()); if (hitsPerPage !== undefined) params.append('hitsPerPage', hitsPerPage.toString()); const endpoint = `/search_by_date?${params.toString()}`; const result = await fetchHN(endpoint); return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }], structuredContent: result }; }
  • The input and output schema definitions for the 'get-top-stories' tool, using Zod for validation. Input includes optional minPoints (default 100), page, and hitsPerPage. Output matches the HN API search response structure.
    { title: 'Get Top Stories by Points', description: 'Get stories with a minimum number of points, sorted by date', inputSchema: { minPoints: z.number().optional().default(100).describe('Minimum number of points (default: 100)'), page: z.number().optional().describe('Page number for pagination (default: 0)'), hitsPerPage: z.number().optional().describe('Number of results per page (default: 20)') }, outputSchema: { hits: z.array(z.any()), nbHits: z.number(), nbPages: z.number(), page: z.number(), hitsPerPage: z.number() } },
  • src/index.ts:515-548 (registration)
    The registration of the 'get-top-stories' tool on the MCP server, including name, metadata/schema, and handler function.
    server.registerTool( 'get-top-stories', { title: 'Get Top Stories by Points', description: 'Get stories with a minimum number of points, sorted by date', inputSchema: { minPoints: z.number().optional().default(100).describe('Minimum number of points (default: 100)'), page: z.number().optional().describe('Page number for pagination (default: 0)'), hitsPerPage: z.number().optional().describe('Number of results per page (default: 20)') }, outputSchema: { hits: z.array(z.any()), nbHits: z.number(), nbPages: z.number(), page: z.number(), hitsPerPage: z.number() } }, async ({ minPoints = 100, page, hitsPerPage }) => { const params = new URLSearchParams(); params.append('tags', 'story'); params.append('numericFilters', `points>=${minPoints}`); if (page !== undefined) params.append('page', page.toString()); if (hitsPerPage !== undefined) params.append('hitsPerPage', hitsPerPage.toString()); const endpoint = `/search_by_date?${params.toString()}`; const result = await fetchHN(endpoint); return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }], structuredContent: result }; } );
  • Shared helper function used by all HackerNews tools, including 'get-top-stories', to make API calls to the HN Algolia API and handle errors.
    async function fetchHN(endpoint: string): Promise<any> { const response = await fetch(`${HN_API_BASE}${endpoint}`); if (!response.ok) { throw new Error(`HN API error: ${response.status} ${response.statusText}`); } return await response.json(); }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/wei/hn-mcp-server-vibe'

If you have feedback or need assistance with the MCP directory API, please join our Discord server