mcpField
H
hn-developer-sentiment-mcp

hn-developer-sentiment-mcp

リモート
github.com/digitalgremlinデータ・分析114 週間前に更新
リポジトリ

hn-developer-sentiment-mcp について

hn-developer-sentiment-mcpは、Hacker News上のブランド、ツール、トピックに関する議論を分析します。プロダクトチーム、DevRel、エージェント向けに、決定論的な感情分析やテーマ抽出、機能要望の分類を行い、照合した投稿も返します。

主な機能

  1. 01感情と言及数のサマリー
  2. 02言及の検索と個別スコア
  3. 03機能要望と課題の分類
  4. 04トレンド記事のランキング
  5. 05生データ付きの決定論的分析

活用シーン

  1. 01製品発表への開発者の反応を確認
  2. 02ツールやリリースの評判を追跡
  3. 03繰り返し挙がる要望や課題を発見

MCP 対応

Streamable HTTP経由で、感情サマリー、言及検索、機能要望、トレンド議論の4つのツールを提供します。APIキーなしでHacker News Algolia APIを検索します。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://joeslade--hn-developer-sentiment-mcp.apify.actor/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、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 の使い方

  1. Actor をデプロイします — Apify 上で Standby モードで実行します。入力なしで起動し、すぐにデータを返します。
  2. Streamable HTTP トランスポートを使用して、MCP クライアントを Standby エンドポイント(https://<your-standby-url>/mcp)に接続します。
  3. query(ブランド、ツール、トピック)を指定して get_sentiment_summary を呼び出し、概要を確認します。
  4. 詳細が必要な場合は、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 に認証情報は不要です。以下のフィールドはすべて省略可能です。

フィールド型デフォルト説明
defaultChannelsarray["story","ask_hn","show_hn","comment"]ツール呼び出しで個別に指定されない場合に検索する HN の投稿タイプです。使用できる値:story、ask_hn、show_hn、comment。
windowDaysinteger30デフォルトの遡及期間(日数)です(1~90)。
cacheTtlMinutesinteger20再取得するまでクエリの取得済みペイロードを再利用する時間です(1~240)。
maxItemsinteger1001 回の呼び出しで取得する項目数の上限です。呼び出しごとの limit はこの値に制限されます(10~250)。

出力

各ツールは、構造化された JSON オブジェクトを 1 つ返します(上記の各ツールの例を参照)。レスポンスは決定論的です。同じ投稿と同じ設定からは、常に同じ結果が生成されます。すべてのレスポンスには、元となる Hacker News ペイロードの取得時刻を示す fetchedAt タイムスタンプが含まれます。キャッシュから読み込む場合、TTL の期間中は同じペイロード(およびタイムスタンプ)が返されます。

データフィールドのリファレンス

フィールド説明
netSentiment該当項目の複合センチメントの平均値。範囲は [-1, 1] です
sentimentLabelPositive/Neutral/Negative。±0.05 を基準に分類されます
breakdownPositive/Neutral/Negative の項目数
mentionVolume期間内の該当項目数
topThemes頻出するユニグラム/バイグラム(ストップワードとクエリ語を除外)
topSamples該当項目のうち、エンゲージメントが最も高い 3 件
sentimentScore項目ごとの複合センチメント。範囲は [-1, 1] です
channelHN の投稿タイプ: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 日)ください。

仕組み

  1. MCP クライアントが query を指定してツール呼び出し(例:get_sentiment_summary)を送信します。
  2. サーバーはメモリ内の LRU + TTL キャッシュを確認します。キャッシュにない場合、選択したチャンネルを対象に、公開されている Hacker News(Algolia)検索 API へ 1 回リクエストし、取得した生データ項目をキャッシュします。
  3. HTML に近い形式で届く HN のテキストからタグを除去してデコードした後、純粋な分析関数で感情をスコアリングし(語彙セット + 否定・強調・絵文字のルール)、集計、テーマの抽出、機能リクエストの手がかりの抽出、ランキングを行います。追加のネットワーク呼び出しはありません。
  4. 該当する期間を指定された日数に正確に絞り込み、集計結果、生データ項目、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 のネットワークコピーレフト条項が適用されない商用ライセンスについては、作者にお問い合わせください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。