hn-mcp
MCP server enabling AI agents to interact with Hacker News, including fetching full comment trees with depth control, searching stories and comments, and retrieving user profiles.
README
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"]
}
}
}
<details> <summary>Claude Code</summary>
claude mcp add hn -- uvx hn-mcp
Add --scope user to make it available in all projects.
</details>
<details> <summary>Claude Desktop</summary>
Follow the MCP install guide, use the standard config above.
</details>
<details> <summary>Cursor</summary>
Add to your Cursor MCP config (~/.cursor/mcp.json):
{
"mcpServers": {
"hn": {
"command": "uvx",
"args": ["hn-mcp"]
}
}
}
</details>
<details> <summary>Windsurf</summary>
Follow the Windsurf MCP documentation, use the standard config above.
</details>
<details> <summary>VS Code / Copilot</summary>
Add to your VS Code MCP config (.vscode/mcp.json):
{
"mcpServers": {
"hn": {
"command": "uvx",
"args": ["hn-mcp"]
}
}
}
</details>
<details> <summary>From source</summary>
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
</details>
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
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。