code y message siempre están ahí. Se agrega uno de details, permission o
retry_after_seconds cuando aplica.
codees una palabra de una lista cerrada, para que tu programa se ramifique sobre ella.messagees una frase, para que la lea una persona. Es la misma frase que muestra la consola para el mismo rechazo, así que un comercializador y un integrador que ven el mismo problema ven las mismas palabras.detailsaparece eninvalid_input: un mapa de nombre de campo a una lista de mensajes cuando la propia validación del espacio de trabajo rechazó, o de puntero JSON (/destination) a un mensaje cuando la solicitud falló la validación de esquema.permissionaparece enmissing_permission: el permiso que le falta al token.retry_after_secondsaparece enrate_limited, y en ellimit_reachedpor hora.
Los códigos
La lista vive en el esquemaError de la referencia de la API, y ese esquema se genera
desde la API misma, así que siempre está actualizado. En resumen, los códigos caen en
cuatro familias:
- La puerta —
unauthenticated(401),subscription_requiredysubscription_ended(402),missing_permissionyrole_forbids(403),rate_limited(429). Ver Autenticación y tokens y Límites de solicitudes. - El plan —
plan_forbids(403) cuando el plan no incluye la función,limit_reached(429) cuando se alcanza uno de los dos límites de abuso en la página Límites de solicitudes, conRetry-Aftersolo para el que es por hora. Una ventana de informe que el plan no alcanza esinvalid_input(422), abajo. - Las reglas —
governance_refusedcuando la convención, los valores aprobados o las reglas de dependencia del espacio de trabajo rechazan la entrada,scanner_refusedcuando el destino falló el escaneo de seguridad,duplicate_linkcuando el espacio de trabajo ya tiene un enlace con exactamente ese destino etiquetado (409, el único conflicto del conjunto: el mensaje nombra el enlace existente, y lo correcto es usarlo en vez de reintentar). Los dos primeros son 422. - La solicitud —
invalid_input(422) condetails, ynot_found(404). Un recurso de otro espacio de trabajo y uno que no existe son la misma respuesta, a propósito.
Cómo reporta el servidor MCP las mismas cosas
Una llamada a herramienta nunca devuelve este sobre. Un rechazo es un resultado de herramienta marcado como error, cuyo texto es elmessage de arriba, así que el asistente
puede transmitirlo o reparar la entrada. Un error a nivel de protocolo significa que el
cliente habló mal; un rechazo significa que el producto dijo que no. Los rechazos de la
puerta (401, 402, 429) sí aplican al servidor MCP, y fallan la conexión con ese estado HTTP
en vez de un resultado de herramienta, porque un token que no se admite no tiene
herramientas que listar.