mcpField
H
hn-tech-signal-mcp

hn-tech-signal-mcp

ローカル
github.com検索04 週間前に更新

hn-tech-signal-mcp について

hn-tech-signal-mcpは、技術やAIの動向を追うAIアシスタント向けのMCPサーバーです。公開研究、開発者の議論、厳選記事、GitHubの活動をまとめ、個別検索と横断ブリーフィングを行う8つのツールを提供します。

主な機能

  1. 01arXivの最新論文取得と検索
  2. 02HackerNewsのフィード、検索、議論
  3. 03タグで絞り込むLobste.rs記事
  4. 04GitHubのAIリポジトリ検索
  5. 05複数ソースのMarkdownブリーフィング
  6. 06stdioとStreamable HTTPに対応

活用シーン

  1. 01最新のAI研究と開発者の議論を確認
  2. 02HackerNewsの過去記事と議論を検索
  3. 03AI分野の活発なGitHubリポジトリを発見
  4. 04技術動向を横断したブリーフィングを作成

MCP 対応

MCPクライアント向けに、arXiv、HackerNews、Lobste.rs、GitHubを調べる8つのツールを公開します。複数ソースのブリーフィングも生成でき、stdioとStreamable HTTPに対応します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"malkreide-hn-tech-signal": {
"command": "uvx",
"args": [
"hn-tech-signal-mcp"
]
}
}
}
起動コマンドuvx hn-tech-signal-mcp

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypihn-tech-signal-mcp0.5.0

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

🇨🇭 Swiss Public Data MCP Portfolio の一部です

📡 hn-tech-signal-mcp

バージョン ライセンス:MIT Python 3.11+ MCP 認証不要 CI

HackerNews、arXiv、Lobste.rs、GitHubを集約し、体系的なブリーフィングを提供する、世界のテクノロジーとAIのシグナルインテリジェンス向けMCPサーバーです。APIキーは不要です。

🇩🇪 ドイツ語版

デモ

デモ:ClaudeがarXiv、HackerNews、GitHubを横断してtech_signal_digestを使用


概要

hn-tech-signal-mcp は、あらゆるAIアシスタントを、先を見越して分析するテクノロジーインテリジェンスアナリストに変えます。このサーバーは、研究の最前線、開発者の議論、厳選されたシグナル、オープンソースの実践という4つのシグナルレイヤーを集約し、単一の体系的なブリーフィングにまとめます。

認証は不要です。 4つのデータソースはすべて公開APIです。任意:GITHUB_TOKENを設定すると、GitHubのレート制限が引き上げられます(認証なしの場合は60件/時、設定時は5,000件/時)。

デモ用の基本クエリ: 「今日の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

4つのレイヤーをレーダーとして捉えてください。arXivは地平線の向こうから近づいてくるものを示し、HNとLobste.rsは実践者が何を議論しているかを示し、GitHubはチームが実際にリリースしているものを示します。

議論レイヤーには、深さの異なる2つの段階があります。フィードと検索でわかるのは、何が議論されているかです。hn_discussionでわかるのは、実際に何が論じられているかです。そこには、シグナルの核心を伝える反論や「本番環境で試した」という返信が含まれます。


機能

  • 🔬 研究の最前線 – カテゴリー別(cs.AI、cs.LG、cs.CLなど)の最新arXiv論文
  • 🔍 arXiv全文検索 – キーワード、タイトル、著者で論文を検索
  • 🗣️ HackerNewsフィード – トップ、ベスト、新着、Ask HN、Show HN、YCの求人投稿
  • 🔎 HackerNews検索 – Algolia経由で全履歴を検索。期間フィルター付き
  • 💬 HackerNewsのコメントスレッド – ストーリー下の実際の議論を、深さ制限付きの取得予算で入れ子形式で表示
  • 🔧 Lobste.rsの注目記事 – タグで絞り込める、厳選された開発者シグナル
  • 🛠️ GitHubでトレンドのAIリポジトリ – トピックやスター数で検索し、アクティビティまたは人気度で並べ替え
  • 📋 テクノロジーシグナルのダイジェスト – 1回の呼び出しで複数ソースを横断するMarkdownブリーフィングを作成
  • ☁️ デュアルトランスポート – Claude Desktop向けのstdioと、クラウドデプロイ向けのStreamable HTTP
