Followin MCP
Loads environment configuration from .env files for API key management and server configuration.
Integrates with LangChain agents for creating conversational AI sessions with multi-turn chat context and tool usage.
Generates sequence diagrams to visualize the request processing flow and system architecture.
Uses OpenAI embeddings for semantic recall, similarity calculations, and content understanding in the recommendation pipeline.
Provides the core programming language implementation for the MCP server and all processing modules.
Stores and manages vector embeddings in a local semantic index database for efficient similarity search and recall operations.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Followin MCPwhat's trending in crypto today?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Followin-MCP
Project Overview
This project can be understood as an event-level recommendation prototype for the crypto news domain:
Upstream fetches raw content via
Followin API + adapters.pynormalizer.pystandardizes raw content into structuredContentItemobjectsservice.pyperforms explicit multi-path recall followed by semantic supplement inget_personal_feedclustering.pymerges multiple items into anEventClusterrepresenting the same eventranking.pygenerates a personalized feed using a multi-signal heuristic ranker + MMR rerank
Summary in one sentence:
A Followin MCP prototype for the crypto news domain: standardizes raw content into structured items, then produces a user-facing event-level feed through multi-path recall, semantic supplement, event clustering, and personalized ranking.
Related MCP server: onchainos MCP Server
Directory Structure
followin_mcp/Python package entry pointfollowin_mcp/core/Core business logic: adapter, model, normalizer, ranking, servicefollowin_mcp/mcp/MCP server entry pointfollowin_mcp/demo/Test agent and Web demoscripts/start_dev.shLocal one-click startup scriptweb/Frontend static assets
Core Modules
followin_mcp/core/adapters.pyFollowin API adapter layerfollowin_mcp/core/models.pyData modelsfollowin_mcp/core/taxonomy_rules.pyTaxonomy / rule configurationfollowin_mcp/core/normalizer.pyRaw content standardization, entity extraction, event type identificationfollowin_mcp/core/clustering.pyEvent clusteringfollowin_mcp/core/ranking.pyUser recommendation ranking and explanationfollowin_mcp/core/semantic_recall.pyEmbedding indexing, semantic recall, item similarityfollowin_mcp/core/service.pyService entry point for MCP / application layer
Request Processing Sequence
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 responseProcessing Pipeline
1. MCP Entry Point
mcp/server.pyExposes 7 MCP tools
Converts MCP input parameters into
service.pycallsResponsible for serializing
ContentItem / EventClusterinto MCP return structures
2. Raw Content Acquisition
service.py -> adapters.pyget_latest_headlines / get_project_feed / get_project_opinions / get_trending_topicsDirectly passes through upstream pagination capabilitiesget_trending_feeds / search_contentReturns current snapshot results directlyget_personal_feedPerforms explicit multi-path recall and semantic supplement first, then proceeds to event clustering and personalized ranking
3. Content Standardization
normalizer.pynormalize(raw)converts a single raw content item into aContentItemEntity extraction sources:
tag
chain keyword
project alias
token alias
topic alias
dynamic alias (lightweight entity discovery / bypass NER)
Outputs:
projects / tokens / chains / topicsentity_sourcesentity_confidence(strength of matching method)event_typecredibility_score(source credibility)importance_score(calculated via predefined rules)
4. Recall
"Recall" here refers to:
Fetching a batch of candidate
ContentItemobjects from a larger content poolUsed for subsequent clustering, ranking, and pagination
service.pyperforms explicit multi-path recall in the personal feed:latesttrendingprojectsearch
Multi-path recall results are deduplicated by
item.idIf the same item is hit by multiple paths, the version with stronger semantic match, higher importance, and more recent update time is prioritized
5. Event Clustering
clustering.pyInput: list of
ContentItemOutput: list of
EventClusterClustering target is "the same event", not the same project or topic
Key signals:
Event type compatibility
Time window
Entity overlap with confidence weights
Title similarity
Optional semantic similarity
6. Personalized Ranking
ranking.pyInput:
EventClusterOutput: cluster feed ranked by user
Key signals:
importance_scorefreshness_scorefollow_affinity_scoreinterest_match_scoresemantic_match_scoresource_quality_scorerisk_boost_score
mute_penaltyFinal layer of MMR-style diversification rerank
7. Embedding
semantic_recall.pyNormalized items are
enqueued to an asynchronous embedding workerItem embeddings are stored in a local SQLite
semantic_index.db
Embedding currently participates in three main tasks:
service.pyperforms query-aware semantic recall / semantic supplement in the personal feed based on the current query and candidate poolclustering.pyuses item embedding similarity as one of the clustering signalsranking.pyincorporates semantic matching signals into the final ranking viasemantic_match_score
Personal Feed
get_personal_feedis currently the only sessionized feed toolMain flow:
Explicit multi-path recall
Semantic supplement
Event clustering
Personalized ranking
service.pymaintainsFeedSessionStateinternally, primarily storing:pending_clustersdelivered_event_idsdelivered_item_idssource_cursors
Returned results include:
ranked_clustersExpanded supporting
itemsnext_cursorhas_more
Pagination semantics:
The first request creates a feed session and attempts to fill
pending_clusterswith ranked clustersThe current page takes the first
max_itemsclusters from the head ofpending_clustersReturned clusters / items are recorded in the delivered set to avoid repetition
Subsequent "more" requests prioritize consuming remaining
pending_clustersWhen the buffer falls below the refill threshold, another round of recall, semantic supplement, clustering, and ranking is triggered to replenish the buffer
Tool Semantics and Context Boundaries
These MCP tools can be divided into two categories:
Content Query Tools
get_latest_headlinesget_trending_feedsget_project_feedget_project_opinionsget_trending_topicssearch_content
Recommendation Tools
get_personal_feed
Content query tools are stateless by default:
get_latest_headlines / get_project_feed / get_project_opinions / get_trending_topicsPass through upstream pagination capabilities
Return one page of results corresponding to the current request
get_trending_feeds / search_contentReturn current snapshot results directly
Do not maintain additional service-layer pagination state
get_personal_feed is currently the only stateful tool:
service.pymaintains a short-livedFeedSessionStateOnly exposes the
feed session cursorexternallyInternally stores:
pending_clustersdelivered_event_idsdelivered_item_idssource_cursors
Subsequent "more" requests prioritize consuming
pending_clusterswithin the session
Responsibility boundaries are roughly:
Tool / Service layer
Provides content acquisition, candidate recall, clustering, ranking, and feed session management
Agent layer
Responsible for tool selection and context maintenance in multi-turn conversations
E.g., continuing the previous batch, expanding the previous item, follow-up questions based on previous results
Current pagination semantics:
get_latest_headlines / get_project_feed / get_project_opinions / get_trending_topicsReturn upstream native cursor metadata
get_personal_feedReturns
next_cursorandhas_moreThe semantics of
cursoris feed session continuation, not standard list pagination
Technologies / Algorithms Used
Python + MCP (
FastMCP)Followin API adapter
Rule-based entity extraction
alias matching
source tag matching
keyword rules
Event classification
rule-based multi-signal scoring
Entity confidence
strong / medium / weak
Semantic recall
OpenAI embedding
cosine similarity
SQLite vector persistence
Clustering
greedy incremental clustering
confidence-weighted Jaccard overlap
title Jaccard similarity
item embedding similarity
Ranking
heuristic linear ranker
MMR-style diversification rerank
What the Prototype Lacks Compared to Industry Production Implementations
Recall / Recommendation System Capabilities
The recommendation layer lacks true long-term / session user representation layering
No asynchronous user profile update pipeline driven by behavioral logs
Content Understanding
Currently has lightweight entity discovery / weak NER (tag, alias, rule, LLM-assisted extraction), but lacks a main pipeline for general online NER / entity linking with span offsets
Event taxonomy is still a cold-start rule system, lacking calibration driven by labeled data
Current
credibility_scorerelies primarily on source type / metadata provided upstream; limited by data boundaries, it lacks finer source-level reliability and multi-source verification
Clustering
Currently uses embedding similarity as one of the clustering signals, but it remains a heuristic multi-signal clustering approach, lacking a trained pairwise classifier / merge model
Evolving into an online clustering system based on a persistent cluster store would require adding cluster assignment, as well as cluster lifecycle capabilities like cross-day evolution, splitting, and merging
Ranking
Current ranking uses embedding-driven
semantic_match_score, but the core remains a manually feature-weighted heuristic linear ranker rather than learned-to-rankThe recommendation layer has not integrated behavioral features like clicks, dwell time, or shares
The recommendation layer currently only performs light MMR diversification, lacking more systematic quota control and business constraints
Currently Exposed MCP Tools
get_latest_headlinesget_trending_feedsget_project_feedget_project_opinionsget_trending_topicssearch_contentget_personal_feed
Web Demo
If you want to test "random user profile + multi-turn conversation" more intuitively, you can start a Web demo:
python3 -m followin_mcp.demo.webappOr after installation:
followin-mcp-webThen open:
http://127.0.0.1:8000This demo supports:
Random user profile generation
Creating a LangChain agent session for the current profile
Retaining multi-turn chat context within the same session
Retaining the latest available
next_cursorcontext for tools that support paginationDisplaying one or more actual tool calls that occurred in each turn
Displaying tool parameters and return result cards
Please ensure the following is configured in .env before running:
FOLLOWIN_API_KEY=your_api_key
OPENAI_API_KEY=your_openai_api_keyMCP Server
The following capabilities are currently exposed as MCP tools:
get_latest_headlinesget_trending_feedsget_project_feedget_project_opinionsget_trending_topicssearch_contentget_personal_feed
Startup method:
python3 -m followin_mcp.mcp.serverOr use after installation:
followin-mcp-serverACP Agent
If you want to expose the current chat agent as an ACP stdio agent to clients that support ACP, you can start:
python3 -m followin_mcp.acp.serverOr use after installation:
followin-acp-agentThe current ACP wrapper directly reuses FollowinChatAgent:
ACP session corresponds to a
FollowinChatAgentsessionprompt()internally calls the existingchat_stream()Assistant text is passed back to the ACP client in streaming chunks
User profile is read from
FOLLOWIN_ACP_PROFILE_JSONby default, or uses a built-in default profile if not configured
If you are connecting to a local acpx / OpenClaw, you can start with a minimal configuration in ~/.acpx/config.json:
{
"agents": {
"followin": {
"command": "/path/to/python",
"args": ["-m", "followin_mcp.acp.server"],
"cwd": "/path/to/followin-mcp"
}
}
}No extra env writing is needed here:
followin_mcp.acp.serverwillload_dotenv()upon startupAs long as
cwdpoints to the project root, it will read the.envin the repository
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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

onchainos MCP Serverofficial
FlicenseNot gradedqualityBmaintenanceEnables on-chain operations including token search, market data, wallet management, swap execution, and DApp interactions across 20+ blockchains.324- AlicenseAqualityDmaintenanceEnables AI assistants to fetch news categories and hot news/tweets across various topics like crypto, DeFi, and AI.2350MIT
- FlicenseAqualityDmaintenanceProvides real-time Web3 research digest with macro news, KOL sentiment, market data, and personalized on-chain wallet analysis through four AI tools.4
Related MCP Connectors
Real-time curated crypto news for AI agents with sentiment, recaps, and search.
AI-enriched financial news for AI agents & trading bots: search, trending, insider, scored 1-10.
Track crypto token and narrative attention across platforms. Free key at trendsapi.ai
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/qinshoudawang/crypto-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server