La actividad de un proveedor, sin salir del copiloto
La actividad de un proveedor con la herramienta suppliers: registrar conversaciones, adjuntar documentos, programar reuniones y leer el historial.
Actualizado el . 7 min de lectura
Incluido en todos los planes. Ver precios
Con la herramienta suppliers del servidor de Finanzas, un asistente lleva la pestaña de actividad de un proveedor: anota lo que se habla con él, le adjunta el documento del que trata, programa la siguiente reunión y lee el historial, con sus notas, llamadas, reuniones, correos y los gastos que se le registraron. Necesitas un token del servidor de Finanzas que lleve los scopes de actividad de proveedores.
La actividad de un proveedor en tres pasos
log_interaction
Registrar la conversación
Nota, llamada, visita o correo que salió por otra vía, vinculada al gasto del que trata.attach_to_interaction · Opcional
Adjuntar el documento
Por una dirección https, hasta 10 MB, o pegado en la llamada, hasta 2 MB.schedule_meeting · Opcional
Programar la reunión
Con asistentes, invitados por correo y recordatorios. Sin Meet o Calendario, sale sin sala o sin evento.
La herramienta no envía correos al proveedor: send_email, reply_email y get_email_recipients se retiraron el 7 de septiembre de 2026, sin sustituto. Para dejar constancia de un correo que salió por otra vía, usa log_interaction con type: 'EMAIL'.
Antes de empezar
La actividad del proveedor tiene dos scopes propios:
| Scope | Qué concede |
|---|---|
finance:suppliers:interactions:read | Leer el listado, el detalle, la conversación, el historial de cambios y los datos de los adjuntos. |
finance:suppliers:interactions:manage | Registrar, editar y borrar; adjuntar y quitar archivos; y programar, cerrar y cancelar reuniones. |
Solo se conceden en el servidor de Finanzas
Ninguno de los dos está dentro de finance:read ni de finance:write: solo los concede finance:full o pedirlos por su nombre, porque la actividad incluye el contenido de correos. Y hace falta un token del servidor de Finanzas (/api/mcp/finance).
Además del scope, necesitas el permiso SUPPLIERS_INTERACTIONS_VIEW o SUPPLIERS_INTERACTIONS_MANAGE y que tu organización tenga contratado Finanzas. Con alcance OWN, cada persona solo ve y toca la actividad que registró ella.
Los SDK todavía no llegan a estas operaciones por el servidor de Finanzas. Invoca la herramienta por JSON-RPC en https://os.utilia.ai/api/mcp/finance, como en los ejemplos de esta página.
Paso 1: registrar lo que se habla
log_interaction anota una nota, una llamada, una visita o un correo que salió por otra vía. El proveedor sale del parámetro id, nunca del cuerpo de la interacción.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "suppliers",
"arguments": {
"operation": "log_interaction",
"id": "<proveedorId>",
"interaction": {
"type": "CALL",
"direction": "OUTBOUND",
"subject": "Confirmación del plazo de entrega",
"description": "Dicen que sale el jueves y llega el lunes.",
"duration": 12,
"expenseIds": ["<gastoId>"]
}
}
}
}type admite EMAIL, CALL, MEETING, NOTE, SMS, WHATSAPP y VISIT. La respuesta trae url, el enlace a la ficha, para ofrecérselo a la persona.
expenseIds vincula la conversación con los gastos o facturas del proveedor de los que trata, y es lo que después permite preguntar «¿qué se habló de esta factura?» con el filtro expenseId. Los identificadores se comprueban contra tu organización y contra el proveedor de la ficha: uno de otro proveedor se rechaza con un error 400 que lo dice expresamente.
Hasta cincuenta de golpe
log_interactions_many registra hasta 50 interacciones del mismo proveedor en una llamada; sirve para volcar el historial de un sistema antiguo. El lote va en interactions, no en items, que en esta herramienta es el lote de fichas de proveedor. Equivocar el nombre no da error: el lote llega vacío.
Un elemento inválido no detiene al resto: sale en failed con su posición y su motivo, y los que entran salen en succeeded. Con clientOperationId, cada elemento queda reservado 24 horas: si reenvías el lote con las mismas claves, lo que ya entró no se vuelve a escribir y recibes el resultado original. Si una reserva queda en duda, la respuesta pide revisar la actividad antes de continuar (MCP_IDEMPOTENCY_REVIEW_REQUIRED); conserva la clave, porque cambiarla puede duplicar la anotación.
Paso 2: adjuntar el documento del que se habla
attach_to_interaction sube un archivo a una interacción por una de dos vías: una dirección https que descarga el servidor, hasta 10 MB, o el contenido pegado en la llamada, hasta 2 MB. Para archivos grandes, usa la dirección: el contenido pegado pasa por el modelo, y cuanto más grande es, más fácil es que llegue incompleto. El servidor rechaza los archivos que llegan rotos.
{
"name": "suppliers",
"arguments": {
"operation": "attach_to_interaction",
"id": "<proveedorId>",
"interactionId": "<interaccionId>",
"attachment": {
"fileName": "factura-0231.pdf",
"url": "https://portal-del-proveedor.example.com/facturas/0231.pdf"
}
}
}Se admiten PDF, Word, Excel, PowerPoint, texto, CSV, JPEG, PNG, GIF, WEBP, SVG, ZIP, RAR y 7z, la misma lista que acepta el gestor de archivos.
list_interaction_attachments devuelve los datos de cada adjunto (nombre, tipo, tamaño y la dirección de descarga dentro del producto), sin el contenido. Para leer el contenido de un archivo está el gestor de archivos, con su propio permiso.
remove_interaction_attachment quita un adjunto y exige confirm: true. No hay papelera.
Si tu organización no tiene la capacidad avanzada del gestor de archivos, el adjunto se guarda igual en la interacción; lo único que no ocurre es que aparezca en la carpeta del proveedor.
Paso 3: programar una reunión
schedule_meeting crea la reunión con sus asistentes internos, sus invitados externos por correo y sus recordatorios:
{
"name": "suppliers",
"arguments": {
"operation": "schedule_meeting",
"id": "<proveedorId>",
"meeting": {
"subject": "Revisión de plazos del cuarto trimestre",
"startTime": "2026-10-20T10:00:00.000Z",
"endTime": "2026-10-20T11:00:00.000Z",
"attendeeIds": ["<usuarioId>", "<otroUsuarioId>"],
"participants": ["comercial@proveedor.example.com"],
"reminders": [{ "type": "PRESET", "offsetMinutes": 30, "notifyExternals": true }],
"createMeetRoom": true,
"expenseIds": ["<gastoId>"]
}
}
}createMeetRoom necesita el aplicativo Meet y createCalendarEvent, el de Calendario. Si falta alguno, la reunión se programa igual, sin sala o sin evento, y la llamada devuelve éxito. Si tu integración necesita saber si hubo sala, mira meetingUrl en la interacción devuelta.
complete_meeting cierra la reunión con su resultado y sus notas; cancel_meeting la cancela junto con su evento de calendario y su sala, y devuelve el resumen de lo deshecho. En una reunión cerrada o cancelada ya no se pueden cambiar la hora, el tipo ni los asistentes, aunque sí el resultado y las notas.
Leer la conversación y su historial
get_interaction_thread devuelve el hilo de correo de una interacción, acotado a este proveedor. Un mismo hilo puede tocar a la vez a un cliente y a un proveedor; desde aquí solo se ven los mensajes del proveedor, y la respuesta lo indica en scopedToSupplier. Si vas a enseñar el hilo a una persona, díselo, para que no tome media conversación por la conversación entera. La parte del cliente se lee desde el CRM, con sus permisos.
list_interaction_activities devuelve el historial de cambios de la interacción: quién la tocó, cuándo y qué hizo. Es la respuesta a «¿quién movió esta reunión?».
Lo que se anota solo
Parte de la actividad no la escribe una persona: la ficha recoge también hitos automáticos. El campo source dice quién o qué escribió cada fila:
source | Qué anota |
|---|---|
MANUAL | Lo que registra el equipo. |
EMAIL_SYNC | Correo traído del buzón sincronizado y emparejado con el proveedor. |
FINANCE | Gastos y facturas del proveedor y sus pagos. |
MEETING y CALENDAR | Videollamadas y sincronización del calendario. |
INTEGRATION | Aplicaciones externas que escriben por la API pública. |
list_interactions admite los filtros direction, status, source, excludeSources, search, expenseId y supplierContactId. Para leer solo el trabajo del equipo, source: 'MANUAL'; para quitar los hitos de gastos y facturas, excludeSources: ['FINANCE']. Si envías los dos, se aplican ambos.
search busca en el asunto, la descripción y las notas sin distinguir mayúsculas, pero sí tildes: «revision» no encuentra «revisión».
Errores frecuentes
| Error | Cuándo | Qué hacer |
|---|---|---|
403 con el error -32600 «El aplicativo Finanzas no está habilitado para tu organización» | Tu organización no tiene contratado Finanzas. | Es una puerta del plan: ningún permiso la abre. |
| Falta de scope | El token no es del servidor de Finanzas o no lleva el scope de actividad. | Autoriza el servidor de Finanzas pidiendo finance:suppliers:interactions:read o :manage. |
| Proveedor no encontrado | El identificador no es de tu organización, o es una interacción que también toca a un cliente. | Las interacciones compartidas con un cliente se gestionan desde el CRM, con INTERACTIONS_EDIT. La respuesta no distingue los dos casos a propósito. |
| «no es de este proveedor» | Un expenseIds de otro proveedor. | Comprueba de quién es el documento antes de vincularlo. |
Siguiente paso
La reunión programada aparece en el calendario de sus asistentes y, si pediste sala, en Meet. Lo que se habló queda vinculado a los gastos y facturas del proveedor, así que en la ficha del documento verás la conversación que lo acompaña. Los cambios de contrato de la herramienta suppliers están en la referencia de herramientas MCP.