No description
  • Python 90.9%
  • HTML 9.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-07-28 16:40:29 +00:00
newsagg Stage 01: Lauffähiger POC, an lokales Claude anbindbar 2026-07-28 18:38:15 +02:00
scripts Stage 01: Lauffähiger POC, an lokales Claude anbindbar 2026-07-28 18:38:15 +02:00
templates Stage 01: Lauffähiger POC, an lokales Claude anbindbar 2026-07-28 18:38:15 +02:00
tests Stage 01: Lauffähiger POC, an lokales Claude anbindbar 2026-07-28 18:38:15 +02:00
.env.example Stage 01: Lauffähiger POC, an lokales Claude anbindbar 2026-07-28 18:38:15 +02:00
.gitignore Stage 01: Lauffähiger POC, an lokales Claude anbindbar 2026-07-28 18:38:15 +02:00
app.py Stage 01: Lauffähiger POC, an lokales Claude anbindbar 2026-07-28 18:38:15 +02:00
config.yaml Stage 01: Lauffähiger POC, an lokales Claude anbindbar 2026-07-28 18:38:15 +02:00
init_db.py Stage 01: Lauffähiger POC, an lokales Claude anbindbar 2026-07-28 18:38:15 +02:00
Lastenheft_News_Aggregator.md Stage 01: Lauffähiger POC, an lokales Claude anbindbar 2026-07-28 18:38:15 +02:00
LICENSE Initial commit 2026-07-28 15:09:33 +00:00
mcp_server.py Stage 01: Lauffähiger POC, an lokales Claude anbindbar 2026-07-28 18:38:15 +02:00
NOTIZEN_Stage1.md Stage 01: Lauffähiger POC, an lokales Claude anbindbar 2026-07-28 18:38:15 +02:00
PRIVACY.md Stage 01: Lauffähiger POC, an lokales Claude anbindbar 2026-07-28 18:38:15 +02:00
README.md Stage 01: Lauffähiger POC, an lokales Claude anbindbar 2026-07-28 18:38:15 +02:00
requirements.txt Stage 01: Lauffähiger POC, an lokales Claude anbindbar 2026-07-28 18:38:15 +02:00
sources.yaml Stage 01: Lauffähiger POC, an lokales Claude anbindbar 2026-07-28 18:38:15 +02:00

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).

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.json

Unter %APPDATA%\Claude\ liegt eine gleichnamige Datei, die die App ignoriert — Änderungen dort bleiben wirkungslos. Die Logs stehen im Unterordner logs\ desselben Paketverzeichnisses, je Server als mcp-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 werden
  • NOTIZEN_Stage1.md — Messergebnisse aller Abnahmekriterien, Feed-Korrekturen und Bewertung der offenen Risiken R-3 (Cluster-Schwellwert) und R-4 (Blindspots)