deadwax
Deadwax
Ein agentischer Musik-Bibliothekar über einem persönlichen Hörverlauf. Er beantwortet natürlichsprachliche Fragen zu dem, was du gehört hast, und erstellt Playlists unter harten Beschränkungen – mit einem deterministischen Validator, einer Reparaturschleife und einer Evaluationssuite, die Pass-Raten statt Pass/Fail meldet.
Als Portfolio-Projekt gebaut, das die Praxis der LLM-Entwicklung in der Produktion demonstriert: Werkzeugnutzung, Abruf, Tracing, Evaluierung und MCP.
Der interessante Teil
Die meisten LLM-Demos funktionieren, bis man sie zweimal ausführt. Deadwax ist um das herum gebaut, was beim zweiten Lauf passiert.
Das System ist entlang einer Linie geteilt: Das Modell rechnet nie. Es interpretiert Sprache, wählt Werkzeuge und verfasst Prosa. Jede arithmetische Operation, Schwellenwertprüfung und Beschränkungsentscheidung passiert in einfachem Python, das keine Ahnung hat, dass ein LLM existiert. Wenn eine Playlist eine Beschränkung verletzt, gibt der Validator nicht False zurück – er gibt einen Verletzungscode, die betreffenden Track-IDs und eine konkrete Abhilfe zurück, was der einzige Grund ist, warum eine automatisierte Reparaturschleife überhaupt funktionieren kann.
Die Machbarkeit wird vor der Generierung geprüft. Wenn ein Brief nicht erfüllt werden kann, sagt das System das. Es füllt nie auf, ersetzt nicht und degradiert nicht stillschweigend – status="infeasible" ist ein korrektes Ergebnis mit eigenen Evaluationsfällen.
Related MCP server: Navidrome-MCP
Architekturregeln
Keine stilistischen Vorlieben. Die Verletzung einer dieser Regeln macht den Zweck des Projekts zunichte.
Das Modell rechnet nie.
Werkzeugbeschreibungen sind Verhaltenskontrolle – sie sind Prompts, keine Dokumentation. Eine Änderung ist eine Verhaltensänderung und wird vor dem Mergen neu evaluiert.
Verletzungen sind maschinenverwertbar: ein Code, die betreffenden IDs, eine Abhilfe. Nie ein nackter Boolean, nie nur Prosa.
Die Machbarkeit wird vor der Generierung geprüft.
Fehlschlag ist ein gültiges Ergebnis.
Harte Beschränkungen werden gemessen und durchgesetzt. Weiche Beschränkungen werden abgeleitet und bewertet und tragen ein
provenance-Feld, das jede Nachricht über sie offenlegen muss.Kein Modellaufruf ohne Trace.
Entscheidungen und ihre Abwägungen sind in docs/adr festgehalten.
Stack
Alles läuft auf einem kostenlosen Tarif. Das ist eine harte Beschränkung, keine Vorliebe.
Schicht | Wahl |
Sprache | Python 3.13 |
Werkzeugkette | uv für Abhängigkeiten und Python selbst, ruff für Linting und Formatierung, pytest |
Agent | LangChain, eingeführt in Stufe 3 und nicht früher |
Modell | Google Gemini Flash, mit OpenRouter-Fallback |
Speicher | SQLite über das |
Abruf | Build-Zeit-Embeddings, Kosinus-Ähnlichkeit in einfachem Python – keine Vektordatenbank |
Tracing | Langfuse |
Interop | Model Context Protocol-Server |
Frontend | Astro auf Cloudflare Pages – die eine JavaScript-Komponente |
Die Stufen 0 bis 2 verwenden nur die Standardbibliothek – kein Framework, kein SDK, keine Abhängigkeiten. Der rohe HTTP-Aufruf wird von Hand geschrieben, bevor eine Abstraktion eingeführt wird, damit der Unterschied sichtbar ist, wenn ein Framework falsch darstellt, was es tut.
Baufortschritt
Zwölf Stufen, vier Phasen. Ein Branch und ein Squash-Merge-PR pro Stufe, damit die Historie so liest, wie der Bau tatsächlich passiert ist.
Phase | Stufe | Status |
A · Grundlage | 0 · Ein roher Aufruf | 🔨 in Arbeit |
A · Grundlage | 1 · Fixture-Daten | ⬜ |
A · Grundlage | 2 · Deterministischer Kern | ⬜ |
B · Der Agent | 3 · Erste Werkzeugschleife | ⬜ |
B · Der Agent | 4 · Das Wackeln messen | ⬜ |
B · Der Agent | 5 · Evaluations-Harness | ⬜ |
C · Verbesserung | 6 · Reparaturschleife | ⬜ |
C · Verbesserung | 7 · Adversarische Fälle | ⬜ |
C · Verbesserung | 8 · Tracing | ⬜ |
C · Verbesserung | 9 · Abruf | ⬜ |
D · Auslieferung | 10 · Echte Daten | ⬜ |
D · Auslieferung | 11 · MCP-Server | ⬜ |
D · Auslieferung | 12 · Website und Bericht | ⬜ |
Ausführen
Du brauchst uv. Es installiert und verwaltet Python selbst, also ist es die einzige Voraussetzung.
winget install --id=astral-sh.uv -eDann, vom Repository-Root aus:
uv syncDas erstellt eine virtuelle Umgebung, installiert die festgelegte Python-Version aus .python-version und installiert das Projekt.
Füge einen kostenlosen Gemini-API-Schlüssel von Google AI Studio hinzu:
copy .env.example .envFüge den Schlüssel nach GEMINI_API_KEY= ein. Dann sieh nach, welche Modelle dein Schlüssel erreichen kann, da sich die Kataloge des kostenlosen Tarifs ohne Vorankündigung ändern:
uv run scripts/raw_call.py --listSetze eine dieser IDs in .env als GEMINI_MODEL und führe den Aufruf aus:
uv run scripts/raw_call.pyEs gibt die vollständige Anfrage und die vollständige Antwort aus, bevor die Antwort extrahiert wird. Das ist der Sinn des Skripts – die Formen sind es wert, zu wissen, bevor ein Framework sie versteckt.
Die tatsächlichen Ratenlimits deines Kontos werden unter aistudio.google.com/rate-limit angezeigt; Google veröffentlicht keine Tabelle mehr pro Modell für den kostenlosen Tarif in der API-Dokumentation.
Evaluierung
Die Evaluationssuite kommt in Stufe 5. Fälle werden von Hand geschrieben und nie generiert – wenn dasselbe Werkzeug sowohl den Code als auch die Bewertung schreibt, bedeutet die Punktzahl nichts. Punktzahlen werden als Pass-Raten über wiederholte Läufe berichtet, denn ein einzelner Pass auf einem nicht-deterministischen System ist eine Anekdote.
Jeder Commit, der einen Prompt, eine Werkzeugbeschreibung oder ein Modell ändert, trägt Vorher/Nachher-Evaluierungspunktzahlen in seiner Nachricht.
Lizenz
MIT. Siehe LICENSE.
Erstellt von David Koen.
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
- FlicenseBqualityDmaintenanceEnables music management through search, playlist creation, and intelligent recommendations. Supports searching by song, artist, or album, creating and managing playlists, and getting music recommendations based on genre and mood.713
- AlicenseNot gradedqualityAmaintenanceAnalyze listening patterns, create custom playlists, discover missing albums, validate radio streams, and provide personalized recommendations through natural language.26783AGPL 3.0
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Spotify through natural language for music discovery, playback control, library management, and playlist creation. Supports searching for music, controlling playback, managing saved tracks, and getting personalized recommendations based on mood and preferences.1095MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to search YouTube Music, manage playlists, and create smart recommendations using natural language.13
Related MCP Connectors
Deterministic music theory for agents: analyze, voice, reharmonize, conduct — computed, not guessed
Adaptive plan/build/review cycles for AI coding assistants, persisted across sessions.
Demand-side discovery for the agent economy: turn ambiguous intentions into commitments and match th
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/TheDavidKoen/deadwax'
If you have feedback or need assistance with the MCP directory API, please join our Discord server