How rmouahid/novit works
NovIT is an MCP server that collects technology-news articles, classifies and stores them, then serves profile-aware news and related tools to MCP clients. The documented principal workflow is client → MCP tools → handlers → cache or collection → article storage → formatted results. Additional branches cover search and analysis, user preferences and feedback, and stdio/optional HTTP transport. Source excerpts support the main handler, scraper-manager and storage interactions; other capabilities and links are included only where the README or source index documents them.
Main entry points: handlers.py Tool handlers · storage.py Article store · server.py MCP server · manager.py Scraper manager
Components 27
MCP interface
- MCP server
novit/mcp/server.py - Tool handlers
novit/mcp/handlers.py - Tool schemas
novit/mcp/schemas.py - HTTP transport
novit/mcp/http.py - TTL cache
novit/mcp/cache.py
Collection
- Scraper manager
novit/scrapers/manager.py - Source scrapers
- Polite HTTP client
novit/scrapers/http.py
Article processing
- Article model
novit/scrapers/base.py - Domain tagger
novit/scrapers/tagger.py - Deduplication
novit/scrapers/deduplication.py - Article store
novit/scrapers/storage.py - Offline fallback
novit/mcp/offline.py - Runtime settings
novit/settings.py
User context
- Profiles
novit/profiles/profile.py - Profile ranking
novit/profiles/filter.py - User preferences
novit/profiles/preferences.py - User context
novit/mcp/users.py - Sessions
novit/mcp/session.py
Insights and feedback
- Daily summary
novit/mcp/daily.py - Trend analysis
novit/mcp/trends.py - Related articles
novit/mcp/related.py - Unusual articles
novit/mcp/unusual.py - User feedback
novit/mcp/feedback.py - Health checks
novit/mcp/health.py
Other components
- MCP client
- News sources
Connections 35
- MCP client → MCP server: calls tools
- MCP server → Tool handlers: dispatches tools
novit/mcp/server.py - MCP server → Tool schemas: declares contracts
novit/mcp/server.py - MCP server → HTTP transport: serves optionally
novit/mcp/server.py - Tool handlers → TTL cache: checks cache
novit/mcp/handlers.py - Tool handlers → Article store: reads and saves
novit/mcp/handlers.py - Tool handlers → Scraper manager: starts collection
novit/mcp/handlers.py - Tool handlers → Domain tagger: tags collected
novit/mcp/handlers.py - Tool handlers → Offline fallback: falls back
novit/mcp/handlers.py - Tool handlers → Profiles: selects profile
novit/mcp/handlers.py - Tool handlers → Profile ranking: ranks articles
novit/mcp/handlers.py - Scraper manager → Source scrapers: runs in parallel
novit/scrapers/manager.py - Scraper manager → Deduplication: deduplicates results
novit/scrapers/manager.py - Source scrapers → Polite HTTP client: fetches through
novit/scrapers/http.py - Polite HTTP client → News sources: requests articles
- Source scrapers → Article model: produces articles
novit/scrapers/base.py - Scraper manager → Article model: aggregates articles
novit/scrapers/manager.py - Domain tagger → Article model: annotates articles
novit/scrapers/tagger.py - Article store → Article model: stores articles
novit/scrapers/storage.py - Runtime settings → Polite HTTP client: configures requests
novit/scrapers/http.py - Runtime settings → Article store: configures database
- Profiles → Runtime settings: loads configuration
novit/profiles/profile.py - Profile ranking → Profiles: uses weights
novit/profiles/filter.py - Tool handlers → Daily summary: builds summaries
novit/mcp/server.py - Tool handlers → Trend analysis: dispatches analysis
novit/mcp/server.py - Tool handlers → Related articles: dispatches lookup
- Tool handlers → Unusual articles: dispatches lookup
novit/mcp/server.py - Tool handlers → User feedback: records feedback
- Tool handlers → Health checks: serves health
novit/mcp/health.py - User feedback → User context: captures context
- User preferences → User context: scopes preferences
novit/profiles/preferences.py - Sessions → User context: scopes sessions
novit/mcp/session.py - Trend analysis → Article store: reads articles
novit/mcp/trends.py - Related articles → Article store: reads articles
novit/mcp/related.py - Unusual articles → Article store: reads articles
novit/mcp/unusual.py