Hace un par de semanas escribí sobre por qué los agentes de IA necesitan tokens personales. La configuración del final de ese artículo funciona bien en Claude Code: creas un token, ejecutas un comando y tu agente ya puede leer los reportes de bugs.
Luego la gente intentó añadir BugDump a Claude en la web, y no funcionó.
En un conector personalizado de Claude no hay dónde pegar un token. En ChatGPT tampoco. VS Code acepta una cabecera si editas su archivo de configuración, pero su flujo «Add Server» no la pide. Los clientes MCP que usa la mayoría de la gente esperan una URL, y cuando el servidor responde 401, esperan poder iniciar sesión.
Así que añadí el inicio de sesión al servidor MCP. El código fue la parte pequeña. Esto es lo que ve quien se conecta, y las cuatro decisiones que se llevaron la mayor parte del tiempo.
Cómo inicia sesión un cliente MCP
Copias https://api.bugdump.com/api/mcp y lo añades a Claude como conector personalizado, o haces clic en Añadir a Claude en la página MCP de tu proyecto, que copia la URL por ti. Claude abre una página de BugDump en tu navegador. Inicias sesión, eliges si la app puede hacer cambios o solo leer, y haces clic en Permitir.

Por debajo, es el flujo que describe la especificación de MCP. La primera petición vuelve como un 401 con una cabecera WWW-Authenticate que apunta a un pequeño documento JSON. Ese documento indica qué servidor se encarga del inicio de sesión. Claude obtiene los metadatos de ese servidor, te manda a la página de inicio de sesión e intercambia el resultado por un token. Nada de esto es específico de Claude. A un cliente que sigue la especificación le basta la URL para encontrar la página de inicio de sesión.
Una conexión para todos tus proyectos
Los tokens personales de BugDump están ligados a un solo proyecto. Es un modelo ordenado. Un token de Acme Store no puede ver Acme Admin, y nadie tiene que preguntarse en qué proyecto está trabajando el agente.
Mi idea era mantenerlo también para el inicio de sesión: una conexión por proyecto, quizá con una URL por proyecto. Luego intenté añadir una segunda. Claude no añade dos veces la misma URL de conector, y una URL distinta por proyecto significa un conector aparte que configurar y vigilar para cada uno. Alguien con tres proyectos acabaría con tres conectores, y la mayoría se quedaría en el primero.
Así que una conexión con inicio de sesión te pertenece a ti, no a un proyecto. Llega a todos los proyectos de los que eres miembro, y todas las demás herramientas aceptan un argumento extra, project: el slug del proyecto, que se puede omitir si solo perteneces a uno. Una herramienta nueva, list_projects, le dice al asistente a qué tiene acceso, incluida la clave de cada proyecto, para que sepa que AS-1 vive en Acme Store.
La parte que más me gusta es lo que pasa cuando el asistente olvida decir a qué proyecto se refiere. BugDump no elige uno por él. Si perteneces a más de un proyecto, la llamada devuelve esto:
{
"error": "MCP_PROJECT_REQUIRED",
"message": "This account belongs to several projects. Pass `project` with the slug of the one the user means.",
"projects": [
{ "slug": "acme-admin", "key": "AA", "name": "Acme Admin", "role": "OWNER" },
{ "slug": "acme-store", "key": "AS", "name": "Acme Store", "role": "OWNER" }
]
}
Llega como resultado de la propia herramienta y no como error de protocolo, así que el modelo lo lee y lo vuelve a intentar con el slug correcto. No debería pasar a menudo: las instrucciones del servidor le dicen al asistente que llame a list_projects antes de hacer cualquier otra cosa.
La pertenencia se comprueba en cada llamada. Si alguien sale de un proyecto, su asistente pierde el acceso en la siguiente petición, y no hay nada que limpiar.
Solo clientes conocidos: Client ID Metadata Documents
En el OAuth clásico, una app se registra en el servidor antes de poder pedirle acceso a nadie, ya sea a mano o mediante Dynamic Client Registration. El enfoque más reciente que recomienda la especificación de MCP, Client ID Metadata Documents, hace que una app se identifique con una URL que ella misma controla. La de Claude es un archivo JSON en claude.ai que, entre otras cosas, enumera las direcciones en las que Claude puede recibir el resultado del inicio de sesión.
Es un buen diseño. Pero, por sí solo, significa que cualquiera que pueda alojar un archivo JSON puede aparecer en tu página de consentimiento con el nombre que quiera.
Así que BugDump acepta cuatro apps: Claude, Claude Code y VS Code por la URL exacta de su documento, y ChatGPT por un patrón fijo en chatgpt.com, porque publica un documento por conexión. La página de consentimiento muestra el nombre de la app y el host donde vive su documento («Solicitado por claude.ai»), que la app no puede falsificar. Dynamic Client Registration está desactivado. Cursor lo usa, así que Cursor sigue con un token personal, igual que los scripts y los jobs de CI. Para eso sirven los tokens, de todas formas.
Comprobar el token, el consentimiento y la cuenta en cada petición
Un token de acceso dura una hora. Después, la app cambia en silencio un refresh token por uno nuevo, y así una conexión sigue viva durante semanas sin pedirte que vuelvas a iniciar sesión. El problema es que el paso de refresco no se detiene a preguntar si todavía quieres la app conectada, ni si tu cuenta sigue activa.
Así que el endpoint MCP de BugDump lo pregunta cada vez. En cada petición comprueba que el token de acceso existe y no ha caducado, que tu consentimiento para esa app sigue existiendo y que tu cuenta está activa y no es de invitado. Desconectar una app borra su consentimiento y todos sus tokens de una vez, y su siguiente llamada falla con un 401 que la manda de vuelta a la página de inicio de sesión. Cambiar o restablecer tu contraseña desconecta todas las apps a la vez, que es lo que quieres si la cambias porque algo se filtró.

