关于 hn-developer-sentiment-mcp
hn-developer-sentiment-mcp 分析 Hacker News 上关于品牌、工具或主题的讨论,面向产品团队、DevRel 和 Agent。它结合确定性情感评分、主题提取和功能请求挖掘,并返回匹配原文以便核查。
主要功能
- 01情感与提及量摘要
- 02逐条搜索提及并评分
- 03归类功能请求与痛点
- 04热门讨论排名
- 05确定性分析并返回原始结果
适用场景
- 01了解产品发布后的开发者反馈
- 02跟踪工具或版本的舆情
- 03发现反复出现的请求和痛点
MCP 相关
该 MCP 服务通过 Streamable HTTP 提供四种工具,用于情感摘要、提及搜索、功能请求和热门讨论。它查询 Hacker News Algolia API,无需 API 密钥。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://joeslade--hn-developer-sentiment-mcp.apify.actor/mcpclaude mcp add --transport http digitalgremlin-hn-developer-sentiment https://joeslade--hn-developer-sentiment-mcp.apify.actor/mcp{"mcpServers":{"digitalgremlin-hn-developer-sentiment":{"type":"http","url":"https://joeslade--hn-developer-sentiment-mcp.apify.actor/mcp"}}}在 Cursor 中打开{"servers":{"digitalgremlin-hn-developer-sentiment":{"type":"http","url":"https://joeslade--hn-developer-sentiment-mcp.apify.actor/mcp"}}}在 VS Code 中打开{"mcpServers":{"digitalgremlin-hn-developer-sentiment":{"type":"http","url":"https://joeslade--hn-developer-sentiment-mcp.apify.actor/mcp"}}}{"mcpServers":{"digitalgremlin-hn-developer-sentiment":{"serverUrl":"https://joeslade--hn-developer-sentiment-mcp.apify.actor/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
开发者对你的工具的真实看法。
全面了解开发者对任意品牌、工具或库在 Hacker News 上的情绪——涵盖情绪、提及量、反复出现的主题和功能请求,并通过 四个可由 Agent 调用的 MCP 工具提供。其差异化优势在于判断与聚合,而非原始访问:它会对公开的 HN 讨论进行评分、聚类和挖掘,让 AI Agent 只需一次调用即可采取行动;同时返回原始匹配条目及聚合结果,确保每个数字都可审计。
零配置——无需 API 密钥。 Hacker News (Algolia) API 是开放的,因此此 Actor 启动后即可立即返回数据。无需凭据、审批队列,也没有首次运行的阻碍。
分析层不使用大模型——情绪评分器采用透明的词典加规则,因此相同帖子总会得出相同结果。
适用对象
- AI Agent:在撰写比较文章、发布公告或支持回复前,需要通过一次调用了解开发者对某产品的看法。
- DevRel 和产品团队:追踪工具、框架或版本在 Hacker News 社群中的反响。
- 创始人和营销人员:根据开发者在公开场合的真实言论验证产品定位。
为什么使用 Hacker News Developer Sentiment?
- 零配置——无需 API 密钥、登录或审批流程。部署后即可调用。
- 一次调用,获取可用结果——通过单个结构化响应,获得情绪标签、净评分、提及量、热门主题和代表性样本。
- 结果确定且可审计——没有模型温度,也不会因调用而波动。相同帖子加相同配置总会产生相同输出,且原始条目会与聚合结果一并返回。
- 专为 Agent 打造——Standby MCP 服务采用 Streamable HTTP 传输,因此任何 MCP 客户端都可以直接连接并调用。
- 低成本且快速——每次查询只需获取一份 HN 数据,并由查询工具共享缓存。分析流程不产生大模型成本。
如何使用 Hacker News Developer Sentiment
- 部署 Actor——在 Apify 上以 Standby 模式运行。无需输入即可启动并立即返回数据。
- 连接 MCP 客户端——使用 Streamable HTTP 传输连接到 Standby 端点(
https://<your-standby-url>/mcp)。 - 调用
get_sentiment_summary——传入query(品牌、工具或主题),获取概览。 - 深入查看——需要更多细节时,使用
search_mentions、get_feature_requests或get_trending_discussions。查询工具会按查询共享同一份缓存数据。
四个工具
query 是品牌、工具或主题字符串(例如 "prisma"、"tailwind")。channels、windowDays 和 limit 均为可选参数,未提供时将使用 Actor 配置的默认值。channels 用于选择 HN 帖子类型——story、ask_hn、show_hn、comment——默认为全部类型(帖子和评论,因为 HN 的观点都在评论中)。
get_sentiment_summary — 概览
汇总查询的情绪、提及量、热门主题和代表性样本。输入:query(必填)、channels?、windowDays?。
{
"query": "prisma",
"channelsQueried": ["story", "ask_hn", "show_hn", "comment"],
"windowDays": 30,
"mentionVolume": 52,
"netSentiment": 0.18,
"sentimentLabel": "Positive",
"breakdown": { "positive": 29, "neutral": 16, "negative": 7 },
"topThemes": [
{ "term": "type safety", "count": 15 },
{ "term": "migrations", "count": 12 },
{ "term": "query performance", "count": 7 }
],
"topSamples": [
{
"title": "Prisma 6 made our migrations painless",
"channel": "story",
"score": 312,
"url": "https://news.ycombinator.com/item?id=48800001",
"createdAt": "2026-06-02T14:11:00.000Z",
"sentiment": "Positive"
}
],
"fetchedAt": "2026-07-14T00:00:00.000Z"
}
netSentiment 是 [-1, 1] 范围内的复合评分均值;sentimentLabel 根据 ±0.05 的阈值进行分档。topSamples 是互动量最高的三条内容。topThemes 是经过停用词和查询词过滤后,按出现频率排序的 unigram/bigram。
search_mentions — 匹配条目及其各自的情绪评分
提及查询的帖子和评论,每条都经过评分,并按评分、再按时间新近程度排序。输入:query(必填)、channels?、windowDays?、limit?。
{
"query": "prisma",
"channelsQueried": ["story", "comment"],
"windowDays": 30,
"count": 2,
"items": [
{
"id": "48800001",
"title": "Prisma 6 made our migrations painless",
"excerpt": "We migrated a 40-table schema with zero downtime and the typed client caught three bugs before...",
"channel": "story",
"score": 312,
"numComments": 88,
"url": "https://news.ycombinator.com/item?id=48800001",
"createdAt": "2026-06-02T14:11:00.000Z",
"sentiment": "Positive",
"sentimentScore": 0.74
}
],
"fetchedAt": "2026-07-14T00:00:00.000Z"
}
excerpt 是截断至 280 个字符的条目文本。sentimentScore 是条目的复合评分,范围为 [-1, 1]。评论的 title 为空,且 numComments: 0。
get_feature_requests — 按类别分组的请求与痛点
表达了与查询相关的功能请求、愿望、缺失项、路线图问题或痛点的条目,按提示类别分组。输入:query(必填)、channels?、windowDays?、limit?。
{
"query": "prisma",
"channelsQueried": ["story", "ask_hn", "comment"],
"windowDays": 30,
"count": 3,
"items": [
{
"id": "48800042",
"title": "Ask HN: does Prisma support deep JSON filtering yet?",
"excerpt": "Please add deep JSON path filters to the query API.",
"cueCategory": "request",
"channel": "ask_hn",
"score": 54,
"url": "https://news.ycombinator.com/item?id=48800042",
"createdAt": "2026-06-09T18:30:00.000Z"
}
],
"byCategory": { "wish": 1, "missing": 1, "request": 1, "plans": 0, "painpoint": 0 },
"fetchedAt": "2026-07-14T00:00:00.000Z"
}
cueCategory 的取值为 request / wish / missing / plans / painpoint(按此优先级顺序匹配)。excerpt 是匹配的句子。byCategory 的总和始终等于 count。
get_trending_discussions — 互动度最高的内容(无需查询)
按互动度排列的 Hacker News 热门内容,无需查询。输入:windowDays?、limit?。
{
"channelsQueried": ["story"],
"windowDays": 7,
"count": 2,
"items": [
{
"id": "48841676",
"title": "Postgres rewritten in Rust, now passing 100% of the regression tests",
"channel": "story",
"score": 980,
"numComments": 240,
"engagement": 1220,
"url": "https://news.ycombinator.com/item?id=48841676",
"createdAt": "2026-07-12T09:02:00.000Z",
"sentiment": "Neutral"
}
],
"fetchedAt": "2026-07-14T00:00:00.000Z"
}
engagement 为 score + numComments;条目按其降序排列。热门内容以故事为单位(不包括评论——评论没有帖子互动度)。
输入
服务启动时无需输入,并会立即返回数据——Hacker News(Algolia)API 无需凭据。以下所有字段均为可选项。
| 字段 | 类型 | 默认值 | 描述 |
|---|---|---|---|
defaultChannels | array | ["story","ask_hn","show_hn","comment"] | 工具调用未指定自身类型时要搜索的 HN 帖子类型。允许值:story、ask_hn、show_hn、comment。 |
windowDays | integer | 30 | 默认回溯时间窗口,单位为天(1–90)。 |
cacheTtlMinutes | integer | 20 | 查询获取的数据在重新获取前的复用时长(1–240)。 |
maxItems | integer | 100 | 每次调用的条目数上限;每次调用的 limit 会限制在此范围内(10–250)。 |
输出
每个工具都会返回一个结构化 JSON 对象(如上方各工具所示)。响应具有确定性——相同的帖子和配置始终会产生相同的结果。每个响应都包含 fetchedAt 时间戳,表示底层 Hacker News 数据的获取时间;在此 TTL 时间窗口内读取缓存时,会返回相同的数据(和时间戳)。
数据字段参考
| 字段 | 含义 |
|---|---|
netSentiment | 匹配条目的平均复合情绪值,范围为 [-1, 1] |
sentimentLabel | 正面 / 中性 / 负面,按 ±0.05 的界限划分 |
breakdown | 正面 / 中性 / 负面条目数量 |
mentionVolume | 时间窗口内匹配条目的数量 |
topThemes | 出现频率最高的单字词 / 双字词(已过滤停用词和查询词) |
topSamples | 互动度最高的三个匹配条目 |
sentimentScore | 每个条目的复合情绪值,范围为 [-1, 1] |
channel | HN 帖子类型:story / ask_hn / show_hn / comment |
cueCategory | 功能请求类别:request / wish / missing / plans / painpoint |
byCategory | 各提示类别的功能请求条目数量 |
engagement | 故事的 score + numComments(热门内容的排序键) |
fetchedAt | 底层 Hacker News 数据的获取时间 |
定价
此 Actor 以 Standby 模式运行,并按预热和处理请求期间使用的计算资源计费。读取操作开销很低——每个查询的 HN 数据只获取一次,并进行缓存(默认 20 分钟),且由各查询工具共享,因此针对同一查询调用多个工具只需进行一次上游获取。分析流程中不使用 LLM,因此没有按次调用的模型费用;Hacker News API 也免费。
提示
- 从
get_sentiment_summary开始获取概要,仅在需要时调用详情工具——查询工具共享同一份缓存数据。 - 缩小
channels的范围(例如["ask_hn"])以聚焦征求意见的帖子,或者移除comment,只查看故事级别的信号。 - 批量处理多个查询时调高
cacheTtlMinutes;需要获取新数据时则调低。 - 延长
windowDays(最长 90 天),以获取更稳定的基线。
工作原理
- MCP 客户端发送一个带有
query的工具调用(例如get_sentiment_summary)。 - 服务会检查内存中的 LRU + TTL 缓存。若未命中,则会通过选定的频道向开放的 Hacker News (Algolia) 搜索 API 发起一次请求,并缓存原始条目。
- HN 文本(以类似 HTML 的形式返回)会先去除标签并解码,然后由纯分析函数进行情感评分(词典 + 否定词/程度词/表情符号规则)、汇总、提取主题、挖掘功能请求线索并排序——不会再发起网络请求。
- 匹配的时间范围会按确切天数筛选,随后将工具的结构化结果——汇总数据、原始条目及
fetchedAt——返回给 MCP 客户端。
所有分析都是确定性的,并且时钟可注入(无需联网即可测试)。对于瞬时错误(网络抖动、5xx),系统会采用有界退避进行重试;遇到速率限制(429)时,会返回 resetAt,供调用方处理。
搭配使用效果良好
这是面向 Agent 的一组小型 Apify Actor 的一部分:
- GitHub Repo Intelligence MCP — 通过五种 MCP 工具,对任意 GitHub 仓库给出明确的可维护性判断。
- SERP Topic Gap Monitor — 找出搜索结果覆盖中的主题空缺,并生成带评分的空缺报告。
- Docs MCP Server — 提供框架文档可查询访问能力的 MCP 服务,供 AI 助手使用。
常见问题与支持
我需要 API 密钥或账号吗? 不需要。Hacker News (Algolia) 搜索 API 是开放的,Actor 启动后无需任何设置即可返回数据。
情感分析来自大模型吗? 不是。情感分析采用透明的词典加规则评分器(否定词、程度词、表情符号、VADER 风格归一化)。分析层不使用任何模型,因此每次调用都是确定且可审计的。
它会读取评论,还是只读取帖子?
默认两者都会读取——HN 的观点主要存在于评论中。使用 channels 参数可将范围缩小到特定帖子类型。
输出是否稳定? 是。同一批条目加上相同配置总会得出相同的汇总结果,并且会同时返回匹配的原始条目,方便你审计每个数值。
它返回了速率限制消息——我该怎么办?
Hacker News 速率限制(429)会返回 resetAt 时间戳;请在该时间之后重试。批量处理时,提高 cacheTtlMinutes 可以减少上游请求。
发现了 Bug 或想要添加功能? 请在 Actor 的 Issues 标签页中提交问题。也可按需提供定制版本。
致谢
情感词典在 VADER 的基础上扩充(Hutto, C.J. & Gilbert, E.E.,2014),并依据其 MIT 许可证使用。Hacker News 数据来自 Algolia HN Search API。
许可证
版权所有 © 2026 Joe Slade。
本软件采用 GNU Affero General Public License v3.0(AGPL-3.0)授权。你可以自由使用、研究、修改和自托管本软件;如果将修改后的版本作为网络服务运行,AGPL 要求你根据相同许可证向用户提供修改后的源代码。如需不受 AGPL 网络 copyleft 条款约束的商业许可证,请联系作者。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。