Sus sistemas exponen herramientas; el agente las ejecuta
No hay que declarar endpoints uno por uno ni mandarnos un OpenAPI para que lo revisemos. Usted publica un servidor MCP (estándar abierto) y registra en Asixto su URL y una credencial. A partir de ahí el agente descubre su catálogo y ejecuta sus herramientas dentro de la operación de Asixto, con independencia del módulo al que pertenezcan y del canal por el que llegue la petición.
import { McpServer } from '@modelcontextprotocol/server';
import { NodeStreamableHTTPServerTransport } from '@modelcontextprotocol/node';
import { createMcpExpressApp } from '@modelcontextprotocol/express';
import * as z from 'zod/v4';
const server = new McpServer({ name: 'acme-tools', version: '1.0.0' });
server.registerTool(
'consultar_cliente',
{
description:
'Busca un cliente por número de documento y devuelve sus datos de contacto y estado. ' +
'Úsala para identificar a quién se está atendiendo. No la uses para modificar datos.',
inputSchema: z.object({ documento: z.string().min(5).max(20) }),
},
async ({ documento }) => {
const cliente = await miBackend.buscarCliente(documento); // su API actual
if (!cliente) {
return {
content: [{ type: 'text', text: 'No encontré un cliente con ese documento.' }],
structuredContent: { encontrado: false },
};
}
return {
content: [{ type: 'text', text: `Cliente ${cliente.nombre}, estado ${cliente.estado}.` }],
structuredContent: { encontrado: true, nombre: cliente.nombre, estado: cliente.estado },
};
},
);
const app = createMcpExpressApp();
app.post('/mcp', async (req, res) => {
// Sin estado: un transporte por petición. Es el modo que exige el Gateway.
const transport = new NodeStreamableHTTPServerTransport({ sessionIdGenerator: undefined });
await server.connect(transport);
await transport.handleRequest(req, res, req.body);
});
app.listen(8080);En la respuesta, content es el texto que puede acabar leído en voz alta y structuredContent son los datos conformes a su outputSchema. Un fallo se devuelve con error_type y user_message, nunca como un 500 sin cuerpo.
El contrato en cifras
Los mismos valores que aplica el runtime que ejecutará sus herramientas.
- Protocolo
- MCP · revisión 2026-07-28
- Transporte
- HTTPS POST único, sin estado
- Métodos obligatorios
- server/discover · tools/list · tools/call
- Autenticación
- OAuth 2.1 (recomendado) o token rotable
- Tamaño de respuesta
- ≤ 3.000 caracteres
- Tiempo de espera
- 30 s máximo · p95 objetivo ≤ 2 s
- Paginación
- limit hasta 25 · 10 por defecto · 3 en voz
- Errores
- 6 error_type + user_message