- Python 90.9%
- HTML 9.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| newsagg | ||
| scripts | ||
| templates | ||
| tests | ||
| .env.example | ||
| .gitignore | ||
| app.py | ||
| config.yaml | ||
| init_db.py | ||
| Lastenheft_News_Aggregator.md | ||
| LICENSE | ||
| mcp_server.py | ||
| NOTIZEN_Stage1.md | ||
| PRIVACY.md | ||
| README.md | ||
| requirements.txt | ||
| sources.yaml | ||
AINewsAgent — News-Aggregator mit Bias-Balancing (Stage 1)
Lokaler POC laut Lastenheft_News_Aggregator.md: liest deutschsprachige
Nachrichtenfeeds, clustert Artikel zu Stories, macht die Bias-Verteilung
sichtbar (inkl. Blindspot-Erkennung) und liefert ein filterblasenbrechendes
Ranking — über eine Web-Oberfläche und einen MCP-Server für Claude Desktop.
Setup
python -m venv .venv
.venv\Scripts\pip install -r requirements.txt
.venv\Scripts\python init_db.py # AK-1.1: Schema + WAL + Quellen-Sync
.venv\Scripts\python scripts\check_feeds.py # Q-1.1: Feed-Validierung
Web-App starten
.venv\Scripts\uvicorn app:app --port 8000
Beim ersten Start mit leerer DB läuft sofort ein Ingestion-Lauf (danach alle
30 Minuten, config.yaml). Der erste Lauf lädt das Embedding-Modell
(~500 MB) herunter und dauert einige Minuten (NFA-1.3: < 15 min).
- Feed: http://localhost:8000 (Nutzerwahl per Name, kein Login)
- Quellen/Bias: http://localhost:8000/sources
Ein Ingestion-Lauf lässt sich auch manuell anstoßen:
.venv\Scripts\python -c "from newsagg.ingestion import run_ingestion; run_ingestion()"
MCP-Server für Claude Desktop
Der Eintrag ist bereits ergänzt (bestehende Server unverändert, Backup als
claude_desktop_config.json.bak-newsagg daneben). Claude Desktop muss
einmal vollständig beendet und neu gestartet werden, damit der Server
erscheint.
Achtung, Pfadfalle: Claude Desktop ist hier als MSIX-/Store-App installiert und liest seine Konfiguration nicht aus
%APPDATA%\Claude\, sondern aus dem virtualisierten Paketverzeichnis:%LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\claude_desktop_config.jsonUnter
%APPDATA%\Claude\liegt eine gleichnamige Datei, die die App ignoriert — Änderungen dort bleiben wirkungslos. Die Logs stehen im Unterordnerlogs\desselben Paketverzeichnisses, je Server alsmcp-server-<name>.log.
{
"mcpServers": {
"news-aggregator": {
"command": "C:\\Users\\nicof\\Documents\\AINewsAgent\\.venv\\Scripts\\python.exe",
"args": ["C:\\Users\\nicof\\Documents\\AINewsAgent\\mcp_server.py"],
"env": { "NEWSAGG_USER": "nico" }
}
}
}
Tools: get_briefing, get_story, list_blindspots, get_bias_profile,
record_interaction. Der MCP-Prozess lädt kein Embedding-Modell und liest
die SQLite-Datei read-only (WAL-Modus, parallel zur Web-App). NEWSAGG_USER
bestimmt, wessen Profil das Ranking verwendet — derselbe Name wie in der
Web-Oberfläche ergibt denselben Feed.
Tests
.venv\Scripts\python -m pytest
Optional: LLM-Zusammenfassungen
ANTHROPIC_API_KEY in .env setzen und in config.yaml
summaries.enabled: true. Ohne Key läuft die App vollständig ohne
Zusammenfassungen (FA-1.23/AK-1.8).
Konfiguration
config.yaml— alle Parameter (Intervalle, Schwellwerte, Quoten, Gewichte)sources.yaml— Quellenliste und Bias-Einordnung (subjektive Betreibersetzung, frei editierbar; wirkt beim nächsten Start)PRIVACY.md— welche Nutzerdaten gespeichert werden und wie sie gelöscht werdenNOTIZEN_Stage1.md— Messergebnisse aller Abnahmekriterien, Feed-Korrekturen und Bewertung der offenen Risiken R-3 (Cluster-Schwellwert) und R-4 (Blindspots)