News Ycombinator MCP
hn-mcp is an MCP server that gives AI agents full access to Hacker News β complete comment trees, search, and user profiles β with depth control so they can explore progressively instead of fetching everything at once.
Installation
npx news-ycombinator-mcpAsk AI about News Ycombinator MCP
Powered by Claude Β· Grounded in docs
I know everything about News Ycombinator MCP. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
hn-mcp
HN threads have 500+ comments nested 10 levels deep. Your AI agent needs to read them without blowing its context window.
hn-mcp is an MCP server that gives AI agents full access to Hacker News β complete comment trees, search, and user profiles β with depth control so they can explore progressively instead of fetching everything at once.
Features
- Full comment trees β no depth limits, no truncation
- Depth control β fetch just top-level comments or the entire tree
- Smart pruning β
reply_countat cut-off points so agents decide what to expand - Search β full-text search across stories and comments with filters
- No API keys β uses the public Algolia HN API
- 100% test coverage β tested with VCR cassettes, no network calls needed
Typical agent workflow
1. get_thread(42123456, depth=1) β story + 85 top-level comments with reply_counts
2. Agent picks Comment A (47 replies)
3. get_comment_tree(comment_a_id) β full 47-reply subtree
4. Agent summarizes branch, picks next
Or for smaller threads, just get_thread(id, depth=-1) to get the entire tree at once.
Getting started
Standard config works in most tools:
{
"mcpServers": {
"hn": {
"command": "uvx",
"args": ["hn-mcp"]
}
}
}
Claude Code
claude mcp add hn -- uvx hn-mcp
Add --scope user to make it available in all projects.
Claude Desktop
Follow the MCP install guide, use the standard config above.
Cursor
Add to your Cursor MCP config (~/.cursor/mcp.json):
{
"mcpServers": {
"hn": {
"command": "uvx",
"args": ["hn-mcp"]
}
}
}
Windsurf
Follow the Windsurf MCP documentation, use the standard config above.
VS Code / Copilot
Add to your VS Code MCP config (.vscode/mcp.json):
{
"mcpServers": {
"hn": {
"command": "uvx",
"args": ["hn-mcp"]
}
}
}
From source
If you want to run from a local clone instead:
claude mcp add hn -- uv run --directory /absolute/path/to/news-ycombinator-mcp hn-mcp
Prerequisites
- Python 3.12+
- uv (provides
uvx)
Tools
| Tool | Description | Key Inputs | Returns |
|---|---|---|---|
get_thread | Fetch a story and its comment tree | story_id, depth (0=story only, 1=top-level, N=N levels, -1=full tree) | Story metadata + pruned comment tree |
get_comment_tree | Dive into a specific comment's reply subtree | comment_id, depth (default: -1, full subtree) | Comment + nested replies |
get_stories | Browse HN by category | category (top, new, ask_hn, show_hn), count | List of story summaries |
search_stories | Full-text search for stories | query, sort_by (relevance/date), count, page | Paginated story results |
search_comments | Full-text search for comments | query, sort_by, story_id, author, count, page | Paginated comment results |
get_user | Fetch a user profile | username | Username, karma, about, created date |
Depth parameter
The depth parameter on get_thread and get_comment_tree controls how much of the tree you get:
depth=0 (no comments β story metadata only)
depth=1 Comment A (reply_count=3) β just the comment + count
depth=2 Comment A β comment + direct replies
βββ Reply A1 (reply_count=2)
βββ Reply A2 (reply_count=0)
βββ Reply A3 (reply_count=1)
depth=-1 Full tree, no pruning
Development
git clone https://github.com/tomwojcik/news-ycombinator-mcp
cd news-ycombinator-mcp
make venv
make install
Run tests
make test
Tests use vcrpy cassettes β no network calls needed. Coverage is reported automatically.
Re-record cassettes
If the Algolia API response format changes:
# In tests/conftest.py, temporarily change record_mode to "new_episodes"
uv run pytest
# Then change it back to "none"
Project structure
src/hn_mcp/
βββ app.py # FastMCP instance + tree pruning helpers
βββ client.py # HNClient β async Algolia API client
βββ server.py # Entrypoint
βββ types.py # TypedDict definitions for all responses
βββ tools/
βββ get_thread.py
βββ get_comment_tree.py
βββ get_stories.py
βββ search_stories.py
βββ search_comments.py
βββ get_user.py
License
MIT β see LICENSE.
Contributing
Contributions welcome. Please open an issue first to discuss what you'd like to change.
When submitting a PR:
- Add tests for new functionality
- Record VCR cassettes for any new API calls
- Ensure
uv run pytestpasses with 100% coverage
