← Back to search

io.github.malkreide/hn-tech-signal-mcp

malkreide Scanned 25d ago

Hacker News signal extraction for technology trend monitoring

B
75.7 / 100

Versions

0.2.4latest
first seen Jun 30, 2026
PermissionsTool SafetyAuthAnnotationsCode QualityStabilitySpecVuln HistoryAuthorTransparencyCommunity

Tools 8

hn_top_stories
annotations: none low

Fetch stories from any of the six HackerNews front-page feeds. Feeds: 'top' (frontpage), 'best' (highest voted), 'new' (latest), 'ask' (Ask HN — questions to the community), 'show' (Show HN — projects people are shipping), 'job' (YC company job posts). 'show' is the strongest signal for what practitioners are actually building; 'ask' for what they are stuck on. Upstream, 'ask' and 'job' hold only ~30 items, so a large limit may return fewer results. Args: params (HnTopStoriesInput): - feed (str): 'top', 'best', 'new', 'ask', 'show', or 'job' - limit (int): Stories to return (1–30) - min_score (int): Minimum score filter (job posts score 1) Returns: str: JSON with feed, count, stories[]. Each story: id, type, title, url, score, comments, by, posted, hn_link.

params HnTopStoriesInput
hn_search
annotations: none low

Search HackerNews by keyword using the Algolia search API. Covers all historical HN content. Find discussions on specific technologies, papers, companies, or events. Args: params (HnSearchInput): - query (str): Search terms - limit (int): Results (1–20) - days_back (int): Recency window in days - tags (Optional[str]): 'story', 'ask_hn', 'show_hn', or empty Returns: str: JSON with query, total_found, count, hits[]. Each hit: id, title, url, score, comments, author, posted, hn_link, excerpt.

params HnSearchInput
hn_discussion
annotations: none low

Read the comment thread under a HackerNews story. Where hn_top_stories and hn_search tell you *what* is being discussed, this tells you *what is actually being argued* — the counter-arguments, the practitioner caveats, the "we tried this in production" replies that carry the real signal. Algolia can search comment text but does not return thread structure, so this is the only way to see who replied to whom. Get a story_id from hn_top_stories or hn_search first. Comments are walked breadth-first, so the highest-ranked top-level comments come back first. Deleted and flagged comments are skipped. Popular threads run to several hundred comments and each one costs a request upstream, so both depth and total count are capped — check the 'truncated' flag to see whether the thread was cut short. Args: params (HnDiscussionInput): - story_id (int): HackerNews item ID - max_depth (int): Reply nesting levels (1–4, default 2) - max_comments (int): Total comment budget (1–100, default 25) - text_chars (int): Per-comment text truncation (100–2000) Returns: str: JSON with story{}, total_comments (as reported by HN), fetched_comments, truncated, comments[]. Each comment: id, by, posted, text, reply_count, replies[] (same shape, nested).

params HnDiscussionInput
arxiv_latest
annotations: none low

Fetch the most recently submitted papers from arXiv AI/ML categories. Papers appear hours before press coverage — the fastest signal of what is happening at the AI research frontier. Categories: cs.AI (Artificial Intelligence), cs.LG (Machine Learning), cs.CL (NLP), cs.CV (Computer Vision), cs.NE (Neural Computing), stat.ML. Args: params (ArxivLatestInput): - categories (List[str]): arXiv category codes - limit (int): Papers per category (1–20) Returns: str: JSON with categories, total_papers, by_category dict. Each paper: id, title, abstract (400 chars), authors, published, url, pdf.

params ArxivLatestInput
arxiv_search
annotations: none low

Search arXiv for papers matching a query, sorted by submission date. Searches title, abstract and author fields. Optionally restrict to a specific AI/ML category. Args: params (ArxivSearchInput): - query (str): Search terms (e.g. 'LLM agents tool use') - category (Optional[str]): arXiv category filter - limit (int): Papers to return (1–20) Returns: str: JSON with query, category, count, papers[]. Each paper: id, title, abstract, authors, published, url, pdf.

params ArxivSearchInput
lobsters_hot
annotations: none low

Fetch the hottest stories from Lobste.rs, a curated tech community. Lobste.rs is smaller and more technically focused than HackerNews. Invitation-only membership ensures higher signal-to-noise ratio. Args: params (LobstersHotInput): - limit (int): Stories to return (1–25) - tag_filter (Optional[str]): Tag substring filter (e.g. 'ai', 'ml') Returns: str: JSON with count, stories[]. Each story: title, url, score, comments, tags, submitter, submitted_at, lobsters_url.

params LobstersHotInput
github_trending_ai
annotations: none low