#ツールソース説明
1hn_top_storiesHackerNewsスコアフィルター付きの6種類のフィード:トップ/ベスト/新着/Ask/Show/求人
2hn_searchHN AlgoliaHNの全履歴を対象とする全文検索
3hn_discussionHackerNewsストーリー下の入れ子形式のコメントスレッド
4arxiv_latestarXivカテゴリー別(cs.AIなど)の最新論文
5arxiv_searcharXivキーワード/タイトル/著者による論文検索
6lobsters_hotLobste.rsタグで絞り込める、厳選されたテクノロジー関連ストーリー
7github_trending_aiGitHubトピックとスター数で探す、トレンドのAIリポジトリ
8tech_signal_digest全ソース集約されたMarkdownブリーフィング
HackerNews フィード
フィード内容上流のサイズ
top現時点のランキングに基づくトップページ500 件
best最近の投稿のうち、最も多く投票されたストーリー200 件
newフィルタリングなしの最新投稿500 件
askAsk HN — 実践者が困っていること約 30 件
showShow HN — みんなが公開しているもの200 件
jobYC ポートフォリオ企業の求人投稿(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_TRANSPORTstdioトランスポート:stdio または streamable_http
MCP_HOST127.0.0.1HTTP トランスポートのバインド先ホストです。ループバック以外の値を指定する場合は MCP_BEARER_TOKEN が必要です。
MCP_PORT8000HTTP トランスポートのポート
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(推奨):

  1. リポジトリを GitHub にプッシュまたはフォークします
  2. render.com で「New Web Service」を選択し、GitHub リポジトリに接続します
  3. 必要に応じて、Render のダッシュボードで GITHUB_TOKEN を設定します
  4. 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 のみ、ソースごとに 2 つの経路)**を採用しています。フォールバック先となる一括ダンプはありません。

選定理由(2026-07-28 に 公式 HackerNews API でライブ検証済み):

  • 6 つすべてのフィードエンドポイント({top,best,new,ask,show,job}stories.json)は、29~500 個の ID とともに HTTP 200 を返します。認証は不要で、レート制限ヘッダーはなく、Cache-Control: no-cache が設定されています。
  • HackerNews は一括エクスポートを公開していないため、キャッシュはすべてこのサーバーが担当します。TTL は CACHE_TTL に設定されています。
  • Firebase API には検索機能がありません。過去のデータや全文検索には、2 つ目の経路である Algolia インデックスを使用します。これは hn_search が利用します。
  • item/<id>.json はアイテムごとに 1 回のリクエストが必要です。そのため、フィードやコメントスレッドはリクエスト数が増加します。このため、どちらにも上限を設けています(HN_MAX_CONCURRENCY、max_comments)。

影響:

  • ネットワークエラー、5xx、429 の場合、すべての上流呼び出しで指数バックオフ(2 秒/4 秒/8 秒)による再試行が行われます。それ以外の 4xx はすぐに失敗します。
  • プロセス全体でプールされた httpx.AsyncClient を 1 つ使用し、FastMCP のライフスパンでクローズします。
  • 不明なアイテム ID に対しては 404 ではなく、本文が null の HTTP 200 を返します。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 プロトコルバージョン

このサーバーは、同じエンドポイント上で2つのプロトコル時代に対応しています。接続時のクライアントの最初のリクエストによって、どちらを適用するかが決まり、後からもう一方の時代を指定しても拒否されます。

