Medium-MCP / docs /ARCHITECTURE.md
Nikhil Pravin Pise
feat: implement comprehensive improvement plan (Phases 1-5)
e98cc10
# Medium-MCP Architecture
## System Overview
```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Entry Points β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ server.py β”‚ app.py β”‚ CLI β”‚
β”‚ (MCP Server) β”‚ (Gradio UI) β”‚ (Commands) β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ β”‚ β”‚
β–Ό β–Ό β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ ScraperService β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Tier Chain β”‚ β”‚
β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚
β”‚ β”‚ β”‚ Cache β”‚β†’β”‚GraphQL β”‚β†’β”‚ HTTPX β”‚β†’β”‚Browser β”‚β†’... β”‚ β”‚
β”‚ β”‚ β”‚ (T0) β”‚ β”‚ (T10) β”‚ β”‚ (T20) β”‚ β”‚ (T30) β”‚ β”‚ β”‚
β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ β”‚ β”‚
β–Ό β–Ό β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ database β”‚ β”‚ extractor β”‚ β”‚ parser β”‚
β”‚ (SQLite) β”‚ β”‚ (Apollo/LD) β”‚ β”‚ (HTML) β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```
---
## Core Modules
### Entry Points
| Module | Purpose |
|--------|---------|
| `server.py` | MCP server (FastMCP) |
| `app.py` | Gradio web UI |
### Service Layer
| Module | Purpose |
|--------|---------|
| `src/service.py` | ScraperService orchestration |
| `src/tiers/` | Tier chain pattern |
### Data Layer
| Module | Purpose |
|--------|---------|
| `src/database.py` | SQLite caching |
| `src/extractor.py` | Content extraction |
| `src/parser.py` | HTML parsing |
### Infrastructure
| Module | Purpose |
|--------|---------|
| `src/http_pool.py` | Connection pooling |
| `src/resilience.py` | Circuit breaker |
| `src/validation.py` | Input validation |
| `src/security.py` | Rate limiting |
---
## Tier Chain
| Priority | Tier | Description |
|----------|------|-------------|
| 0 | Cache | SQLite lookup |
| 10 | GraphQL | Medium API |
| 20 | HTTPX | Fast HTTP |
| 30 | Browser | Playwright |
| 40 | Wayback | Archive.org |
Each tier returns `TierResult(success, data, error)`.
---
## Data Flow
```
URL β†’ validate β†’ resolve_id β†’ tier_chain β†’ extract β†’ cache β†’ render
```
1. **Validate**: Check URL format
2. **Resolve**: Extract post ID
3. **Tier Chain**: Try each tier until success
4. **Extract**: Parse Apollo/JSON-LD
5. **Cache**: Store in SQLite
6. **Render**: Output markdown/HTML
---
## Package Structure
```
Medium-MCP/
β”œβ”€β”€ src/
β”‚ β”œβ”€β”€ tiers/ # Tier implementations
β”‚ β”œβ”€β”€ validation.py # Input validation
β”‚ β”œβ”€β”€ security.py # Rate limiting
β”‚ β”œβ”€β”€ exceptions.py # Error handling
β”‚ └── metrics.py # Performance metrics
β”œβ”€β”€ mcp/
β”‚ β”œβ”€β”€ schemas.py # Pydantic models
β”‚ └── tools/ # Tool implementations
β”œβ”€β”€ ui/
β”‚ └── styles/ # CSS modules
β”œβ”€β”€ tests/
β”‚ β”œβ”€β”€ unit/
β”‚ β”œβ”€β”€ integration/
β”‚ └── e2e/
└── docs/
```