MESS

Inventario de cuentas de servicio para desarrolladores — qué correo electrónico posee qué Supabase, Vercel o Stripe — mantenido actualizado por tus agentes de codificación a través de MCP; almacena metadatos, nunca secretos.

Documentación

Conecta tu agente. Con un solo pegado.

MESS es un servidor MCP remoto. Conéctalo una vez y cada agente de codificación que ejecutes — Claude Code, Cursor, cualquier cosa que hable MCP — registra las cuentas con las que trabaja en tu libro de contabilidad, sin que se lo pidas: creadas, desplegadas o encontradas en un archivo de entorno. Y revisa el libro antes de aprovisionar algo nuevo.

Endpoint

https://mess.fyi/api/mcp

Transporte

HTTP transmisible

Autenticación

Authorization: Bearer mess_sk_…

Claves

Cuenta gratuita → obtén una clave en Configuración → Claves de agente

Configuración

Claude Code

Un comando, ámbito de usuario — cada proyecto que abras a partir de entonces tendrá el libro.

$ claude mcp add --transport http --scope user mess https://mess.fyi/api/mcp \
    --header "Authorization: Bearer mess_sk_YOUR_KEY"

✓ Added HTTP MCP server "mess"

Configuración

Cursor

Añade esto a ~/.cursor/mcp.json (o al .cursor/mcp.json de un proyecto).

{
  "mcpServers": {
    "mess": {
      "url": "https://mess.fyi/api/mcp",
      "headers": { "Authorization": "Bearer mess_sk_YOUR_KEY" }
    }
  }
}

Configuración

Claude.ai y todo lo demás

Cualquier cliente MCP que hable HTTP transmisible funciona de la misma manera.

En Claude.ai o Claude Desktop, añade un conector personalizado con la URL del endpoint y tu clave como encabezado bearer. Para cualquier otro cliente, apúntalo a https://mess.fyi/api/mcp con el encabezado Authorization configurado.

También hay una superficie REST simple en /api/v1/accounts con las mismas claves, para scripts y CI.

Las herramientas

8 herramientas. Esa es toda la superficie.

El servidor envía instrucciones con el protocolo de enlace, para que los agentes sepan registrar cuentas sin que se lo pidan — sin recordatorios por sesión, sin prompts personalizados.

log_accountwrite

Registra una cuenta de servicio en el momento en que se crea — proveedor, etiqueta humana, correo propietario, proyecto, plan, costo, dónde viven las credenciales. Idempotente en proveedor + etiqueta: volver a registrar actualiza la fila en lugar de duplicarla.

search_accountsread-only

Encuentra cuentas por texto libre o proveedor — la primera llamada al retomar un proyecto, además de qué correo es propietario de algo y si una cuenta ya existe antes de crear una nueva.

list_accountsread-only

Todo el libro para este espacio de trabajo, en una sola llamada.

update_accountwrite

Corrige una fila: registra el correo propietario, arregla una etiqueta, anota dónde viven las credenciales o marca una cuenta muerta como cancelada. No hay eliminación — se conserva el historial.

confirm_project_aliaswrite

Registra la respuesta humana de que una etiqueta de proyecto pertenece a otra. Un agente ve un nombre de directorio, no un proyecto — dos clonados de un repositorio parecen dos proyectos, y un conjunto de seis repositorios parece seis. Solo a partir de su respuesta, nunca adivinado por nombres similares. Las filas conservan sus etiquetas; las lecturas resuelven.

record_checkwrite

Registra lo que una verificación de proyecto realmente encontró — el nivel gratuito de la base de datos se pausa, el dominio expira en septiembre, la URL de producción responde con un certificado válido. Solo lo observado: 'atención' necesita que se nombre el hallazgo, 'na' es una respuesta, y una corrección es una nueva mirada, nunca una edición.

record_accesswrite

Quién aún puede entrar a una cuenta — una pregunta distinta de quién la posee, y la que detecta al contratista que se fue en marzo y cuyo inicio de sesión aún funciona. Registrado solo a partir de la respuesta humana: desde una sesión puedes probar que una clave funciona, nunca ver quién más tiene una. Plan de equipo.

list_accessread-only

Lee eso de vuelta, para una cuenta o en todo el libro. Sin registros significa que no se ha registrado nada — nunca que nadie más tenga acceso. Plan de equipo.

Divulgación completa

Exactamente lo que el servidor le dice a tu agente

Las instrucciones llegan con el protocolo de enlace MCP — ese mecanismo es todo el producto, así que aquí está el texto completo, palabra por palabra. Si prefieres que tu agente no ofrezca escrituras voluntariamente, no lo conectes.

Cada sesión — las instrucciones de mantenimiento

