hn-developer-sentiment-mcp について
hn-developer-sentiment-mcpは、Hacker News上のブランド、ツール、トピックに関する議論を分析します。プロダクトチーム、DevRel、エージェント向けに、決定論的な感情分析やテーマ抽出、機能要望の分類を行い、照合した投稿も返します。
主な機能
- 01感情と言及数のサマリー
- 02言及の検索と個別スコア
- 03機能要望と課題の分類
- 04トレンド記事のランキング
- 05生データ付きの決定論的分析
活用シーン
- 01製品発表への開発者の反応を確認
- 02ツールやリリースの評判を追跡
- 03繰り返し挙がる要望や課題を発見
MCP 対応
Streamable HTTP経由で、感情サマリー、言及検索、機能要望、トレンド議論の4つのツールを提供します。APIキーなしでHacker News Algolia 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 の開発者の感情を、あらゆるブランド、ツール、ライブラリについて確定的に把握できます — HN のストーリーとコメントにおける感情、言及数、繰り返し現れるテーマ、機能リクエストを、エージェントから呼び出せる4つの MCP ツールとして提供します。差別化要因は、生のデータへのアクセスではなく、判断と集約です。公開されている HN の議論をスコアリング、クラスタリング、分析するため、AI エージェントは1回の呼び出しでアクションにつなげられます。また、集計値とともに一致した生の項目も返すため、すべての数値を監査できます。
セットアップ不要 — API キーも不要です。 Hacker News(Algolia)API は公開されているため、この Actor は起動後すぐにデータを返します。認証情報も、承認待ちのキューも、初回実行時の手間もありません。
分析レイヤーに LLM は使用しません。感情分析には、透明性のある辞書とルールを組み合わせたスコアラーを使うため、同じ投稿には常に同じ結果が返ります。
どのような方に向けたものですか?
- 比較記事、ローンチ投稿、サポート返信を作成する前に、開発者が製品をどう感じているかを1回の呼び出しで把握する必要があるAI エージェント。
- Hacker News のユーザーの間で、ツール、フレームワーク、リリースがどのように受け止められているかを追跡するDevRel チームやプロダクトチーム。
- 開発者が公開の場で実際に何を話しているかをもとに、ポジショニングを検証する創業者やマーケター。
Hacker News Developer Sentiment を使う理由
- セットアップ不要 — API キーもログインも承認プロセスも必要ありません。デプロイして呼び出すだけです。
- 1回の呼び出しで、すぐに活用できる回答 — 感情ラベル、ネットスコア、件数、主なテーマ、代表的なサンプルを、1つの構造化されたレスポンスで取得できます。
- 確定的で監査可能 — モデルの温度設定による変動も、呼び出しごとの揺らぎもありません。同じ投稿と同じ設定なら、常に同じ出力が返されます。集計値とともに生の項目も提供されます。
- エージェント向けに構築 — Streamable HTTP トランスポートを使用する Standby MCP サーバーなので、あらゆる MCP クライアントが接続して直接呼び出せます。
- 低コストで高速 — クエリごとに HN のペイロードを1つ取得し、キャッシュしてクエリツール間で共有します。分析処理に LLM のコストはかかりません。
Hacker News Developer Sentiment の使い方
- Actor をデプロイします — Apify 上で Standby モードで実行します。入力なしで起動し、すぐにデータを返します。
- Streamable HTTP トランスポートを使用して、MCP クライアントを Standby エンドポイント(
https://<your-standby-url>/mcp)に接続します。 query(ブランド、ツール、トピック)を指定してget_sentiment_summaryを呼び出し、概要を確認します。- 詳細が必要な場合は、
search_mentions、get_feature_requests、get_trending_discussionsを使って掘り下げます。クエリツール間で、クエリごとに同じキャッシュ済みペイロードを共有します。
4つのツール
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 はエンゲージメントが最も高い3つの項目です。topThemes はストップワードとクエリ語を除外した単語・2語フレーズを、出現頻度順に並べたものです。
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 | 1 回の呼び出しで取得する項目数の上限です。呼び出しごとの limit はこの値に制限されます(10~250)。 |
出力
各ツールは、構造化された JSON オブジェクトを 1 つ返します(上記の各ツールの例を参照)。レスポンスは決定論的です。同じ投稿と同じ設定からは、常に同じ結果が生成されます。すべてのレスポンスには、元となる Hacker News ペイロードの取得時刻を示す fetchedAt タイムスタンプが含まれます。キャッシュから読み込む場合、TTL の期間中は同じペイロード(およびタイムスタンプ)が返されます。
データフィールドのリファレンス
| フィールド | 説明 |
|---|---|
netSentiment | 該当項目の複合センチメントの平均値。範囲は [-1, 1] です |
sentimentLabel | Positive/Neutral/Negative。±0.05 を基準に分類されます |
breakdown | Positive/Neutral/Negative の項目数 |
mentionVolume | 期間内の該当項目数 |
topThemes | 頻出するユニグラム/バイグラム(ストップワードとクエリ語を除外) |
topSamples | 該当項目のうち、エンゲージメントが最も高い 3 件 |
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 データは 1 回だけ取得され、キャッシュ(デフォルト 20 分)され、クエリを扱う各ツール間で共有されるため、同じクエリに対して複数のツールを呼び出しても、上流へのデータ取得は 1 回分の費用で済みます。分析には 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 へ 1 回リクエストし、取得した生データ項目をキャッシュします。
- HTML に近い形式で届く HN のテキストからタグを除去してデコードした後、純粋な分析関数で感情をスコアリングし(語彙セット + 否定・強調・絵文字のルール)、集計、テーマの抽出、機能リクエストの手がかりの抽出、ランキングを行います。追加のネットワーク呼び出しはありません。
- 該当する期間を指定された日数に正確に絞り込み、集計結果、生データ項目、
fetchedAtを含むツールの構造化された結果を MCP クライアントに返します。
すべての分析は決定論的で、時刻を注入しているため、ネットワークなしでテストできます。一時的なエラー(ネットワークの瞬断、5xx)は上限付きのバックオフで再試行し、レート制限(429)が発生した場合は、呼び出し元が対処できるよう resetAt を返します。
相性の良いサービス
エージェントに特化した Apify Actor の小規模なコレクションの一部です。
- GitHub Repo Intelligence MCP — 5 つの MCP ツールで、あらゆる GitHub リポジトリの保守性について、独自の見解に基づく評価を提供します。
- SERP Topic Gap Monitor — 検索結果の網羅状況におけるトピックの抜けを検出し、スコア付きのギャップレポートを作成します。
- Docs MCP Server — AI アシスタントがフレームワークのドキュメントを検索できるようにする MCP サーバーです。
よくある質問とサポート
API キーやアカウントは必要ですか? いいえ。Hacker News(Algolia)検索 API は公開されているため、Actor はセットアップ不要で起動し、データを返します。
感情分析に LLM を使っていますか? いいえ。感情分析は、透明性のある語彙セットとルールに基づくスコアリングです(否定、強調、絵文字、VADER 形式の正規化)。分析レイヤーではモデルを使用しないため、すべての呼び出しが決定論的で監査可能です。
コメントも読み取りますか? それとも記事だけですか?
デフォルトでは両方です。HN の意見はコメントに多く見られます。channels 引数を使うと、特定の投稿タイプに絞り込めます。
出力は安定していますか? はい。同じ項目と同じ設定であれば、常に同じ集計結果が得られます。また、監査のために、該当する生データ項目も併せて返されます。
レート制限のメッセージが返されました。どうすればよいですか?
Hacker News のレート制限(429)が発生すると、resetAt のタイムスタンプが返されます。その時刻以降に再試行してください。バッチ処理時に cacheTtlMinutes を大きくすると、上流への呼び出しを減らせます。
バグを見つけた場合や、機能をリクエストしたい場合は? Actor の Issues タブで issue を作成してください。ご要望に応じてカスタム版も提供できます。
謝辞
感情分析の語彙セットは VADER(Hutto, C.J. & Gilbert, E.E., 2014)を拡張したもので、MIT ライセンスの下で使用しています。Hacker News のデータは Algolia HN Search API を利用しています。
ライセンス
Copyright © 2026 Joe Slade.
GNU Affero General Public License v3.0(AGPL-3.0)の下でライセンスされています。このソフトウェアは自由に使用、調査、変更、セルフホストできます。変更版をネットワークサービスとして運用する場合、AGPL により、同じライセンスの下で変更したソースコードを利用者に提供する必要があります。AGPL のネットワークコピーレフト条項が適用されない商用ライセンスについては、作者にお問い合わせください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。