hn-tech-signal-mcp について
hn-tech-signal-mcpは、技術やAIの動向を追うAIアシスタント向けのMCPサーバーです。公開研究、開発者の議論、厳選記事、GitHubの活動をまとめ、個別検索と横断ブリーフィングを行う8つのツールを提供します。
主な機能
- 01arXivの最新論文取得と検索
- 02HackerNewsのフィード、検索、議論
- 03タグで絞り込むLobste.rs記事
- 04GitHubのAIリポジトリ検索
- 05複数ソースのMarkdownブリーフィング
- 06stdioとStreamable HTTPに対応
活用シーン
- 01最新のAI研究と開発者の議論を確認
- 02HackerNewsの過去記事と議論を検索
- 03AI分野の活発なGitHubリポジトリを発見
- 04技術動向を横断したブリーフィングを作成
MCP 対応
MCPクライアント向けに、arXiv、HackerNews、Lobste.rs、GitHubを調べる8つのツールを公開します。複数ソースのブリーフィングも生成でき、stdioとStreamable HTTPに対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
🇨🇭 Swiss Public Data MCP Portfolio の一部です
📡 hn-tech-signal-mcp
HackerNews、arXiv、Lobste.rs、GitHubを集約し、体系的なブリーフィングを提供する、世界のテクノロジーとAIのシグナルインテリジェンス向けMCPサーバーです。APIキーは不要です。
デモ
概要
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
| # | ツール | ソース | 説明 |
|---|---|---|---|
| 1 | hn_top_stories | HackerNews | スコアフィルター付きの6種類のフィード:トップ/ベスト/新着/Ask/Show/求人 |
| 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 にプッシュまたはフォークします
- 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 のみ、ソースごとに 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-28 | 2026-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].text | structuredContent | isError |
|---|---|---|---|
| 成功 | 整形表示された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 Search | GITHUB_TOKEN | 5,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-mcp | AI 研究の動向 + 教育政策データ |
+ 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
クレジットと関連プロジェクト
- 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 サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。