08Certificación

Sección 08

Certificación

.md

Esta página lista las comprobaciones que su servidor debe pasar antes de entrar en producción y en qué orden ocurre cada fase. No revisamos su código: usted registra el servidor, lo evaluamos contra esta lista y recibe el mismo informe que vemos nosotros.

Qué mide la batería hoy, y qué revisamos con su equipo. De las 34 comprobaciones, 12 las mide la batería automática en cada corrida y 22 las verificamos junto a su equipo durante la incorporación —19 de ellas bloqueantes—. La columna «Cómo se comprueba» de cada tabla lo dice fila por fila, y su informe también: una fila con «Todavía no automatizada» no es un defecto suyo ni algo que cambie por repetir la corrida.

Consecuencia práctica, dicha sin rodeos: el sello «Apta para producción» exige las 34, así que hoy no se alcanza solo lanzando corridas. Lo que usted puede cerrar por su cuenta es «Batería automática superada», y es lo que la aplicación le muestra como objetivo. La lista de abajo no cambia por eso: es el criterio de aceptación completo, y conviene que la use como su propia lista de pruebas desde el primer día.

Fases

#FaseQué ocurre
1RegistroDa de alta en la aplicación cuatro datos: la URL de producción, la URL de su entorno de pruebas, la credencial que su servidor de pruebas espera y un contacto técnico. La era de protocolo no se declara: al registrar hablamos con su entorno de pruebas y la detectamos nosotros (página 09). Por eso el registro tiene una precondición: su entorno de pruebas tiene que estar desplegado y respondiendo en ese momento. Si no acordamos revisión con él, el alta se rechaza diciéndole qué anunció y qué desplegar; si el que falla es nuestro lado, se lo decimos con esas palabras y basta reintentar. Por lo demás no se declaran endpoints ni esquemas, y el catálogo no se configura en ningún panel: cada herramienta llega ya clasificada por el _meta de su definición (página 02).
2CertificaciónLa batería corre de inmediato contra su entorno de pruebas y devuelve un informe con las 34 filas: las que aprueba, las que falla, las que no pudo medir y las que verificamos con su equipo. Sin aprobación no hay activación.
3Publicación del catálogoUsted ordena publicar y leemos tools/list de su servidor en el entorno que elija: sus herramientas quedan disponibles para el agente. Certificar no publica: son dos actos, para que usted decida cuándo la versión que sirve su servidor pasa a usarse. Las que no se admitan vienen enumeradas con su motivo y no impiden publicar el resto.
4Conversaciones de pruebaPrueba a su agente, con sus herramientas, sin tráfico de clientes finales y con una clave ak_test_: por chat en el Playground de la consola y por voz llamando a sus números de prueba verificados (página 14). Se cobra como cualquier consumo (página 12).
5ActivaciónSe enciende escenario por escenario, con su nivel y sus interruptores por acción. Usted decide alcance y canales.
6VigilanciaLa batería se repite de forma periódica y ante cada cambio de catálogo; una regresión desactiva la capacidad. Es la última pieza en entrar: hasta entonces, la vigilancia es por monitoreo de errores y aviso a su equipo.

Las comprobaciones que escriben se ejecutan solo contra el entorno de pruebas declarado. La batería nunca escribe en su producción.

Verifíquelo usted antes de avisarnos

La mayor parte de esta lista se comprueba sola. El servidor de referencia trae el verificador como comando y corre contra cualquier servidor MCP, no solo contra él:

Shell
git clone https://github.com/AndresTorresCode/asixto-mcp-reference
cd asixto-mcp-reference && npm install
node scripts/conformance.mjs https://su-entorno-de-pruebas/mcp SU-TOKEN --allow-writes

Sale con código 1 si falla una comprobación bloqueante, así que sirve en su pipeline. Imprime además la era de protocolo detectada: ya no hay que copiárnosla —la detectamos nosotros al registrar—, pero verla antes le confirma que su entorno de pruebas acuerda revisión y que el alta va a pasar.

Es de solo lectura por omisión. La comprobación de idempotencia es la única que ejecuta una herramienta de escritura —dos veces, con la misma clave— y solo corre con --allow-writes. Sin la bandera, «0 bloqueantes» no significa que la idempotencia esté verificada, y el veredicto se lo dice con esas palabras. Por eso el comando de arriba apunta a su entorno de pruebas.

