Sidewise について
Sidewiseは、政治的な傾向の異なる報道機関のニュースを集約し、一方だけが報じている話題を示します。ウェブリーダー、API、ターミナルクライアント、認証不要のMCPサーバーから利用できます。
主な機能
- 01ニュースを集約し報道機関の傾向を表示
- 02見出しを分類し一方だけの報道を抽出
- 03報道機関ごとの見出しを比較
- 04フィードの状態とデータの完全性を確認
活用シーン
- 01異なる政治的傾向のニュースを確認
- 02一方だけが報じている話題を見つける
- 03同じ話題の見出しや表現を比較
- 04フィード障害や古いデータを確認
MCP 対応
ステートレスなStreamable HTTP MCPサーバーを通じて、ニュース取得、ブラインドスポット検索、報道比較、フィード状態確認のツールを公開します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://news.heyitsmejosh.com/mcpclaude mcp add --transport http nulljosh-newsline https://news.heyitsmejosh.com/mcp{"mcpServers":{"nulljosh-newsline":{"type":"http","url":"https://news.heyitsmejosh.com/mcp"}}}Cursor で開く{"servers":{"nulljosh-newsline":{"type":"http","url":"https://news.heyitsmejosh.com/mcp"}}}VS Code で開く{"mcpServers":{"nulljosh-newsline":{"type":"http","url":"https://news.heyitsmejosh.com/mcp"}}}{"mcpServers":{"nulljosh-newsline":{"serverUrl":"https://news.heyitsmejosh.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
Sidewise
反対側は何を読んでいるのでしょうか?
Sidewise は、さまざまな政治的立場の14のニュース編集部から16のフィードを取得し、それぞれを左派、中央、右派に分類して、盲点、つまり片方の陣営だけが報じている記事を見つけます。無料です。アカウントもキーも制限もありません。
同じニュース編集部の2つのフィードは、1つの声として数えます。出版社がメインフィードの隣にオピニオン欄を設け、それを2つの情報源だと言うことはできません。
利用方法は5つあります。ウェブリーダー、ネイティブのiPhone、iPad、Macアプリ、JSON API、MCP サーバー、ターミナルクライアント(swift build && ./.build/debug/sidewise-tui 5 — tui/を参照)。
スクリーンショット
アプリ
ios/にある、iOSとmacOSで共通のコードベースを使用したSwiftUIアプリです。同じ公開APIを読み込みます。アカウント不要、トラッキングなし。保存した記事、フォロー、閲覧履歴、フィードキャッシュはデバイス上に保持されます。
iPhoneおよびiPadアプリで、記事の一覧表示に加えてできることは次のとおりです。
- 比較。 記事を開くと、各メディアの見出しが評価とリンクとともに、左から右へ並んで表示されます。「比較」タブには、2つ以上のメディアが報じている記事だけが表示されます。1つのメディアしか報じていない記事には、その旨が表示され、比較があるかのように装うことはありません。 フィードのクラスタには無関係な項目が含まれることがあるため、記事の見出しが比較に残るのは、記事のタイトルと意味のある単語を少なくとも2つ共有している場合だけです。
- メディアとフォロー中。 すべてのメディアを評価と最近の見出しとともに表示します。メディアをフォローまたはミュートできます。ミュートしたメディアは表示されなくなり、フォローしたメディアは専用のタブに表示されます。
- マイ・ダイエット。 今週実際に開いた記事の左派、中央、右派の割合、平均的な政治的傾向、最も多く開いたメディアを確認できます。
- 共有機能拡張。 Safariからリンクを共有すると、ドメインに基づいてそのメディアのSidewiseでの評価を表示します。評価されていないメディアの場合は、その旨を知らせます。
- ウィジェット。 トップ記事とそのバイアスバーを表示する、小型および中型のホーム画面ウィジェットです。
cd ios && xcodegen generate
xcodebuild -scheme Sidewise-iOS -destination 'generic/platform=iOS Simulator' build
MCP
claude mcp add --transport http sidewise https://sidewise.jaybulb.com/mcp
| ツール | パラメーター | 戻り値 |
|---|---|---|
get_news | view、outlet、bias、developing、q、limit | 現在の見出し。記事ごとにフラット表示、またはクラスタ表示 |
get_blindspots | limit | 片方の政治的陣営だけが報じている記事 |
compare_coverage | q(必須)、limit | 各陣営の見出しでの同一記事の紹介と、それぞれに固有の単語 |
get_feed_health | : | 応答したフィードと、提供データが完全なものか、古いデータで代替されたものか |
空の結果や片方の陣営に偏った結果を信頼する前に、get_feed_healthを呼び出してください。そうしないと、障害とニュースの少ない日が同じように見えてしまいます。
ステートレスなストリーミング可能HTTPで、認証は不要です。Claude Desktop、Claude Code、Cursorなど、あらゆるMCPクライアントで利用できます。
API
GET https://sidewise.jaybulb.com/api/stories。すべてのパラメーターは省略可能です。
| Param | Values | Default |
|---|---|---|
view | latest、stories、both | both |
outlet | 任意の配信元名(例:Hacker News) | すべて |
bias | left、center、right | すべて |
blindspot | true | オフ |
developing | true:過去90分間に3つ以上の報道機関が報じたニュース | オフ |
compare | true:各ストーリーに左右対比の内訳を付加 | オフ |
q | 見出しと要約テキストに対する部分一致 | なし |
limit | 1~200 | 60クラスター/120件の見出し |
エンドポイントはほかに2つあります。GET /api/health は各フィードの状態を報告し、半数を超えるフィードが停止している場合は 503 を返すため、そのまま監視先に指定できます。GET /api/sources は各フィードとそのバイアス、陣営、親報道機関を一覧表示します。
curl 'https://sidewise.jaybulb.com/api/stories?view=stories&blindspot=true'
curl 'https://sidewise.jaybulb.com/api/stories?view=latest&outlet=Hacker%20News&limit=10'
{
"updated": 1754700000000,
"stories": [
{
"title": "Fed holds rates steady",
"blindspot": false,
"sources": [
{ "title": "Fed holds rates steady", "link": "https://…", "outlet": "NPR", "bias": -1 },
{ "title": "Fed refuses to cut rates", "link": "https://…", "outlet": "Fox News", "bias": 2 }
]
}
],
"latest": [
{ "title": "Fed holds rates steady", "link": "https://…", "outlet": "NPR", "bias": -1, "ts": 1754699000000 }
]
}
CORS はすべて許可されています。フィードの再取得は最短でも2分間隔です。レスポンスは no-store です(下記参照)。ts はエポックミリ秒で、フィードに日付がない場合は 0 です。これらは並べ替え時に末尾になります。完全な仕様は openapi.yaml、エージェント向けの案内は llms.txt を参照してください。
仕組み
1つの Cloudflare Worker(worker.js)が src/feeds.js のすべてのフィードをポーリングし、1回のプールされた取得からページ、API、MCP を提供します。
latest:すべての見出しを新しい順に表示します。stories:タイトルのキーワードの重複に基づいて見出しをクラスター化します。各ソースには左派、中道、右派のタグを付けます。一方の陣営だけに偏ったクラスターにはblindspotのフラグを付けます。
キャッシュされるのは、1つの定数キーに保存されるフィード取得結果だけです。フィルタリングは、その後に shape() 内でリクエストごとに行われ、レスポンスは no-store で返されます。このゾーンの CDN キャッシュはクエリ文字列を無視するため、クエリ文字列をキャッシュすると、あるユーザーの ?outlet= がすべてのユーザーに返されてしまいます。いずれの場合も再取得は行われず、低コストのフィルタリングだけが再実行されます。
クラスターはクラスター化の 後に フィルタリングされます。フラットなフィードは120件の上限を適用する 前に フィルタリングされます。どちらの順序も重要です。入力を先に絞り込むと、配信元をまたいだ比較ができなくなります。上限を適用した後にフィルタリングすると、規模の小さい配信元が表示されなくなります。
バイアススコア
各ソースには -2(左派)から +2(右派)までのスコアが付いています。0 は中道、または Hacker News や Daring Fireball のようなテクノロジー系配信元の場合は非政治的を表します。これらは FEEDS に手作業で割り当てた、厳密な評価ではなく大まかな傾向を示すスコアです。
CBC · The Guardian · NPR · BBC · Global News · National Post · Fox News · NY Post · Daily Wire · Hacker News · Daring Fireball · NBC News · Wall Street Journal · NY Post Opinion · Vancouver Sun · The Province
worker.js の先頭にある FEEDS に [outlet, bias, url] を追加すると、配信元を追加できます。RSS 2.0 または Atom フィードであれば利用できます。
開発
npm test # 95 checks, no network
npm run feeds # check every feed for freshness, not just a 200
npm run deploy # wrangler deploy
FEEDS を変更した後は npm run feeds を実行してください。このコマンドは、ゾンビフィードを検出する唯一の方法である 更新頻度 を確認します。ゾンビフィードとは、XML に問題がなく200を返すものの、最新の項目が2年前のままになっているフィードです。CNN ではこれが3年間続いていました。項目数の確認では検出できませんでした。
Cloudflare Workers と Static Assets を使用します。1回のデプロイでページ、/api/stories、/mcp を提供します。
テスト
test/ には、ネットワークにも Worker ランタイムにも依存せず、src/ の4つのモジュールを対象にしたテストがあります。
| File | What it holds down |
|---|---|
parse.test.mjs | エンティティのデコード、二重エスケープされた要約、CDATA と Atom の形式、および javascript: と data: リンクの拒否 |
stories.test.mjs | クラスタリング、ブラインドスポットの判定に使われる「フィードではなく報道機関を数える」ルール、ニュースの進展を判定する時間枠、フィルタリングをクラスター化後に行う順序 |
load.test.mjs | フィードのエラー報告、タイムアウト、縮退時/古いデータのフォールバック、および不正な取得結果で直近の正常なデータを上書きしないルール |
worker.test.mjs | クエリの解析と上限設定、および404、405、500を含め、/api/ 以下がすべてCORS付きのJSONを返すこと |
mcp.test.mjs | JSON-RPC のフレーミング、不正な入力、各ツールの仕様 |
セキュリティについては、SECURITY.md を参照してください。
ライセンス
MIT 2026、Joshua Trommel。見出しとリンクの権利は各発行元に帰属します。Sidewise は何も保存せず、元のページへのリンクを提供します。
ホワイトペーパー
API とエージェントツール
REST(/api/*)、POST /mcp サーバー、および読者向けページ内 WebMCP ツール
(public/webmcp.js)は、同じ 4 つの操作を公開します。互いにテストされているため、
動作に差異が生じることはありません。詳しくは docs/API.md をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。