Skip to main content
Glama
imprvhub

mcp-claude-hackernews

hn_top

Fetch the top-ranked stories from Hacker News with customizable limits, ensuring you stay updated on trending tech and development topics efficiently.

Instructions

Get the top-ranked stories from Hacker News

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of stories to fetch (1-50, default: 10)

Implementation Reference

  • Handler logic for the 'hn_top' tool: parses limit argument, fetches top stories via HackerNewsAPI, formats them, stores in lastStoriesList, and returns formatted text response.
    if (name === "hn_top") {
      const limit = typeof args?.limit === 'number' ? args.limit : 10;
      const stories = await api.getTopStories(limit);
      const formattedStories = stories.map(story => ({
        id: story.id,
        title: story.title,
        by: story.by,
        time: api.formatTime(story.time),
        url: story.url,
        score: story.score,
        commentsCount: story.kids?.length || 0
      }));
      lastStoriesList = formattedStories;
      return {
        content: [
          {
            type: "text",
            text: formatStoriesAsText(formattedStories)
          }
        ]
      };
  • Input schema and metadata registration for the 'hn_top' tool within the listTools response.
    {
      name: "hn_top",
      description: "Get the top-ranked stories from Hacker News",
      inputSchema: {
        type: "object",
        properties: {
          limit: {
            type: "number",
            description: "Number of stories to fetch (1-50, default: 10)",
            minimum: 1,
            maximum: 50,
            default: 10
          }
        }
      }
    },
  • Core helper method in HackerNewsAPI that fetches top story IDs from HN API and resolves full story details.
    async getTopStories(limit = 50): Promise<Story[]> {
      try {
        const response = await axios.get(`${baseUrl}/topstories.json`);
        const storyIds = response.data || [];
        const storyPromises = storyIds.slice(0, limit).map((id: number) => this.getItemDetails(id));
        const stories = await Promise.all(storyPromises);
        return stories.filter((story): story is Story => story !== null && story.type === 'story');
      } catch (error) {
        console.error('Error fetching top stories:', error);
        return [];
      }
    }
  • Helper function to format the list of stories into a numbered, readable text output.
    function formatStoriesAsText(stories: FormattedStory[]): string {
      if (!stories || stories.length === 0) {
        return "No stories found.";
      }
      
      return stories.map((story, index) => {
        return `${index + 1}. ${story.title}
       ID: ${story.id}
       By: ${story.by}
       Published: ${story.time}
       Score: ${story.score}
       Comments: ${story.commentsCount}
       URL: ${story.url || 'N/A'}
       ------------------------------`;
      }).join('\n\n');
    }
Install Server

Other Tools

Related Tools

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/imprvhub/mcp-claude-hackernews'

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