deadwax
Deadwax
Un bibliotecario musical agéntico sobre un historial de escucha personal. Responde preguntas en lenguaje natural sobre lo que has escuchado y crea listas de reproducción sujetas a restricciones duras — con un validador determinista, un bucle de reparación y una suite de evaluación que informa tasas de aprobado en lugar de aprobado/suspenso.
Construido como pieza de portafolio que demuestra prácticas de ingeniería de LLM en producción: uso de herramientas, recuperación, trazado, evaluación y MCP.
La parte interesante
La mayoría de las demos de LLM funcionan hasta que las ejecutas dos veces. Deadwax está construido en torno a lo que ocurre en la segunda ejecución.
El sistema se divide en una línea: el modelo nunca calcula. Interpreta el lenguaje, elige herramientas y compone prosa. Cada operación aritmética, comprobación de umbrales y adjudicación de restricciones ocurre en Python puro que no tiene idea de que existe un LLM. Cuando una lista de reproducción viola una restricción, el validador no devuelve False — devuelve un código de violación, los ids de las pistas infractoras y un remedio concreto, que es la única razón por la que un bucle de reparación automatizado puede funcionar.
La viabilidad se comprueba antes de la generación. Si un encargo no puede satisfacerse, el sistema lo dice. Nunca rellena, sustituye ni degrada silenciosamente — status="infeasible" es un resultado correcto con sus propios casos de evaluación.
Related MCP server: Navidrome-MCP
Reglas de arquitectura
No son preferencias estilísticas. Violar cualquiera de estas anula el propósito del proyecto.
El modelo nunca calcula.
Las descripciones de herramientas son control de comportamiento — son prompts, no documentación. Cambiar una es un cambio de comportamiento y se re-evalúa antes de fusionar.
Las violaciones son procesables por máquina: un código, los ids infractores, un remedio. Nunca un booleano desnudo, nunca prosa sola.
La viabilidad se comprueba antes de la generación.
El fracaso es un resultado válido.
Las restricciones duras se miden y se hacen cumplir. Las restricciones blandas se infieren y se puntúan, y llevan un campo
provenanceque cualquier mensaje sobre ellas debe revelar.Ninguna llamada al modelo sin una traza.
Las decisiones y sus compensaciones se documentan en docs/adr.
Stack
Todo se ejecuta en un plan gratuito. Eso es una restricción dura, no una preferencia.
Capa | Elección |
Lenguaje | Python 3.13 |
Cadena de herramientas | uv para las dependencias y el propio Python, ruff para lint y formato, pytest |
Agente | LangChain, introducido en la etapa 3 y no antes |
Modelo | Google Gemini Flash, con respaldo de OpenRouter |
Almacenamiento | SQLite mediante el módulo de la biblioteca estándar |
Recuperación | Embeddings en tiempo de compilación, similitud coseno en Python puro — sin base de datos vectorial |
Trazado | Langfuse |
Interoperabilidad | Servidor Model Context Protocol |
Frontend | Astro en Cloudflare Pages — el único componente JavaScript |
Las etapas 0 a 2 usan solo la biblioteca estándar — sin framework, sin SDK, sin dependencias. La llamada HTTP en bruto se escribe a mano antes de introducir cualquier abstracción, de modo que cuando un framework tergiversa lo que hace, la diferencia es visible.
Progreso de la construcción
Doce etapas, cuatro fases. Una rama y un PR con squash-merge por etapa, de modo que el historial se lee como la construcción realmente ocurrió.
Fase | Etapa | Estado |
A · Cimientos | 0 · Una llamada en bruto | 🔨 en curso |
A · Cimientos | 1 · Datos de prueba | ⬜ |
A · Cimientos | 2 · Núcleo determinista | ⬜ |
B · El agente | 3 · Primer bucle de herramientas | ⬜ |
B · El agente | 4 · Medir la variabilidad | ⬜ |
B · El agente | 5 · Banco de pruebas de evaluación | ⬜ |
C · Mejorándolo | 6 · Bucle de reparación | ⬜ |
C · Mejorándolo | 7 · Casos adversariales | ⬜ |
C · Mejorándolo | 8 · Trazado | ⬜ |
C · Mejorándolo | 9 · Recuperación | ⬜ |
D · Lanzamiento | 10 · Datos reales | ⬜ |
D · Lanzamiento | 11 · Servidor MCP | ⬜ |
D · Lanzamiento | 12 · Sitio y artículo | ⬜ |
Cómo ejecutarlo
Necesitas uv. Instala y gestiona el propio Python, así que es el único requisito previo.
winget install --id=astral-sh.uv -eLuego, desde la raíz del repositorio:
uv syncEso crea un entorno virtual, instala la versión de Python fijada desde .python-version e instala el proyecto.
Añade una clave gratuita de Gemini API desde Google AI Studio:
copy .env.example .envPega la clave después de GEMINI_API_KEY=. Luego mira a qué modelos puede acceder tu clave, ya que los catálogos del plan gratuito cambian sin previo aviso:
uv run scripts/raw_call.py --listPon uno de esos ids en .env como GEMINI_MODEL y haz la llamada:
uv run scripts/raw_call.pyImprime la solicitud completa y la respuesta completa antes de extraer la respuesta. Ese es el objetivo del script — las formas merecen conocerse antes de que un framework las oculte.
Los límites de velocidad reales de tu cuenta se muestran en aistudio.google.com/rate-limit; Google ya no publica una tabla de plan gratuito por modelo en la documentación de la API.
Evaluación
La suite de evaluación llega en la etapa 5. Los casos se escriben a mano y nunca se generan — si la misma herramienta escribe tanto el código como la calificación, la puntuación no significa nada. Las puntuaciones se informan como tasas de aprobado en ejecuciones repetidas, porque un solo aprobado en un sistema no determinista es una anécdota.
Cualquier commit que cambie un prompt, una descripción de herramienta o un modelo lleva puntuaciones de evaluación antes/después en su mensaje.
Licencia
MIT. Consulta LICENSE.
Creado por 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