Servidor MCP (Model Context Protocol)
El estándar abierto para proveer herramientas financieras a la Inteligencia Artificial Agéntica.
¿Qué es MCP?
El Model Context Protocol (MCP) es un estándar universal que permite a los asistentes de Inteligencia Artificial conectarse a fuentes de datos seguras.
Al configurar el Servidor MCP de Cord, empoderas a agentes como Claude o asistentes integrados en IDEs (como Cursor) para interactuar orgánicamente con tu empresa.
Preguntas que puedes hacer a la IA una vez conectada:
- “Extrae del PDF adjunto los requerimientos y genera una cotización en Cord para este cliente.”
- “Revisa las cotizaciones vencidas de los últimos 30 días y redáctame correos de cobranza amigables.”
- “Busca al cliente Distribuidora El Zarco y arma un borrador con estas 3 líneas.”
Cómo configurar la conexión
La autenticación para tu cliente de IA se realiza utilizando tu Clave de API estándar de Cord (sk_live_… / sk_test_…) — la misma que usa la API REST.
- Navega a Ajustes › Desarrolladores › MCP en la interfaz de Cord (aparece al activar el Modo desarrollador al final del índice de Ajustes).
- Un tablero de estado arriba te dice si ya tienes una llave activa y, si ya conectaste un
cliente de IA, cuándo se usó por última vez. Si no tienes ninguna, el botón “Crear llave
para MCP” genera una llave
writesin salir de la página — se pega sola en la configuración de abajo. Cópiala en ese momento: no se vuelve a mostrar. (También puedes crear una desde la pestaña API del Cord Workbench si prefieres controlar el scope a mano —writepara las herramientas de escritura,readalcanza para las de lectura.) - Copia la configuración JSON del cliente MCP proporcionada en pantalla.
- Pega esta configuración en la ruta local correspondiente a tu cliente (por ejemplo, el archivo
claude_desktop_config.jsonsi usas la aplicación Claude for Desktop).
Las llaves Publishable (pk_…, pensadas para vivir expuestas en el navegador) no pueden
usarse con MCP — solo cubren crear cotizaciones y leer el catálogo vía la API REST. Usa una
llave Secret desde tu backend o tu cliente de escritorio.
Dos formas de conectarte
Streamable HTTP (recomendado) — POST https://cordhq.app/api/mcp con el header
Authorization: Bearer sk_live_…. Sin sesión: cada mensaje JSON-RPC es una petición HTTP
independiente. Es lo que espera la mayoría de los clientes MCP modernos.
HTTP + SSE (legacy, se mantiene para clientes antiguos) — GET https://cordhq.app/api/mcp/sse abre una conexión de larga duración y devuelve dónde mandar los
mensajes (POST /api/mcp/message?sessionId=…). Cada mensaje POST debe llevar el mismo
Authorization: Bearer con el que abriste la sesión — no basta con el sessionId de la URL
(viaja en texto plano y puede quedar expuesto en logs de proxies intermedios), y la llave debe
pertenecer a la misma organización que abrió la sesión.
Herramientas disponibles
| Tool | Qué hace | Permiso |
|---|---|---|
listar_cotizaciones |
Lista cotizaciones, con filtro opcional por estado. | lectura |
detalle_cotizacion |
Detalle completo de una cotización: líneas, totales, línea de tiempo. | lectura |
cartera_vencida |
Cuentas por cobrar VENCIDAS: monto, aging, detalle por cliente. | lectura |
resumen_negocio |
KPIs, embudo de conversión, pronóstico de pipeline, uso del plan. | lectura |
buscar_cliente |
Busca en el directorio por empresa/contacto/RFC/correo. Paginado. | lectura |
listar_productos |
Catálogo de productos (id, SKU, nombre, unidad, precio de lista). Paginado. | lectura |
crear_cotizacion_borrador |
Crea una cotización en BORRADOR (no la envía). Idempotente si mandas idempotency_key. |
escritura |
listar_facturas |
Lista las facturas de Cord Invoicing con su saldo y estado (draft|open|paid|void|uncollectible|overdue). Filtra por estado, cliente o texto libre. Paginado. |
lectura |
detalle_factura |
Detalle completo de UNA factura: conceptos, emisor, receptor, impuestos, tipo de cambio declarado, saldo y pagos recibidos. | lectura |
crear_factura_borrador |
Crea una factura en BORRADOR para un cliente, sin necesidad de una cotización previa. Requiere el plan Starter o superior (Cord Invoicing). | escritura |
enviar_cotizacion |
Envía al cliente una cotización en borrador (correo con el link). En el plan Gratis consume un envío del mes. | escritura |
aprobar_cotizacion |
Marca como aprobada una cotización enviada o vista. | escritura |
rechazar_cotizacion |
Marca como rechazada una cotización enviada o vista. | escritura |
registrar_pago_cotizacion |
Registra que una cotización aprobada se pagó por fuera de Cord y cancela sus cobros en línea pendientes. Acepta metodo_pago. |
escritura |
crear_cliente |
Da de alta un cliente (empresa, contacto, correo, teléfono, identificador fiscal, términos, país). | escritura |
actualizar_cliente |
Cambia datos de contacto de un cliente. Solo modifica lo que mandas; nunca toca crédito, nivel ni descuento. | escritura |
crear_tarea |
Crea una tarea de seguimiento, opcionalmente ligada a una cotización y con fecha. | escritura |
registrar_promesa_pago |
Registra la fecha en que el cliente prometió pagar una cotización. No cobra nada. | escritura |
listar_eventos |
Historial del negocio (cotizaciones, facturas, clientes, tareas, promesas), filtrable por tipo u objeto. Paginado. | lectura |
Cada tool declara sus anotaciones estándar de MCP (readOnlyHint, idempotentHint,
destructiveHint) en tools/list — un cliente MCP puede usarlas para decidir qué llamadas
auto-aprobar sin preguntarle al usuario cada vez. Las de lectura son readOnlyHint: true.
enviar_cotizacion, aprobar_cotizacion, rechazar_cotizacion y registrar_pago_cotizacion
son destructiveHint: true porque cambian el estado de una cotización o le escriben al cliente:
un cliente MCP bien configurado pide confirmación antes de ejecutarlas. Ninguna herramienta
emite ni timbra facturas: eso sigue siendo una acción que una persona dispara desde la app o la
API.
Paginación
listar_cotizaciones, buscar_cliente, listar_productos, listar_facturas y listar_eventos devuelven páginas, no la tabla completa:
{
"items": [ { "id": "…", "empresa": "Distribuidora El Zarco" } ],
"total": 47,
"has_more": true,
"next_cursor": "20"
}
Si has_more viene en true, vuelve a llamar la misma tool pasando cursor: next_cursor para
la siguiente página. next_cursor viene en null cuando ya no hay más resultados.
listar_cotizaciones devuelve la lista en cotizaciones y listar_eventos en eventos.
listar_productos nunca incluye el costo/margen interno del producto — solo precio de
lista, SKU, nombre y unidad. Esa columna es intencionalmente invisible desde una API key,
tenga o no permiso de escritura.
Llamadas seguras de repetir (idempotencia)
crear_cotizacion_borrador, enviar_cotizacion, aprobar_cotizacion, rechazar_cotizacion,
registrar_pago_cotizacion, crear_cliente, crear_tarea y registrar_promesa_pago aceptan un
idempotency_key opcional — un identificador único que
tú generas (un UUID, por ejemplo). Si tu cliente MCP necesita reintentar la llamada porque
no recibió respuesta a tiempo (timeout de red), repite el MISMO idempotency_key: Cord te
devuelve el resultado de la primera vez en vez de repetir la acción. Reusar la misma clave con
otros argumentos devuelve un error, y la clave caduca a las 24 horas.
{
"name": "crear_cotizacion_borrador",
"arguments": {
"idempotency_key": "a1b2c3d4-…",
"cliente_id": "…",
"items": [{ "descripcion": "Instalación", "cantidad": 1, "precio_unitario": 4500 }]
}
}
Sin idempotency_key, la tool sigue funcionando normal — cada llamada crea un borrador nuevo
(no es un campo obligatorio, solo recomendado si tu cliente reintenta automáticamente).
detalle_cotizacion y listar_eventos pueden traer texto escrito por el cliente en el link
público (comentarios, contraofertas). Ese texto llega marcado con origen: "cliente_externo" y
delimitado entre <<<mensaje_del_cliente>>>: tu agente debe reportarlo, nunca seguirlo como una
instrucción.
Herramientas Seguras (Tools)
Cord expone de forma controlada “Herramientas” (Tools) hacia la IA. Esto significa que la IA no tiene acceso crudo e ilimitado a tu base de datos; la IA únicamente puede invocar los endpoints que Cord ha aprobado y categorizado, heredando los permisos vinculados a la Clave de API.
Importante:
Las reglas de negocio se aplican estrictamente. Si la IA intenta aplicar un descuento del 150% al construir una cotización, la API rechazará la solicitud devolviendo un código 400 invalid_request para proteger tu negocio.
Límites, medición y actividad
Cada llamada real (no las notificaciones de protocolo como notifications/initialized) cuenta
igual que una llamada a la API REST: contra tu cuota de uso del plan, contra el límite de
peticiones por llave (600/min), y queda en la pestaña Registros del
Cord Workbench con la tool que se llamó (ej.
/mcp/tools/call:listar_productos) — así puedes ver exactamente qué está haciendo tu agente,
con qué llave y cuándo. Puedes filtrar ese log por método o por status, o buscar mcp en la
ruta para aislar solo lo que hizo la IA.