Los tokens en sí son cadenas aleatorias guardadas como hashes, igual que los tokens personales. No hay claves de firma que rotar, y revocar un token es borrar una fila.
El asistente sigue actuando en tu nombre
Todo lo demás se quedó igual a propósito. Una app conectada con inicio de sesión actúa en tu nombre y ve lo mismo que tú. Cada cambio que hace aparece en el historial y los comentarios de la tarea con tu nombre y la etiqueta vía MCP, y el registro de auditoría guarda qué app lo hizo. Si eliges Solo lectura, las herramientas de escritura ni siquiera se registran: el modelo nunca ve move_task, así que no puede intentar llamarla.

Ese es Claude con un bug del pago en Safari. Leyó la tarea, dejó una nota sobre dónde mirar primero, la movió a «En progreso» y la asignó. Cualquiera que lea la tarea después ve con claridad qué parte vino del asistente.
Lo que todavía falta pulir
ChatGPT necesita el modo desarrollador para añadir un servidor MCP personalizado, y el modo desarrollador requiere un plan de pago de ChatGPT.
Cambiar el acceso implica volver a conectar. Para dar acceso de escritura a una app de solo lectura, la desconectas y la vuelves a conectar. Prefiero que tomes esa decisión a conciencia y no con un interruptor que luego olvidas, pero es un paso más.
La etiqueta todavía no nombra la app. Un comentario dice «vía MCP», no «vía Claude». Cada comentario y cada entrada del historial ya guardan qué app los creó; la página de la tarea simplemente no lo muestra todavía.
Conectar BugDump a Claude, ChatGPT o VS Code
Abre la página Servidor MCP de cualquier proyecto y haz clic en Añadir a Claude, o copia la URL en ChatGPT o VS Code. Los pasos para cada app están en Conectar Claude, ChatGPT o VS Code a BugDump. Si usas Cursor o estás conectando un script, los tokens personales siguen funcionando igual que antes: consulta Usar BugDump con Claude Code (MCP).
Te puede interesar
Autenticación en servidores MCP: por qué los agentes de IA necesitan tokens personales — por qué una clave compartida deja de servir en cuanto el agente puede escribir.
Lo que aprendí creando un servidor MCP para una herramienta de desarrollo — las decisiones de las que depende que un agente use bien las herramientas a la primera.
Por qué tu agente de IA hace 40 llamadas para responder una pregunta — cómo el diseño de las herramientas MCP multiplica las llamadas de un agente.