Lo que el verificador no cubre: latencia bajo carga, propiedad del registro con datos reales, estados terminales y los campos mínimos por dominio de la página 04. Esas cuatro tampoco las mide la batería automática todavía —salen en su informe como «Todavía no automatizada»—: las revisamos con su equipo con datos suyos, que es la única forma de comprobarlas sin escribir en su producción.

Comprobaciones

Bloqueante impide la activación. Aviso queda en el informe y no bloquea.

Cómo leer su informe. Cada fila sale con uno de cuatro resultados, y cada uno dice de quién es la siguiente acción:

ResultadoQué significaQué hace usted
CumplidaLa batería la midió y su servidor la pasaNada
Fallida (bloqueante)La batería la midió y su servidor no la pasa. El detalle trae qué corregirCorregir y volver a lanzar
Recomendación (aviso)La midió y su servidor no la cumple, pero no bloquea: ni la certificación ni la activaciónNada obligatorio. Puede dejarlo como está
No observadaLa batería no llegó a un veredicto. El detalle dice de quién es el motivo, porque hay dos: un fallo de nuestro lado (no pudimos leer su catálogo, no llegamos a ejercer una herramienta) o una respuesta suya que no sirve para comparar (su servidor rechazó los argumentos de prueba, o no devolvió resultado)Si el motivo es nuestro, volver a lanzar en unos minutos y, si persiste, avisarnos. Si su servidor rechazó los argumentos de prueba, relanzar da lo mismo: el detalle trae su propio mensaje de error, y se corrige en su esquema o en su validación de pruebas
Todavía no automatizadaLa batería no ejecuta esta comprobación: la revisamos con su equipoNada en la aplicación. Puede adelantarla con el verificador público cuando la cubra
No aplicaSu catálogo no expone el sujeto que la comprobación necesita: sin una herramienta que CREE una entidad del dominio no hay nada que llevar a estado terminal ni cuya propiedad se pueda probar. No es una deficiencia y no bloquea la aptitudNada. Si más adelante publica esa herramienta, la fila se mide sola en la siguiente corrida

Si su servidor no responde, responde con un estado inservible, rechaza la credencial del alta o devuelve algo que no es un sobre JSON-RPC, eso sí sale como fallida y con instrucciones: que responda —aunque responda mal— nos permite decirle exactamente qué arreglar.

Protocolo y transporte

