Followin MCP
Followin-MCP
プロジェクト概要
このプロジェクトは、暗号資産(crypto)ニュースシーン向けのイベントレベルのレコメンデーションプロトタイプと理解できます:
上流で
Followin API + adapters.pyを通じてオリジナルコンテンツを取得normalizer.pyでオリジナルコンテンツを構造化されたContentItemに正規化service.pyのget_personal_feed内で、まず明示的なマルチパスリコールを行い、次にセマンティック補完(semantic supplement)を実行clustering.pyで複数のコンテンツを同一イベントのEventClusterに統合ranking.pyでマルチシグナルヒューリスティックランカー + MMRリランキングを使用してパーソナライズされたフィードを生成
一言でまとめると:
暗号資産ニュースシーン向けのFollowin MCPプロトタイプ:オリジナルコンテンツを構造化されたアイテムに正規化し、マルチパスリコール、セマンティック補完、イベントクラスタリング、パーソナライズされたランキングを通じて、ユーザー向けのイベントレベルのフィードを出力します。
Related MCP server: Daily News MCP Server
ディレクトリ構造
followin_mcp/Pythonパッケージの入り口followin_mcp/core/コアビジネスロジック:アダプター、モデル、正規化、ランキング、サービスfollowin_mcp/mcp/MCPサーバーの入り口followin_mcp/demo/テストエージェントおよびWebデモscripts/start_dev.shローカル一括起動スクリプトweb/フロントエンドの静的リソース
コアモジュール
followin_mcp/core/adapters.pyFollowin APIアダプター層followin_mcp/core/models.pyデータモデルfollowin_mcp/core/taxonomy_rules.pyタクソノミー / ルール設定followin_mcp/core/normalizer.pyオリジナルコンテンツの正規化、エンティティ抽出、イベントタイプ識別followin_mcp/core/clustering.pyイベントクラスタリングfollowin_mcp/core/ranking.pyユーザーレコメンデーションのランキングと解説followin_mcp/core/semantic_recall.py埋め込み(embedding)インデックス作成、セマンティックリコール、アイテム類似度followin_mcp/core/service.pyMCP / アプリケーション層向けのサービス入り口
リクエスト処理シーケンス
sequenceDiagram
participant U as MCP client / agent
participant M as mcp/server.py
participant S as service.py
participant A as adapters.py
participant F as Followin API
participant N as normalizer.py
participant SR as semantic_recall.py
participant C as clustering.py
participant R as ranking.py
U->>M: call tool
M->>S: get_latest / search / get_personal_feed ...
S->>A: fetch raw content
A->>F: HTTP request
F-->>A: raw payload
A-->>S: raw items
loop per raw item
S->>N: normalize(raw)
N-->>S: ContentItem\nentities / event_type / scores
end
S->>SR: enqueue normalized items
SR-->>S: background indexing
opt personal feed / semantic supplement
S->>SR: recall(query, candidate pool)
SR-->>S: semantic candidates / similarity
end
opt personal feed
S->>C: cluster_same_event(items)
Note over C: uses item embedding similarity
C-->>S: EventCluster list
S->>R: rank_for_user(user, clusters)
Note over R: uses semantic_match_score
R-->>S: ranked clusters
end
S-->>M: tool payload
M-->>U: MCP response処理リンク
1. MCP入り口
mcp/server.py7つのMCPツールを公開
MCPの入力パラメータを
service.pyの呼び出しに変換ContentItem / EventClusterをMCPの戻り値構造にシリアライズする役割
2. オリジナルコンテンツの取得
service.py -> adapters.pyget_latest_headlines / get_project_feed / get_project_opinions / get_trending_topics上流のページネーション機能をそのまま透過get_trending_feeds / search_content現在のスナップショット結果を直接返却get_personal_feedまず明示的なマルチパスリコールとセマンティック補完を行い、その後イベントクラスタリングとパーソナライズされたランキングを実行
3. コンテンツの正規化
normalizer.pynormalize(raw)で単一のオリジナルコンテンツをContentItemに変換エンティティ抽出のソース:
tag
chain keyword
project alias
token alias
topic alias
dynamic alias(軽量なエンティティ発見 / バイパスNER)
出力:
projects / tokens / chains / topicsentity_sourcesentity_confidence(ヒット方式の強度)event_typecredibility_score(ソースの信頼度)importance_score(規定ルールによる計算)
4. リコール
ここでの「リコール」とは:
より大きなコンテンツプールから候補となる
ContentItemを取得することその後のクラスタリング、ランキング、ページネーションに使用
service.pyのパーソナルフィードでは、まず明示的なマルチパスリコールを実行:latesttrendingprojectsearch
マルチパスリコールの結果は
item.idで重複排除される同じアイテムが複数パスでヒットした場合、セマンティックマッチがより強く、重要度が高く、更新時間が新しいバージョンが優先される
5. イベントクラスタリング
clustering.py入力は
ContentItemのリスト出力は
EventClusterのリストクラスタリングの目的は「同一プロジェクト」や「同一トピック」ではなく「同一イベント」
主なシグナル:
イベントタイプの互換性
時間枠
信頼度重み付きのエンティティ重複
タイトルの類似度
オプションのセマンティック類似度
6. パーソナライズされたランキング
ranking.py入力は
EventCluster出力はユーザーごとにランキングされたクラスターフィード
主なシグナル:
importance_scorefreshness_scorefollow_affinity_scoreinterest_match_scoresemantic_match_scoresource_quality_scorerisk_boost_score
mute_penalty最後にMMRスタイルの多様化リランキングを実行
7. Embedding
semantic_recall.py正規化されたアイテムはまず非同期のembeddingワーカーに
enqueueされるアイテムのembeddingはローカルのSQLite
semantic_index.dbに保存される
embeddingは現在主に3つの役割を果たす:
service.pyのパーソナルフィードにおいて、現在のクエリと候補プールに基づいたクエリ認識型セマンティックリコール / セマンティック補完clustering.pyにおいて、アイテムのembedding類似度をクラスタリングシグナルの一つとして使用ranking.pyにおいて、semantic_match_scoreを通じてセマンティックマッチシグナルを最終ランキングに反映
Personal Feed
get_personal_feedは現在唯一のセッション化されたフィードツール主なフロー:
明示的なマルチパスリコール
セマンティック補完
イベントクラスタリング
パーソナライズされたランキング
service.pyは内部でFeedSessionStateを保持し、主に以下を保存:pending_clustersdelivered_event_idsdelivered_item_idssource_cursors
戻り値には以下が含まれる:
ranked_clusters展開されたサポート
itemsnext_cursorhas_more
ページネーションのセマンティクス:
初回リクエストでフィードセッションを作成し、ランキング済みのクラスターを可能な限り
pending_clustersに格納現在のページは
pending_clustersの先頭から最大max_items個のクラスターを取得返却済みのクラスター / アイテムはdeliveredセットに記録され、重複を防ぐ
後続の「もっと見る」は、残りの
pending_clustersを優先的に消費バッファがリフィル閾値を下回った場合、次のリコール、セマンティック補完、クラスタリング、ランキングを実行してバッファを補充
ツールのセマンティクスとコンテキストの境界
現在のMCPツールセットは2つのカテゴリに分類できる:
コンテンツクエリツール
get_latest_headlinesget_trending_feedsget_project_feedget_project_opinionsget_trending_topicssearch_content
レコメンデーションツール
get_personal_feed
コンテンツクエリツールはデフォルトでステートレス:
get_latest_headlines / get_project_feed / get_project_opinions / get_trending_topics上流のページネーション機能を透過
現在のリクエストに対応する1ページの結果を返却
get_trending_feeds / search_content現在のスナップショット結果を直接返却
追加のサービス層ページネーション状態を保持しない
get_personal_feed は現在唯一のステートフルなツール:
service.pyは短命なFeedSessionStateを保持外部には
feed session cursorのみを公開サーバー内部で以下を保持:
pending_clustersdelivered_event_idsdelivered_item_idssource_cursors
後続の「もっと見る」は、セッション内の
pending_clustersを優先的に消費
責任の境界は概ね以下の通り:
ツール / サービス層
コンテンツ取得、候補リコール、クラスタリング、ランキング、フィードセッション管理を提供
エージェント層
マルチターン対話におけるツール選択とコンテキストの継承を担当
例:前回の続き、前回の詳細展開、前回の結果に基づく追問
現在のページネーションのセマンティクス:
get_latest_headlines / get_project_feed / get_project_opinions / get_trending_topics上流のネイティブカーソルメタデータを返却
get_personal_feednext_cursorとhas_moreを返却cursorのセマンティクスはフィードセッションの継続であり、通常のリストページネーションではない
現在使用されている技術 / アルゴリズム
Python + MCP (
FastMCP)Followin APIアダプター
ルールベースのエンティティ抽出
alias matching
source tag matching
keyword rules
イベント分類
ルールベースのマルチシグナルスコアリング
エンティティ信頼度
strong / medium / weak
セマンティックリコール
OpenAI embedding
cosine similarity
SQLite ベクトル永続化
クラスタリング
greedy incremental clustering
confidence-weighted Jaccard overlap
title Jaccard similarity
item embedding similarity
ランキング
heuristic linear ranker
MMR-style diversification rerank
業界のプロダクション実装と比較して不足しているもの
リコール / レコメンデーションシステムの能力
レコメンデーション層には、真の長期 / セッションユーザー表現の階層化がまだない
行動ログ駆動の非同期ユーザープロファイル更新リンクがまだない
コンテンツ理解
軽量なエンティティ発見 / 弱NER(tag、alias、rule、LLM支援抽出)はあるが、スパンオフセット付きの汎用オンラインNER / エンティティリンキングのメインリンクがまだない
イベントタクソノミーは依然としてコールドスタートルールシステムに偏っており、アノテーションデータ駆動のキャリブレーションが不足している
現在の
credibility_scoreは主に上流が提供するソースタイプ / メタデータに依存しており、データ境界の制約により、より詳細なソースレベルの信頼性やマルチソース検証が不足している
クラスタリング
現在はembedding類似度をクラスタリングシグナルの一つとしているが、全体としては依然としてヒューリスティックなマルチシグナルクラスタリングであり、学習ベースのペアワイズ分類器 / マージモデルではない
永続的なクラスターストアに基づくオンラインクラスタリング体系へさらに進化させるには、クラスター割り当て、および日をまたいだ進化、クラスターの分割・統合などのクラスターライフサイクル能力を補完する必要がある
ランキング
現在のランキングはembedding駆動の
semantic_match_scoreを使用しているが、主体は依然として人手による特徴量重み付けのヒューリスティック線形ランカーであり、学習ベースのランキング(LTR)ではないレコメンデーション層には、クリック、滞在時間、共有などの行動特徴量がまだ組み込まれていない
レコメンデーション層は現在軽量なMMR多様化のみを行っており、より体系的なクォータ制御やビジネス制約が不足している
現在公開されているMCPツール
get_latest_headlinesget_trending_feedsget_project_feedget_project_opinionsget_trending_topicssearch_contentget_personal_feed
Webデモ
「ランダムなユーザープロファイル + マルチターン対話」をより直感的にテストしたい場合は、Webデモを起動できます:
python3 -m followin_mcp.demo.webappまたはインストール後:
followin-mcp-webその後、以下を開きます:
http://127.0.0.1:8000このデモは以下をサポートします:
ランダムなユーザープロファイルの生成
現在のプロファイルに対するLangChainエージェントセッションの作成
同一セッション内でのマルチターンチャットコンテキストの保持
ページネーションをサポートするツールに対する最新の
next_cursorコンテキストの保持各ターンで実際に発生した1つまたは複数のツール呼び出しの表示
ツールパラメータと戻り値カードの表示
実行前に .env が設定されていることを確認してください:
FOLLOWIN_API_KEY=your_api_key
OPENAI_API_KEY=your_openai_api_keyMCP Server
現在、以下の機能をMCPツールとして公開しています:
get_latest_headlinesget_trending_feedsget_project_feedget_project_opinionsget_trending_topicssearch_contentget_personal_feed
起動方法:
python3 -m followin_mcp.mcp.serverまたはインストール後に使用:
followin-mcp-serverACP Agent
現在の対話エージェントをACPをサポートするクライアントにACP stdioエージェントとして公開したい場合は、以下を起動します:
python3 -m followin_mcp.acp.serverまたはインストール後に使用:
followin-acp-agent現在のACPラッパーは FollowinChatAgent を直接再利用します:
ACPセッションは1つの
FollowinChatAgentセッションに対応prompt()内部で既存のchat_stream()を呼び出しアシスタントのテキストはストリーミングチャンクとしてACPクライアントに返送される
ユーザープロファイルはデフォルトで
FOLLOWIN_ACP_PROFILE_JSONを読み込み、設定がない場合は組み込みのデフォルトプロファイルを使用
ローカルの acpx / OpenClawに接続する場合、~/.acpx/config.json は最小構成で開始できます:
{
"agents": {
"followin": {
"command": "/path/to/python",
"args": ["-m", "followin_mcp.acp.server"],
"cwd": "/path/to/followin-mcp"
}
}
}ここでは追加の env を記述する必要はありません:
followin_mcp.acp.server起動時にload_dotenv()が実行されるcwdがプロジェクトルートを指していれば、リポジトリ内の.envが読み込まれる
This server cannot be deployed
Maintenance
Related MCP Connectors
Real-time curated crypto news for AI agents with sentiment, recaps, and search.
Crypto fundamentals, sentiment, whale tracking and influencer call accuracy for traders and agents.
Evidence-backed crypto due diligence with sources, freshness, and a runtime receipt on every call.
Real-time financial news & regulatory intelligence: cited search, fetch, summaries, collections.
Related MCP Servers
- AlicenseBqualityFmaintenanceReal-time cryptocurrency news, analysis, and price predictions for AI agents. 5 tools to search 50,000+ articles across 12 categories, filter by 120+ asset tickers, and access content with built-in attribution. Free with attribution. SSE and Streamable HTTP transport.4MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to fetch news categories and hot news/tweets across various topics like crypto, DeFi, and AI.2352MIT
- FlicenseAqualityDmaintenanceProvides real-time Web3 research digest with macro news, KOL sentiment, market data, and personalized on-chain wallet analysis through four AI tools.4-
- AlicenseAqualityCmaintenanceEnables querying and aggregating Chinese and international news along with multi-platform trending topics, featuring deduplication, event clustering, and article extraction for AI clients.7MIT