Search GitHub for trending repositories by topic. A surge of starred repos on a topic is a strong adoption signal. No auth required (60 req/h). Set GITHUB_TOKEN for 5,000 req/h. Args: params (GithubTrendingAiInput): - topic (str): GitHub topic tag (e.g. 'llm', 'mcp', 'ai-agents') - limit (int): Repos to return (1–15) - min_stars (int): Minimum stars filter - sort (str): 'stars' or 'updated' Returns: str: JSON with topic, total_found, count, repos[]. Each repo: name, description, stars, forks, language, topics, updated_at, url.

params GithubTrendingAiInput
tech_signal_digest
annotations: none low

Aggregate tech & AI signals from all four sources in one call. The primary tool for a comprehensive daily or weekly tech intelligence briefing. Combines HackerNews, arXiv, Lobste.rs and GitHub into one structured JSON digest. Use 'focus' to filter for a specific topic. Args: params (TechSignalDigestInput): - focus (Optional[str]): Topic filter (e.g. 'MCP', 'agents') - hn_limit (int): HN stories (1–10) - arxiv_limit (int): arXiv papers (1–10) - lobsters_limit (int): Lobste.rs stories (1–10) - github_limit (int): GitHub repos (1–10) Returns: str: JSON digest with generated_at, focus, degraded_sources[] and sources{hn, arxiv, lobsters, github}. Each source has label, count and its items list. A source that could not be reached still appears, with count 0 and an 'error' describing why, and its key is listed in degraded_sources — treat its absence as unknown, not as zero. The GitHub section may carry 'incomplete_topics' when part of the topic sweep failed. Only if all four sources fail does this tool return a plain error string instead of JSON.

params TechSignalDigestInput

Permissions 3

network medium
Server uses network capabilities via: httpx, urllib
filesystem low
Server uses filesystem capabilities via: os, pathlib
env_vars low
Server uses env_vars capabilities via: os.environ

Scan Findings 38

info
Sandbox failed to start for output poisoning scan output_poisoning · 100%
low
Tool 'hn_top_stories' has no annotations annotation_checker · 100%
low
Tool 'hn_search' has no annotations annotation_checker · 100%
low
Tool 'hn_discussion' has no annotations annotation_checker · 100%
low
Tool 'arxiv_latest' has no annotations annotation_checker · 100%
low
Tool 'arxiv_search' has no annotations annotation_checker · 100%
low
Tool 'lobsters_hot' has no annotations annotation_checker · 100%
low
Tool 'github_trending_ai' has no annotations annotation_checker · 100%
low
Tool 'tech_signal_digest' has no annotations annotation_checker · 100%
info
Sandbox failed to start for behavioral verification behavioral_verifier · 100%
medium
Vulnerable dependency: mcp@2.0.0,<3 (GHSA-3qhf-m339-9g5v) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@2.0.0,<3 (GHSA-9h52-p55h-vw2f) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@2.0.0,<3 (GHSA-j975-95f5-7wqh) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@2.0.0,<3 (GHSA-jpw9-pfvf-9f58) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@2.0.0,<3 (GHSA-vj7q-gjh5-988w) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@2.0.0,<3 (PYSEC-2026-1616) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@2.0.0,<3 (PYSEC-2026-1617) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@2.0.0,<3 (PYSEC-2026-1618) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@2.0.0,<3 (PYSEC-2026-3482) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@2.0.0,<3 (PYSEC-2026-3483) dependency_analyzer · 95%
medium
Vulnerable dependency: pydantic@2.0.0 (GHSA-mr82-8j83-vxmv) dependency_analyzer · 95%
medium
Vulnerable dependency: pydantic@2.0.0 (PYSEC-2026-1812) dependency_analyzer · 95%
info
pyproject.toml metadata manifest_parser · 100%
info
Tool: hn_top_stories manifest_parser · 90%
info
Tool: hn_search manifest_parser · 90%
info
Tool: hn_discussion manifest_parser · 90%
info
Tool: arxiv_latest manifest_parser · 90%
info
Tool: arxiv_search manifest_parser · 90%
info
Tool: lobsters_hot manifest_parser · 90%
info
Tool: github_trending_ai manifest_parser · 90%
info
Tool: tech_signal_digest manifest_parser · 90%
info
Transport: streamable-http manifest_parser · 80%
info
Required env vars (6) manifest_parser · 80%
medium
Permission: network access detected permission_analyzer · 90%
low
Permission: filesystem access detected permission_analyzer · 70%
low
Permission: env_vars access detected permission_analyzer · 90%
info
No dependency files found for SBOM generation sbom_generator · 100%
medium
No build provenance detected (SLSA L0) slsa_assessor · 90%