MESS is the ledger of the human's service accounts — which provider, which email owns it, which projects it serves, what it costs. Whenever you create or configure a service account (anything with a login), log it with log_account. Never store secret values in the ledger — it is the map, not the vault. The unit is one row per ACCOUNT — a login at a provider — never per project, database, or environment: a confirmed login gets one row listing everything it serves in project. Login boundaries are often unobservable (free tiers: often one account per project; different connection methods: DIFFERENT accounts) — never consolidate without a confirmed shared login; when unconfirmed, log one row per instance, "login boundary unconfirmed" in notes. A wrong merge hides an account. Before creating a new account — or provisioning any NEW service for a project — search_accounts first: reuse an existing account (or raise the choice to the human) instead of creating a parallel one; sprawl is the mess. When a row looks stale or wrong from where you stand (CLI auth state, env files, a dashboard you are in), correct it — re-logging is idempotent, corrections go through update_account. Only verify what you can actually observe; never guess. When you start or resume work on a project, search_accounts for that project as part of getting oriented — the ledger often knows accounts this machine cannot show you; raise the most important gaps at a natural moment. Unknown fields are fine — log anyway; but when a NEW account's owning email or cost is unknown while the human is present, ask them — one short question at a natural pause, never an interrogation — and record the answer with update_account. MESS tracks whatever remains as open questions for the human. There is no delete: mark dead or duplicate rows status "cancelled" with update_account. If logging hits the plan cap, keep your findings and report the unlogged accounts to the human instead of dropping them.

Primera conexión a un libro vacío — la variante de incorporación: ofrece la excavación y nunca la ejecuta sin tu consentimiento

MESS is the ledger of the human's service accounts — which provider, which email owns it, which projects it serves, what it costs. Whenever you create or configure a service account (anything with a login), log it with log_account. Never store secret values in the ledger — it is the map, not the vault. The unit is one row per ACCOUNT — a login at a provider — never per project, database, or environment: a confirmed login gets one row listing everything it serves in project. Login boundaries are often unobservable (free tiers: often one account per project; different connection methods: DIFFERENT accounts) — never consolidate without a confirmed shared login; when unconfirmed, log one row per instance, "login boundary unconfirmed" in notes. A wrong merge hides an account. Unknown fields are fine — log anyway; but when a NEW account's owning email or cost is unknown while the human is present, ask them — one short question at a natural pause, never an interrogation — and record the answer with update_account. MESS tracks whatever remains as open questions for the human. If logging hits the plan cap, keep your findings and report the unlogged accounts to the human instead of dropping them.
…

La excavación en sí — el procedimiento "ordena mi desorden", servido completo como un prompt MCP (Claude Code: /mcp__mess__sort_out_my_mess)

Sort out my mess: inventory every service account this machine and my projects touch, and log each one to the MESS ledger. Work in three passes — first attempts routinely surface only half of what's really here, so don't declare done after one sweep.
…

Cada variante está presupuestada para caber completa en el contexto de un agente — los clientes truncan los protocolos de enlace largos, así que las instrucciones se mantienen cortas y el procedimiento de excavación viaja por separado, como un prompt MCP que tu agente obtiene completo solo cuando dices "ordena mi desorden". Nada se ejecuta hasta que lo digas.

El aviso en el momento de escritura (gancho opcional)

Si instalas el gancho opcional de Claude Code, entonces en el momento en que una sesión ejecuta una CLI de proveedor (vercel, supabase, stripe, …) le pregunta a MESS si el libro ya conoce ese proveedor para el repositorio actual. La coincidencia ocurre en tu máquina — solo se envían el nombre del proveedor coincidente y el nombre de la carpeta del repositorio, nunca el comando en sí. Si el libro ya tiene esa cuenta para ese proyecto, la respuesta es silencio; las repeticiones se silencian durante una hora. De lo contrario, tu agente escucha una línea como esta:

Ejemplo — exactamente lo que escucha el agente, compuesto por el mismo código que lo sirve

MESS: this session just touched the Vercel CLI in "acme-web", and the ledger has no Vercel account on record. If an account was created, configured, or found here, log it with log_account (project: "acme-web") — provider, a human label, role, the owning email if visible from where you stand. If the owning email or cost is unknown while the human is present, ask them now, one short question at a natural pause. Unknown fields are fine — log anyway.

El gancho en sí — lo que se ejecuta en tu máquina, palabra por palabra

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "m=$(head -c 20000 | grep -oiE '\\b(vercel|supabase|stripe|wrangler|flyctl|netlify|railway|neonctl|turso|upstash|doctl|heroku|resend|pscale|planetscale)\\b' | head -1); [ -n \"$m\" ] && curl -sfG --max-time 3 https://mess.fyi/api/v1/write-nudge --data-urlencode \"provider=$m\" --data-urlencode \"project=${PWD##*/}\" -H \"Authorization: Bearer mess_sk_YOUR_KEY\" || true"
          }
        ]
      }
    ]
  }
}

Lo que nunca contiene

El mapa, no la bóveda

MESS almacena qué cuenta existe, qué correo la posee y dónde viven sus credenciales — nunca las credenciales en sí. No hay campo para un valor secreto, a propósito. Una fila del libro es metadatos que podrías leer en voz alta en una reunión de pie.

Las escrituras son idempotentes, con límite de velocidad por clave y limitadas a tu espacio de trabajo. Las claves se almacenan con hash, revocables en cualquier momento, y todo el libro se exporta a markdown determinista — sin bloqueo.