時代リビジョン利用するクライアント
initialize ハンドシェイク2024-11-05 … 2025-11-25現在のクライアントが使用するものです。サーバーは要求されたリビジョンで応答しますが、それより新しいものが要求された場合は、上限である 2025-11-25 で応答します。
リクエストごとのエンベロープ2026-07-282026-07-28 の _meta エンベロープを含むリクエストによって、モダンな接続が開始されます。

両方のリビジョンは tests/test_protocol_version.pyで固定され、 インストール済みのSDKとの照合が行われるため、Dependabotによる mcp の更新で どちらかが気付かれないまま変更されることはありません。

名前だけでなく、実際に使われます。: tests/test_modern_era.pyは実際に接続します。すべての時代(2026-07-28、auto、legacy)ではプロセス内で、HTTPではinitializeもMcp-Session-Idも使わず、単一のPOSTで、MCP_TRANSPORT=streamable_httpが起動するASGIアプリに接続します。server/discover、鮮度ヒントを含むtools/list、Mcp-Nameヘッダーを含むtools/call、すべての応答の_metaにあるserverInfoスタンプを確認し、SEP-2577で非推奨となった機能(sampling、roots、logging)が関与していないことも検証します。さらに、否定的な対照テストが2つあります。誤ったMcp-Methodヘッダーは-32020で拒否され、2025-11-25で同じリクエストを送る場合は、引き続きセッションが必要です。

既知のSDK側の挙動:server/discoverはresourcesとprompts(listChanged / subscribe)を通知しますが、このサーバーはいずれも登録していません。MCPServerが常にそれらのハンドラーをインストールするためです。これを無効にするにはプライベート属性に手を加える必要があるため、代わりに両方のリストがエラーなく空で返ることをテストで確認しています。

SDKのLATEST_PROTOCOL_VERSIONはハンドシェイク時代ではなく、モダン時代のエイリアスであることに注意してください。これだけを基準に固定すると、現在のクライアントが実際にネゴシエートする時代が変わっても検知できません。

**更新ポリシー。**ゲートのテストが失敗した場合、定数を確認せずに変更してはいけません。2つのリビジョン間の仕様変更履歴を読み、サーバーが引き続き正しく動作することを確認してから、定数、このセクション、README.de.md、CHANGELOG.mdをまとめて更新してください。


ツールの出力

各ツールは、src/hn_tech_signal_mcp/outputs.pyのモデルから独自のoutputSchema(閉じたスキーマ:additionalProperties: false)を宣言し、仕様で区別される次の3つの形式で応答します。

ケースcontent[0].textstructuredContentisError
成功整形表示されたJSONオブジェクト同じオブジェクトfalse
ソースの取得失敗[Source] Error: …—true
不明または誤ったID(hn_discussion)代わりに何を渡すべきかを説明する文—true
一部のソースが停止したダイジェストdegraded_sourcesとソースごとのerrorを含むJSONオブジェクト同じオブジェクトfalse

以前は、SDKが-> strの型注釈から{"result": string}というスキーマを導出していたため、構造化クライアントはJSONを1つの文字列フィールドとして受け取り、すべての失敗が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人工知能エージェント、計画、知識表現
cs.LG機械学習学習、最適化、汎化
cs.CL計算と言語NLP、LLM、翻訳、要約
cs.CVコンピュータービジョン画像認識、生成、マルチモーダル
cs.ROロボット工学身体性を持つ AI、ナビゲーション
stat.ML統計的機械学習確率的手法、ベイズ機械学習

レート制限

ソース認証が必要制限
HackerNews Firebaseいいえ非常に緩やか(Firebase)
HN Algolia Searchいいえ約10,000リクエスト/時間
arXivいいえ約3リクエスト/秒(節度を持って利用してください)
Lobste.rsいいえ節度ある利用
GitHub Searchいいえ60リクエスト/時間
GitHub SearchGITHUB_TOKEN5,000リクエスト/時間

