これはNotion MCP Challengeへの提出です
私が作ったもの
notion-newsroom — AIを活用したニュースルーム自動化システムで、速報記事をリアルタイムに歴史的な文脈で補強します。
ジャーナリストがNotionでニュース記事を公開すると、システムは自動的に次を行います:
- 記事の主要トピックを理解するために、Gemini LLMでセマンティック検索クエリを生成
- ChromaDBを使って、過去の記事・アーカイブ・ソース資料のベクターデータベースから関連する歴史的文脈を取得
- 引用、関連スコア、ソースリンク付きで、補強したコンテキストブロックをNotionページに直接追記
- Notionコメントによって明確なフィードバックを提供し、見つかった文脈や利用できなかった理由がジャーナリストに伝わるようにします
これにより調査のワークフローが大幅に加速します。ジャーナリストはもはやアーカイブやコンテキストデータベースを手作業で検索する必要がありません。このシステムはスケジュールに従って動作し、Notion記事、CSVアーカイブ、RSSフィードといった混在データソースをシームレスに扱います。
主な機能:
- 設定可能な関連性の閾値による自動コンテキスト発見
- 見やすいUIのための、折りたたみトグルブロックを含む豊富なNotionブロック構成
- 明確なエラー報告(クエリ生成の失敗、検索不可、関連する一致がない)
- 異種アーカイブソースのサポート(UUID、短い数値ID)
- 組み込みのチャンクサイズ検証によるトランザクション的な追記の安全性
動画デモ
コードを見せてください
GitHub: udofia2/notion-newsroom
Notion MCPの使い方
Notion MCPは、このワークフローを可能にする中核となる統合です。以下のように使っています:
1. 公開された記事を読む
MCPサーバーはNotionページのコンテンツを、クエリ可能なオブジェクトとして公開します。Context Hunterは、Notionのデータベースから下書きと公開記事を読み取り、コンテンツを抽出し、それをセマンティック検索パイプラインへ流し込みます。
# MCP経由でNotionから記事を読み取る
article_content = notion_client.retrieve_block(page_id)
2. 歴史的なコンテキストブロックを追記する
コンテキストが見つかり、順位付けされたら、MCPはNotionページへリッチテキストブロックをリアルタイムに追記できるようにします:
- ネストされたブロックの構成(トグル → 箇条書きアイテム → 引用付き段落)
- Notionメンションのサポート(ソースページへのリンク)とプレーンテキストのリンク(外部アーカイブ用)
- Notionの要素ごとの制約を尊重するための自動チャンク分割
# MCPでコンテキストブロックを追記する
context_block = build_historical_context_toggle_block(results, article_title)
notion_client.append_block_children(page_id, [context_block])
3. 自動化フィードバックを投稿する
ジャーナリストは、あらゆる結果に対する記事への明確なコメントを受け取ります:
- ✅ 「歴史的なコンテキストを追加:8件」
- ⚠️ 「クエリ生成に失敗:プロバイダがサーバーエラー503を返しました」
- 「検索不可:埋め込みモデルがオフライン」
- ❌ 「関連する歴史的コンテキストが見つかりませんでした」
この可視性は重要です。無言の自動化失敗は信頼を壊します。MCPのコメントがギャップを埋めます。
4. Notionメンション&リンク
システムは、混在するソースIDを賢く処理します:
-
NotionページのUUID → リッチメンション(
mention.page.id) - 外部/アーカイブのソース → URL付きのテキストリンク
- 短い数値ID → メタデータ付きのプレーンテキスト引用