ComprobaciónCriterioSeveridadCómo se comprueba
Era de protocolo coherenteserver/discover anuncia supportedVersions con 2026-07-28 (era modern) o el servidor responde al saludo initialize con una revisión que soporta (era legacy). Las dos se admiten y la era la DETECTAMOS al dar de alta contra su entorno de pruebas (fase 1), así que aquí ya llega medida; lo que bloquea es ninguna de las dos (página 09)BloqueanteAutomática
Era recomendadaLa era es modern. Un servidor de revisión anterior se certifica igual y puede quedarse así: migrar es opcionalAvisoAutomática
Catálogo válidoTodos los esquemas compilan y los nombres son únicosBloqueanteAutomática
Esquemas cerradosadditionalProperties: falseBloqueanteAutomática
Opcionales nullableTodo parámetro fuera de required admite nullBloqueanteAutomática
required mínimoSin campos exigidos que su sistema pueda resolver por defectoAvisoCon su equipo
Nombres y longitudesNombre ≤ 40 y ^[a-z0-9_]+$; description ≤ 700BloqueanteAutomática
Una operación por herramientaSin parámetro que multiplexe acciones. La batería refuta un caso concluyente: un parámetro cuyo enum deja elegir entre un método HTTP de lectura (GET, HEAD, OPTIONS) y uno que escribe (POST, PUT, PATCH, DELETE) no es una operación, es un proxy con interruptor. El resto —distinguir un enum de modos legítimos de un multiplexor de acciones— lo revisamos con su equipoBloqueanteCon su equipo
Rechazo de entrada inválidaFuera de esquema: error de contrato del SDK. Dentro de esquema pero inválida para el negocio: error_type: "VALIDATION". En ningún caso un fallo del servidorBloqueanteCon su equipo
Anotaciones coherentesUna escritura no se declara de solo lectura. Que estén declaradas lo comprueba la batería; que sean ciertas exige ejecutar la herramientaBloqueanteCon su equipo
Clasificación presenteCada herramienta trae com.asixto/capability (o capabilities en plural) con claves válidas, y com.asixto/verbBloqueanteAutomática
Campos mínimos por dominioLa respuesta trae lo exigido en la página 04BloqueanteCon su equipo
Orden estable del catálogoDos consultas, mismo ordenAvisoAutomática
Descripciones limpiasSin instrucciones dirigidas al modelo («llama siempre a esta herramienta»), sin system prompt y sin bloques que parezcan texto codificado. Es estilo, y por eso es aviso y no bloqueante: sesga la elección del modelo y el precio lo paga usted. system prompt está aquí y no en la fila bloqueante a propósito — si su producto es un asistente, documentarlo es legítimoAvisoAutomática
Descripciones sin inyecciónNingún texto de la herramienta intenta gobernar al modelo: sin «ignora las instrucciones anteriores», sin pedirle que no use otras herramientas, sin marcas de rol (<system>, [INST]) y sin caracteres invisibles (ancho cero, control de dirección, etiquetas U+E0000). Se revisa la descripción y los textos de su inputSchema —description, title, $comment de cada campo—, porque el modelo los lee igual. La comparación normaliza el texto, así que escribirlo en ancho completo o con doble espacio no lo esquiva. Estos textos viajan a nuestro modelo en el mismo contexto que las instrucciones de la empresa, así que no es una recomendación de estilo: una herramienta que lo incumpla tampoco se publica (página 02)BloqueanteAutomática
Entorno de pruebas del mismo servicioLa URL de pruebas y la de producción comparten dominio. Un dominio distinto no bloquea nada y puede ser lo correcto: solo le avisamos, con los dos hosts, para que compruebe que esa URL es su servidor MCP de pruebas y no otro servicio suyo — la batería certifica lo que responda ahíAvisoAutomática

Autenticación

ComprobaciónCriterioSeveridadCómo se comprueba
Sin credencial401 con WWW-AuthenticateBloqueanteCon su equipo
Credencial inválida o caducada401, no 500BloqueanteCon su equipo
Audiencia ajenaRechazadaBloqueanteCon su equipo
Metadatos de recurso protegido (RFC 9728)Publicados y coherentes. Aviso porque el nivel 2 (token rotable) no los requiereAvisoCon su equipo
TLSCertificado válido y vigenteBloqueanteCon su equipo

Garantías de negocio

ComprobaciónCriterioSeveridadCómo se comprueba
IdempotenciaMisma clave de _meta dos veces, un solo efecto. Se ejerce cada herramienta de escritura de su catálogo, y solo contra su entorno de pruebas. Una que no la honre queda además marcada no apta para regla determinista. Los argumentos los derivamos de su inputSchema, y solo los required: un enum toma su primera opción, un número su minimum (o 1), un booleano false y un texto la letra X repetida hasta su minLength (mínimo 6). Si su entorno de pruebas exige que esos valores existan de verdad —el id de un préstamo, de una llamada— la rechazará, y la fila sale no observada con el mensaje de error de su servidor, no aprobada ni fallidaBloqueanteAutomática
Propiedad del registroIdentificador ajeno → PERMISSIONBloqueanteCon su equipo
Estado terminalTransición inválida → VALIDATION con el estado actualBloqueanteCon su equipo
Dato críticoFranja ocupada y monto alterado rechazadosBloqueanteCon su equipo
Fuga de datosSin identificadores internos, datos de terceros ni trazasBloqueanteCon su equipo
Forma del errorerror_type de los seis canónicos + user_messageBloqueanteCon su equipo
Sin resultados = éxitoBúsqueda vacía devuelve lista vacía y total: 0, no errorBloqueanteCon su equipo
Vacío vs caído vs inexistenteTres respuestas distinguiblesBloqueanteCon su equipo

Rendimiento

ComprobaciónCriterioSeveridadCómo se comprueba
Latencia p95≤ 2 s sobre la muestra de la bateríaAvisoCon su equipo
Tiempo de esperaNinguna llamada supera 30 sBloqueanteCon su equipo
Tamaño de respuesta≤ 3.000 caracteresBloqueanteCon su equipo
PaginaciónBúsquedas con limit, offset y total, respetando el limit recibidoBloqueanteCon su equipo
Forma para vozSin URLs ni correos; ≤ 3 elementos; fecha ISO + pronunciableBloqueanteCon su equipo

