关于 hn-tech-signal-mcp
hn-tech-signal-mcp 是面向关注科技与 AI 动态的 AI 助手的 MCP 服务,将公开研究、开发者讨论、精选科技内容和 GitHub 活动汇总为简报。它提供八种工具,既可查询各数据源,也可生成跨源摘要。
主要功能
- 01获取 arXiv 最新论文并搜索论文
- 02查询 HackerNews 信息流、搜索和讨论
- 03按标签筛选 Lobste.rs 故事
- 04搜索 GitHub AI 仓库
- 05生成跨源 Markdown 简报
- 06支持 stdio 和 Streamable HTTP 传输
适用场景
- 01对照查看近期 AI 研究与开发者讨论
- 02搜索 HackerNews 历史内容并查看讨论观点
- 03按 AI 主题查找活跃的 GitHub 仓库
- 04生成综合科技动态简报
MCP 相关
向 MCP 客户端提供八种工具,用于查询 arXiv、HackerNews、Lobste.rs 和 GitHub,并生成综合简报。支持 stdio 和 Streamable HTTP 传输。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
🇨🇭 属于瑞士公共数据 MCP 组合
📡 hn-tech-signal-mcp
面向全球科技与 AI 信号情报的 MCP 服务——汇总 HackerNews、arXiv、Lobste.rs 和 GitHub 的信息,生成结构化简报。无需 API 密钥。
演示
概述
hn-tech-signal-mcp 可将任何 AI 助手变成主动的科技情报分析师。该服务汇总四个信号层——研究前沿、开发者讨论、精选信号和开源实践——生成一份结构化简报。
无需身份验证。 所有四个数据源都是公共 API。可选:设置 GITHUB_TOKEN,以获得更高的 GitHub 速率限制(已验证时为每小时 5,000 次请求,未验证时为每小时 60 次)。
示例查询: “给我一份今天的 AI 科技信号摘要——研究、开发者讨论和开源领域正在发生什么?”
信号架构
FRONTIER arXiv API → Latest AI/ML papers (cs.AI, cs.LG, cs.CL, cs.CV)
DISCOURSE HackerNews → Six feeds + Algolia search + comment threads
Lobste.rs → Curated, lower-noise tech signal
PRACTICE GitHub Search → What engineers are actually building right now
HN Show HN → What individuals are shipping this week
可以把这四个层面想象成雷达:arXiv 展示即将出现的新动向,HN 和 Lobste.rs 展示从业者正在讨论的内容,而 GitHub 则展示团队实际交付的成果。
在讨论层中,内容深度分为两个级别。信息流和搜索会告诉你讨论了什么;hn_discussion 则会告诉你实际争论的内容——包括反方论点,以及那些承载真正信号的“我们在生产环境中试过了”式回复。
功能
- 🔬 研究前沿 – 按类别(cs.AI、cs.LG、cs.CL 等)查看 arXiv 最新论文
- 🔍 arXiv 全文搜索 – 按关键词、标题或作者查找论文
- 🗣️ HackerNews 信息流 – 热门、最佳、最新、Ask HN、Show HN 和 YC 招聘信息
- 🔎 HackerNews 搜索 – 通过 Algolia 搜索完整历史记录,并支持日期范围筛选
- 💬 HackerNews 评论串 – 阅读故事下方的实际讨论,展示嵌套评论,并设置有限的获取预算
- 🔧 Lobste.rs 热门内容 – 精选开发者信号,可按标签筛选
- 🛠️ GitHub 热门 AI 仓库 – 按主题和星标搜索,并按活跃度或受欢迎程度排序
- 📋 科技信号摘要 – 一次调用即可生成跨来源的 Markdown 简报
- ☁️ 双传输方式 – 为 Claude Desktop 提供 stdio,为云端部署提供 Streamable HTTP
| # | 工具 | 来源 | 描述 |
|---|---|---|---|
| 1 | hn_top_stories | HackerNews | 六种信息流:top/best/new/ask/show/job,支持按分数筛选 |
| 2 | hn_search | HN Algolia | 搜索 HN 的完整历史记录 |
| 3 | hn_discussion | HackerNews | 故事下方的嵌套评论串 |
| 4 | arxiv_latest | arXiv | 按类别查看最新论文(如 cs.AI) |
| 5 | arxiv_search | arXiv | 按关键词/标题/作者搜索论文 |
| 6 | lobsters_hot | Lobste.rs | 精选科技故事,可按标签筛选 |
| 7 | github_trending_ai | GitHub | 按主题和星标查看热门 AI 仓库 |
| 8 | tech_signal_digest | 所有来源 | 汇总生成 Markdown 简报 |
HackerNews 源
| 源 | 内容 | 上游数量 |
|---|---|---|
top | 当前排名靠前的首页内容 | 500 条 |
best | 最近获得最多投票的故事 | 200 条 |
new | 最新提交的内容,不作筛选 | 500 条 |
ask | Ask HN——从业者遇到的难题 | 约 30 条 |
show | Show HN——大家正在推出的内容 | 200 条 |
job | YC 投资组合公司的招聘信息(type: "job",无评论,分数始终为 1) | 约 30 条 |
ask 和 job 是上游的短源,因此较大的 limit 可能返回少于请求数量的故事。
前提条件
- Python 3.11+
uv或pip- 无需 API 密钥
- 可选:用于提高 GitHub 速率限制的
GITHUB_TOKEN
安装
# Recommended: uvx (no install step needed)
uvx hn-tech-signal-mcp
# Alternative: pip
pip install hn-tech-signal-mcp
快速入门
# Start the server (stdio mode for Claude Desktop)
uvx hn-tech-signal-mcp
# With optional GitHub token for higher rate limits
GITHUB_TOKEN=ghp_yourtoken uvx hn-tech-signal-mcp
在 Claude Desktop 中立即尝试:
“为我整理一份今天 AI 领域的技术动态摘要” “最近 48 小时有哪些最新的 cs.AI 论文?” “本周 HackerNews 上在讨论 MCP 的什么内容?” “为我展示主题 ‘ai-agents’ 的热门 GitHub 仓库”
配置
环境变量
| 变量 | 默认值 | 说明 |
|---|---|---|
GITHUB_TOKEN | – | 可选。GitHub 个人访问令牌。不使用时:每小时 60 次请求。使用时:每小时 5,000 次请求。令牌只会发送到 api.github.com,不会发送到其他上游服务。 |
MCP_TRANSPORT | stdio | 传输方式:stdio 或 streamable_http |
MCP_HOST | 127.0.0.1 | HTTP 传输的绑定主机。非回环地址需要设置 MCP_BEARER_TOKEN。 |
MCP_PORT | 8000 | HTTP 传输的端口 |
MCP_BEARER_TOKEN | – | 当 MCP_HOST 不是回环地址时为必填项。用于保护 HTTP 端点的共享密钥。 |
Claude Desktop 配置
{
"mcpServers": {
"hn-tech-signal": {
"command": "uvx",
"args": ["hn-tech-signal-mcp"],
"env": {
"GITHUB_TOKEN": "ghp_yourtoken_optional"
}
}
}
}
配置文件位置:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
重启 Claude Desktop 后,即可使用全部 7 个工具。
云端部署(Streamable HTTP)
用于在浏览器中通过 claude.ai 使用(例如在受管理的工作站上):
Render.com(推荐):
- 将仓库推送到 GitHub 或 Fork 仓库
- 在 render.com 上:New Web Service → 连接 GitHub 仓库
- 可选:在 Render 控制面板中设置
GITHUB_TOKEN - 在 claude.ai 的 Settings → MCP Servers 下,添加:
https://your-app.onrender.com/mcp
# Local HTTP mode (binds 127.0.0.1 by default)
MCP_TRANSPORT=streamable_http MCP_PORT=8000 python -m hn_tech_signal_mcp.server
# Public bind (requires bearer token, intended behind a reverse proxy that terminates TLS)
MCP_TRANSPORT=streamable_http \
MCP_HOST=0.0.0.0 \
MCP_BEARER_TOKEN="$(openssl rand -hex 32)" \
python -m hn_tech_signal_mcp.server
**安全加固:**除非设置了
MCP_BEARER_TOKEN,否则服务会拒绝绑定到非回环主机。 云端部署应置于终止 TLS 的反向代理(Render、Fly、Caddy 等)之后,并将MCP_BEARER_TOKEN视为由代理强制执行的客户端共享密钥。
架构
┌─────────────────┐ ┌─────────────────────────────────┐ ┌───────────────────────┐
│ Claude / AI │────▶│ HN Tech Signal MCP │────▶│ HackerNews Firebase │
│ (MCP Host) │◀────│ (MCP Server) │────▶│ HN Algolia Search │
└─────────────────┘ │ │────▶│ arXiv.org (Atom API) │
│ 8 Tools │────▶│ Lobste.rs JSON API │
│ Stdio | Streamable HTTP │────▶│ GitHub Search API │
└─────────────────────────────────┘ └───────────────────────┘
架构决策
此服务采用架构 A(仅实时 API,每个来源有两条路径)。没有可供回退的批量数据转储。
理由(已于 2026-07-28 针对官方 HackerNews API进行实时验证):
- 六个源端点(
{top,best,new,ask,show,job}stories.json)均返回 HTTP 200,包含 29–500 个 ID。无需身份验证,没有速率限制标头,Cache-Control: no-cache。 - HackerNews 不发布批量导出数据,因此缓存完全由此服务负责。TTL 配置在
CACHE_TTL中。 - Firebase API 不支持搜索。历史查询和全文查询改用 Algolia 索引——这是第二条路径,由
hn_search使用。 item/<id>.json每个条目都需要单独请求。因此,源和评论串都会产生并发请求,这也是两者均设有上限(HN_MAX_CONCURRENCY、max_comments)的原因。
影响:
- 每次上游调用在网络错误、5xx 和 429 状态码时都会以指数退避方式重试(2 秒 / 4 秒 / 8 秒)。其他 4xx 错误会立即失败。
- 整个进程共用一个连接池化的
httpx.AsyncClient,并通过 FastMCP 生命周期关闭。 - 未知条目 ID 返回 HTTP 200 和
null响应体,而非 404——hn_discussion会将其转换为明确的“未找到条目”消息。
项目结构
hn-tech-signal-mcp/
├── src/
│ └── hn_tech_signal_mcp/
│ ├── __init__.py
│ ├── server.py # All 8 tools
│ └── outputs.py # outputSchema models, one per tool
├── tests/
│ ├── __init__.py
│ └── test_server.py # 64 unit + 12 live tests
├── pyproject.toml
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md # This file (English)
└── README.de.md # German version
MCP Protocol Version
此服务在同一端点上支持两个协议时代。客户端在连接上的第一个请求决定采用哪一个;之后若声称属于另一个时代,将被拒绝。
| 时代 | 修订版 | 适用客户端 |
|---|---|---|
initialize 握手 | 2024-11-05 … 2025-11-25 | 当前客户端使用的协议。服务会以请求指定的修订版作答;如果请求的版本更新,则使用 2025-11-25 这一上限。 |
| 每请求封装 | 2026-07-28 | 携带 2026-07-28 _meta 封装的请求会建立现代连接。 |
这两个修订版都固定在
tests/test_protocol_version.py 中,并会与已安装的 SDK 对照验证,因此 Dependabot 更新 mcp 时不会悄然更改其中任何一个版本。
不仅是声明支持:tests/test_modern_era.py
会实际建立连接——在每个时代(2026-07-28、auto、legacy)中进行进程内测试,并通过 HTTP 发送单个 POST 请求,不使用 initialize 和 Mcp-Session-Id,测试对象是由 MCP_TRANSPORT=streamable_http 启动的 ASGI 应用。测试会检查
server/discover、带有新鲜度提示的 tools/list、带有 Mcp-Name 标头的 tools/call、每个响应 _meta 中的 serverInfo 标记,以及不涉及 SEP-2577 已弃用的任何功能(sampling、roots、logging)。此外还有两个负向对照:错误的 Mcp-Method 标头会被拒绝,并返回 -32020;同一请求在 2025-11-25 下仍需要会话。
已知的 SDK 侧行为:server/discover 会公布 resources 和 prompts(带有 listChanged / subscribe),尽管此服务并未注册其中任何一项——MCPServer 始终会安装这些处理程序。关闭此行为就必须改动私有属性;因此,测试会验证这两个列表均能无错误地返回空结果。
请注意,SDK 的 LATEST_PROTOCOL_VERSION 是现代时代的别名,而不是握手时代的别名——若只针对它固定版本,当前客户端实际协商的时代就会任其漂移。
更新策略。 当检查失败时,不要盲目修改常量:阅读两个修订版之间的规范变更日志,确认服务行为仍然正常,然后同时更新常量、本节、README.de.md 和 CHANGELOG.md。
工具输出
每个工具都根据 src/hn_tech_signal_mcp/outputs.py 中的模型声明自己的 outputSchema(封闭模式:additionalProperties: false),并以规范区分的三种形式之一作答:
| 情况 | content[0].text | structuredContent | isError |
|---|---|---|---|
| 成功 | 美化格式的 JSON 对象 | 同一对象 | false |
| 来源失败 | [Source] Error: … | — | true |
未知或错误的 ID(hn_discussion) | 说明应改为传入什么内容的句子 | — | true |
| 部分来源不可用的摘要 | 包含 degraded_sources 和各来源 error 的 JSON 对象 | 同一对象 | false |
此前,SDK 会根据 -> str 注解推导出 {"result": string} 模式,因此结构化客户端会将 JSON 当作一个字符串字段接收,而所有失败都以 isError: false 返回。
文本内容与之前逐字节保持一致——只读取文本的客户端不会有任何变化。若响应不符合其模式,系统会将其报告为服务端缺陷,并指出出错的字段路径(绝不包含字段值),而不会未经验证就传给客户端。已记录的测试固件和每日实时运行都会在两个协议时代中经过此路径。
测试
# Unit tests (no network required)
PYTHONPATH=src pytest tests/ -m "not live"
# Live integration tests (requires network)
PYTHONPATH=src pytest tests/ -m "live"
示例用例
KI-Fachgruppe / AI 工作组
"Give me a tech signal digest on AI today"
→ tech_signal_digest(focus="AI")
"What are the top 5 arXiv papers on LLM agents this week?"
→ arxiv_search(query="LLM agents", category_filter="cs.AI", limit=5)
"What is HackerNews discussing about model context protocol?"
→ hn_search(query="model context protocol", days_back=30)
研究监测
"Show me the latest NLP papers from arXiv"
→ arxiv_latest(category="cs.CL", limit=10)
"Search arXiv for papers on retrieval-augmented generation"
→ arxiv_search(query="retrieval augmented generation RAG", limit=10)
开源情报
"What AI agent frameworks are trending on GitHub?"
→ github_trending_ai(topic="ai-agents", sort="updated", limit=10)
"Show me the most starred MCP-related repos"
→ github_trending_ai(topic="mcp", sort="stars", min_stars=50)
[→ More use cases by audience →](EXAMPLES.md)
arXiv 类别参考
| 类别 | 全称 | 主要主题 |
|---|---|---|
cs.AI | 人工智能 | Agent、规划、知识表示 |
cs.LG | 机器学习 | 训练、优化、泛化 |
cs.CL | 计算与语言 | NLP、大模型、翻译、摘要 |
cs.CV | 计算机视觉 | 图像识别、生成、多模态 |
cs.RO | 机器人学 | 具身 AI、导航 |
stat.ML | 统计机器学习 | 概率方法、贝叶斯机器学习 |
速率限制
| 来源 | 是否需要身份验证 | 限制 |
|---|---|---|
| HackerNews Firebase | 否 | 非常宽松(Firebase) |
| HN Algolia Search | 否 | 约 10,000 次请求/小时 |
| arXiv | 否 | 约 3 次请求/秒(请合理使用) |
| Lobste.rs | 否 | 合理使用 |
| GitHub Search | 否 | 60 次请求/小时 |
| GitHub Search | GITHUB_TOKEN | 5,000 次请求/小时 |
已知限制
- GitHub 速率限制:未使用令牌时为 60 次请求/小时。生产环境请设置
GITHUB_TOKEN。 - arXiv:论文提交后最多可能需要 24 小时才会显示。周末和节假日的批次会延迟。
- HackerNews:热门/最佳故事列表每隔几分钟更新一次。非常新的故事可能得分较低。
- HackerNews
ask/job源:上游只有约 30 条内容,因此较大的limit返回的故事数可能少于请求数。招聘帖带有type: "job",没有评论数,得分为 1。 hn_discussion始终只返回样本,而非完整讨论串:上游每条评论都需要一次请求,因此无法完整获取评论数很多(900 条以上)的热门故事。请求预算会按嵌套层级分配,并在同级讨论串之间轮流分配,因此返回的是有代表性的内容截面,而非某个子讨论串的完整内容。请检查truncated标志。hn_discussion的评论文本为纯文本,而非 HTML:为便于阅读,HN 的标记已被剥除。请勿将输出重新渲染为 HTML——此转换并非消毒处理。- Lobste.rs:社区规模小于 HN;内容聚焦技术,但未必涵盖所有 AI 主题。
- tech_signal_digest:会发起约 4 个并发请求;如果某个来源响应缓慢,可能会延迟整个响应。
与其他 MCP 服务的协同
hn-tech-signal-mcp 可与以下服务很好地配合:
| 组合 | 使用场景 |
|---|---|
+ news-monitor-mcp | 全球研究 + 瑞士机构媒体报道 |
+ fedlex-mcp | 技术讨论 + 瑞士监管背景 |
+ global-education-mcp | AI 研究趋势 + 教育政策数据 |
+ swiss-statistics-mcp | 技术格局 + 瑞士经济/结构数据 |
安全与限制
- **只读:**所有工具仅执行 HTTP GET 请求——不会向上游发布帖子、评论、投票或写入数据。
- **不涉及个人数据:**该服务会查询公开的技术聚合平台。不收集 PII;公开帖子/论文中的作者用户名按上游原样返回,不会进行补充或交叉引用。
- **速率限制:**请参阅速率限制表。默认遵守 arXiv 每秒不超过 3 次请求的指导要求;未使用
GITHUB_TOKEN时,GitHub 搜索限制为 60 次请求/小时。每次调用都会强制执行请求超时。 - **不进行批量抓取:**此服务专为交互式对话场景构建,不用于抓取或镜像数据。请勿用它绕过上游分页或服务条款限制。
- **服务条款:**数据受各来源的服务条款约束——HackerNews、arXiv API、Lobste.rs、GitHub。
- **不作保证:**这是社区项目,与 HackerNews / Y Combinator、arXiv / Cornell、Lobste.rs 或 GitHub 均无关联。服务可用性取决于上游 API。
更新日志
请参阅 CHANGELOG.md
参与贡献
请参阅 CONTRIBUTING.md(Deutsch)。
安全性
有关安全状况及如何报告漏洞,请参阅 SECURITY.md(Deutsch)。
许可证
MIT 许可证 — 参见 LICENSE
作者
Hayal Oezkan · malkreide
致谢与相关项目
- HackerNews API:hacker-news.firebaseio.com — Y Combinator / Firebase
- arXiv API:export.arxiv.org — Cornell University / arXiv.org
- Lobste.rs API:lobste.rs — 由社区运营
- GitHub API:api.github.com — GitHub / Microsoft
- 协议:Model Context Protocol — Anthropic / Linux Foundation
- 相关项目:news-monitor-mcp — 瑞士机构媒体监测
- 作品集:Swiss Public Data MCP Portfolio
安装
通过 uv 的 uvx 运行 — 无需克隆或手动安装。将其添加到 MCP 客户端配置中(Claude Desktop、Cursor 和 Windsurf 使用 mcpServers;VS Code 在 .vscode/mcp.json 中使用顶层 servers 键):
{
"mcpServers": {
"hn-tech-signal-mcp": {
"command": "uvx",
"args": [
"hn-tech-signal-mcp"
]
}
}
}
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。