既知の制限事項

  • GitHub のレート制限:トークンなしでは60リクエスト/時間です。本番環境で使用する場合は GITHUB_TOKEN を設定してください。
  • arXiv:論文が投稿されてから公開されるまで、最大24時間かかることがあります。週末や祝日はバッチ処理が遅延します。
  • HackerNews:トップ/ベストストーリーの一覧は数分ごとに更新されます。投稿されたばかりのストーリーはスコアが低い場合があります。
  • HackerNews の ask/job フィード:上流に存在する項目は約30件のみのため、大きな limit を指定しても、要求した件数より少ないストーリーしか返されません。求人投稿には type: "job" が付き、コメント数はなく、スコアは1です。
  • hn_discussion は常にサンプルであり、スレッド全体ではありません:上流ではコメントごとに1回リクエストする必要があるため、人気のストーリー(コメント数900件以上)をすべて取得することはできません。取得枠はネストの階層ごとに分割され、兄弟スレッド間でラウンドロビン方式により配分されます。そのため、あるサブスレッドを網羅的に読み込むのではなく、代表的な断面が取得されます。truncated フラグを確認してください。
  • hn_discussion のコメント本文は HTML ではなくプレーンテキストです:読みやすさのため、HN のマークアップは除去されています。出力を HTML として再レンダリングしないでください。この変換はサニタイズ処理ではありません。
  • Lobste.rs:HN よりコミュニティが小さく、テクノロジーに特化していますが、AI のすべてのトピックを扱っているとは限りません。
  • tech_signal_digest:同時に約4件のリクエストを行います。1つのソースの応答が遅い場合、全体の応答が遅延することがあります。

他の MCP サーバーとの相乗効果

hn-tech-signal-mcp は、次の組み合わせで効果的に利用できます。

組み合わせ使用例
+ news-monitor-mcpグローバルな調査 + スイスの機関メディア報道
+ fedlex-mcpテクノロジーに関する議論 + スイスの規制状況
+ global-education-mcpAI 研究の動向 + 教育政策データ
+ swiss-statistics-mcpテクノロジーの概況 + スイスの経済/構造データ

安全性と制限

  • **読み取り専用:**すべてのツールは HTTP GET リクエストのみを実行します。上流に投稿、コメント、投票、書き込みは行いません。
  • **個人データなし:**サーバーは公開されているテクノロジー関連のアグリゲーターにクエリを送信します。PII は収集されません。公開投稿や論文に記載された著者のハンドル名は、上流から取得したまま返され、追加情報との紐付けや照合は行われません。
  • レート制限:レート制限の表を参照してください。arXiv の1秒あたり3リクエスト以下というガイダンスはデフォルトで遵守されます。GitHub Search は GITHUB_TOKEN がない場合、1時間あたり60リクエストに制限されます。各呼び出しにはリクエストのタイムアウトが適用されます。
  • **一括収集なし:**このサーバーは対話的な会話での使用を目的として構築されており、スクレイピングやミラーリングを目的としていません。上流のページネーションや利用規約の制限を回避するために使用しないでください。
  • **利用規約:**データには各ソースの利用規約が適用されます。HackerNews、arXiv API、Lobste.rs、GitHub。
  • **保証なし:**コミュニティプロジェクトであり、HackerNews/Y Combinator、arXiv/Cornell、Lobste.rs、GitHub とは提携していません。利用可能かどうかは上流 API に依存します。

変更履歴

CHANGELOG.md を参照してください。


貢献

CONTRIBUTING.md(ドイツ語)を参照してください。


セキュリティ

セキュリティ対策と脆弱性の報告方法については、SECURITY.md(ドイツ語)をご覧ください。


ライセンス

MITライセンス — LICENSEをご覧ください。


作者

Hayal Oezkan · malkreide


クレジットと関連プロジェクト

インストール

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"
      ]
    }
  }
}

コメント

MCP は初めてですか?

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

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