Autoevaluación previa

Antes de registrar, verifique por su cuenta. Ahorra una vuelta completa:

  • Cada herramienta probada con el Inspector y con un test automatizado.
  • Esquemas cerrados en todas.
  • 401 correcto sin credencial y con credencial inválida.
  • Todo parámetro opcional acepta null en su type.
  • Escritura invocada dos veces con la misma clave de _meta: un solo efecto.
  • Escritura invocada con un identificador de otro contacto: PERMISSION.
  • Operación sobre una entidad en estado terminal: VALIDATION.
  • Búsqueda sin resultados: éxito con lista vacía y total: 0, no error.
  • Respuestas revisadas a ojo: sin identificadores internos ni campos administrativos, ≤ 3.000 caracteres.
  • Solo los seis error_type de la página 06.
  • Búsquedas respetan el limit recibido y devuelven total, limit y offset.
  • Nombres ≤ 40 caracteres y descripciones ≤ 700.
  • Cada herramienta declara readOnlyHint con un booleano. Sin él no se publica: no podemos saber si escribe.
  • Ninguna descripción da instrucciones al modelo ni trae caracteres invisibles.
  • Ninguna herramienta deja elegir el método HTTP: una de lectura y una por cada acción que escribe.
  • Cada herramienta declara com.asixto/capability o capabilities (claves válidas) y com.asixto/verb.
  • Cada dominio devuelve sus campos mínimos (página 04).
  • Ningún token en sus logs.

Requisitos que no se verifican desde fuera

Estos no aparecen arriba porque ninguna batería puede comprobarlos desde el exterior de su sistema. Forman parte del criterio de aceptación igualmente, y se declaran en el registro:

RequisitoPáginaPor qué no es verificable desde fuera
TTL ≥ 7 días y escritura atómica del almacén de idempotencia05La batería solo observa dos llamadas seguidas; no ve su almacén ni espera una semana.
Consultar la clave de idempotencia antes de las guardas05Desde fuera, el orden correcto y el incorrecto se parecen hasta que ocurre un reintento real sobre una entidad ya modificada.
Guardar solo los éxitos05Requiere provocar un fallo transitorio en su dependencia.
Rotación con dos credenciales activas03Es un procedimiento operativo suyo.
Límites propios por credencial y comprobación de salud07Se verifican en la incorporación, no en cada ejecución.
Disponibilidad ≥ 99,5%07Se mide en producción a lo largo del mes, no en una batería.
No exponer borrado duro ni campos que el titular no deba cambiar04 · 02Se revisa al leer su catálogo, que es la única parte donde interviene una persona.

Dicho de otro modo: la batería comprueba la forma; lo de esta tabla es compromiso, y es lo que se revisa si algún día hay un incidente.

Qué certifica Asixto y qué no

La certificación verifica que su servidor cumple este contrato, observado desde fuera: transporte, autenticación, garantías de negocio y rendimiento. Es determinista y repetible, y por eso puede correr sin que nadie lea su código.

Lo que no es: una auditoría de su código, de su infraestructura o de sus datos, ni un sustituto de sus propios controles. La operación, la disponibilidad, la seguridad y el comportamiento de su servidor —y de los sistemas que hay detrás— son suyos. Asixto ejecuta la batería, le entrega el resultado por comprobación y suspende un escenario cuando el servidor deja de responder (página 10); no administra ni supervisa su servidor.

Un resultado aprobado significa que el contrato se cumple en el momento de la ejecución. No es una garantía sobre el contenido de sus respuestas: los datos que devuelve son suyos y el agente los traslada al cliente final tal como los recibe (página 05).

Recertificación

CambioRequiere
Herramienta nuevaCertificación de esa herramienta
Cambio de esquema de una herramienta existenteRecertificación de esa herramienta
Renombrar una herramientaCertificación como nueva; la anterior se retira
Cambio de credencial o de URLNueva verificación de autenticación
Cambio interno sin efecto en el contratoNada. La vigilancia periódica lo cubre