En esta sección
Model Context Protocol

Conecta tus herramientas agénticas a Meteor

Cualquier herramienta que hable MCP — Claude, ChatGPT, Claude Code, Cursor, Windsurf, Cline, Codex o tu propio agente — se conecta directo a Meteor y trabaja en tu workspace. Opera: contesta conversaciones, busca contactos, agenda recordatorios, ejecuta Mets. Y construye: crea Mets, arma y publica flujos, programa automatizaciones y crea colecciones. Lo que no tiene tool propia lo alcanza igual, con tres tools genéricas que llaman cualquier operación de la API.

Disponible

El servidor MCP está vivo en https://api.met.meteor.com.co/api/v1/mcp. Conéctalo iniciando sesión en Meteor desde tu cliente, o con una API key met_ (scope mcp:use). Novedades en el changelog.

Introducción

El Model Context Protocol es un estándar abierto para que los agentes de IA descubran y usen herramientas externas de forma segura. El servidor MCP de Meteor es remoto y acepta dos formas de autenticarse: iniciar sesión en Meteor desde el cliente (OAuth, sin API key) o tu API key met_ — la misma que usas en la API REST. Cualquier cliente MCP puede conectarse; abajo está la config de los más comunes y de un agente propio.

¿No programas? La guía Usa Met desde Claude en 3 pasos explica cómo conectarlo y qué pedirle, sin tecnicismos.

El SDK y la API REST son para cuando tú escribes el código. El servidor MCP es para cuando un agente opera Meteor por su cuenta.

Conectar un cliente

Con inicio de sesión (sin API key)

Claude y ChatGPT (conectores personalizados), Claude Code y Cursor lo hacen solos: pega la URL, sin header.

https://api.met.meteor.com.co/api/v1/mcp

Sin credenciales, el servidor responde 401 con WWW-Authenticate y el cliente sigue el descubrimiento OAuth estándar (/.well-known/oauth-protected-resource → servidor de autorización → registro dinámico). La persona inicia sesión en Meteor, ve los permisos que pide el cliente y los aprueba; el token queda sobre el workspace en el que tiene la sesión abierta. Se renueva solo y se revoca en Ajustes → Desarrolladores → Apps autorizadas. Detalle del protocolo en Apps OAuth.

Con una API key, todos los clientes apuntan al mismo endpoint remoto y pasan tu key en el header Authorization. Mientras pruebas, usa una key de test (met_test_) y emítela solo con scopes de lectura: una key de test bloquea los efectos externos, pero no la escritura sobre tu workspace. Ver qué hace y qué no hace el modo de prueba.

Claude Code

Un comando desde la terminal:

claude mcp add --transport http meteor \
  https://api.met.meteor.com.co/api/v1/mcp \
  --header "Authorization: Bearer met_live_tu_key"

Claude Desktop

En claude_desktop_config.json:

{
  "mcpServers": {
    "meteor": {
      "url": "https://api.met.meteor.com.co/api/v1/mcp",
      "headers": { "Authorization": "Bearer met_live_tu_key" }
    }
  }
}

Cursor

En .cursor/mcp.json (del proyecto) o el global:

{
  "mcpServers": {
    "meteor": {
      "url": "https://api.met.meteor.com.co/api/v1/mcp",
      "headers": { "Authorization": "Bearer met_live_tu_key" }
    }
  }
}

Windsurf

En ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "meteor": {
      "serverUrl": "https://api.met.meteor.com.co/api/v1/mcp",
      "headers": { "Authorization": "Bearer met_live_tu_key" }
    }
  }
}

Cline (VS Code)

Desde el panel de MCP de Cline, agrega un servidor remoto con la URL y el header de autenticación — misma forma que arriba.

Codex (OpenAI)

Codex conecta servidores MCP por stdio, así que mcp-remote puentea el servidor remoto de Meteor. En ~/.codex/config.toml:

[mcp_servers.meteor]
command = "npx"
args = ["-y", "mcp-remote", "https://api.met.meteor.com.co/api/v1/mcp", "--header", "Authorization: Bearer met_live_tu_key"]

Otros clientes MCP

Cualquier cliente compatible con MCP (transport HTTP/SSE) sirve. La receta es siempre la misma: URL del servidor + header Authorization: Bearer met_….

Tu propio agente

Si construyes tu propio agente, conéctalo con un cliente MCP programático (por ejemplo, @modelcontextprotocol/sdk) y dale a tu modelo las tools de Meteor:

import { Client } from '@modelcontextprotocol/sdk/client';
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp';

const client = new Client({ name: 'mi-agente', version: '1.0.0' });
await client.connect(new StreamableHTTPClientTransport(
  new URL('https://api.met.meteor.com.co/api/v1/mcp'),
  { requestInit: { headers: { Authorization: `Bearer ${process.env.MET_API_KEY}` } } },
));

const { tools } = await client.listTools();   // las tools de Meteor, según tus scopes
// pasas `tools` a tu modelo y ejecutas client.callTool(...) cuando el modelo lo pida

Así tu agente descubre y ejecuta las capacidades de Meteor sin que tú cablees cada endpoint a mano.

Descubrimiento

Si tu cliente resuelve servidores por dominio en vez de por URL fija, el descriptor está publicado:

curl https://developers.meteor.com.co/.well-known/mcp.json

Trae el endpoint, el transporte, cómo autenticar y la lista de tools. Se genera del catálogo real del servidor en cada build, así que no puede quedar desactualizado respecto de lo que el servidor expone de verdad.

Junto a él va server.json, el descriptor con el formato de los registros de MCP. Es el que sirve para que un agente encuentre Meteor sin conocer este dominio.

Capacidades

El catálogo son 115 tools sobre 21 dominios, y se filtra por los scopes de tu key: si la key no tiene el scope, la tool no aparece. Esta tabla se genera del catálogo real del servidor.

DominioToolsScopes
Automatizacionesmet_list_flows Listar flujos
met_run_flow Ejecutar un flujo
met_get_flow_run Ver la ejecución de un flujo
met_list_flow_nodes Catálogo de nodos para armar un flujo
met_list_triggers Catálogo de disparadores
met_get_flow Ver un flujo completo
met_test_flow_node Probar un nodo del flujo
met_publish_flow Publicar un flujo
met_list_flow_runs Ejecuciones de un flujo
met_cancel_flow_run Cancelar una ejecución de flujo
met_list_automations Listar automatizaciones
met_get_automation Ver una automatización
met_create_automation Crear una automatización (que un flujo corra solo)
met_update_automation Editar, pausar o activar una automatización
met_schedule_automation Cambiar el horario de una automatización recurrente
met_run_automation_now Ejecutar ya una automatización programada
met_delete_automation Eliminar una automatización
automations:read · automations:execute · automations:write
Contactosmet_list_contacts Listar contactos
met_get_contact Ver la ficha completa de un contacto
met_create_contact Crear contacto
met_update_contact Actualizar los campos de un contacto
met_list_conversations Listar las conversaciones de la bandeja
met_get_inbox_counts Contar las conversaciones de la bandeja
met_list_notes Leer las notas internas de una conversación
met_add_note Dejar una nota interna en una conversación
met_assign_conversation Asignar una conversación a un asesor o a un grupo
met_set_conversation_status Cambiar el estado de una conversación (abrir, dejar pendiente, finalizar, archivar)
met_list_tags Listar las etiquetas del workspace
met_set_conversation_tags Poner o quitar etiquetas a una conversación
contacts:read · contacts:write
Coleccionesmet_list_collections Listar colecciones
met_get_collection Ver el esquema de una colección
met_create_collection Crear una colección (con sus campos)
met_add_collection_field Agregar un campo a una colección
met_update_collection_field Editar un campo de una colección
met_create_collection_view Crear una vista de una colección
met_update_collection_view Editar una vista de una colección
met_update_collection Editar una colección
met_delete_collection_field Quitar un campo de una colección
met_delete_collection Borrar una colección
collections:read · collections:write
Ítemsmet_search_items Buscar items en todo el workspace
met_list_items Listar items de una colección
met_get_item Ver un item
met_create_item Crear un item
met_update_item Actualizar un item
met_set_item_status Pausar o reactivar un item
met_list_item_comments Leer los comentarios de un item
met_comment_item Comentar un item
met_delete_item Borrar un item
items:read · items:write
Tareasmet_list_tasks Listar tareas
met_get_task Ver una tarea
met_create_task Crear tarea
met_set_task_status Cambiar el estado de una tarea
met_add_task_step Agregar un paso a una tarea
met_update_task_step Marcar o editar un paso de una tarea
met_delete_task_step Quitar un paso de una tarea
tasks:read · tasks:write
Agentsmet_list_agents Listar los Mets del workspace
met_list_attention_groups Listar los grupos de atención y sus asesores
met_get_agent Ver un Met completo
met_create_agent Crear un Met
met_update_agent Editar un Met (prompt, modelo, nombre, estado)
met_list_agent_tools Qué acciones ve un Met
agents:read · agents:write
Skillsmet_list_skills Listar habilidades del workspace
met_list_agent_skills Habilidades disponibles para un Met
met_link_agent_skill Darle una habilidad a un Met
met_get_skill_setup Qué le falta a una habilidad para funcionar
met_unlink_agent_skill Quitarle una habilidad a un Met
met_set_agent_disabled_tools Apagar o prender acciones de un Met
skills:read · skills:manage
Conversacionesmet_get_messages Leer la conversación con un contacto
met_search_messages Buscar mensajes en una conversación
met_list_quick_replies Listar las respuestas rápidas del equipo
met_save_quick_reply Crear o editar una respuesta rápida
met_delete_quick_reply Borrar una respuesta rápida
conversations:read · conversations:write
Funcionesmet_list_functions Listar las Funciones del workspace
met_create_function Crear una Función para los Mets
met_update_function Editar una Función
met_link_agent_function Darle una Función a un Met
met_unlink_agent_function Quitarle una Función a un Met
functions:read · functions:write
Flujosmet_create_flow Crear un flujo
met_update_flow Editar un flujo (borrador, nombre, descripción)
met_duplicate_flow Duplicar un flujo
met_import_flow Importar un flujo desde JSON
met_delete_flow Archivar (borrar) un flujo
flows:write
Canalesmet_send_message Enviar un mensaje a un contacto
met_list_channels Listar los canales y cuáles están conectados
met_list_whatsapp_templates Ver las plantillas de WhatsApp de un canal
met_send_whatsapp_template Enviar una plantilla de WhatsApp (fuera de la ventana de 24 h)
channels:send · channels:read
Recordatoriosmet_list_reminders Listar recordatorios
met_create_reminder Agendar un recordatorio a un contacto
met_update_reminder Reagendar o editar un recordatorio
met_cancel_reminder Cancelar un recordatorio
reminders:read · reminders:write
Facturaciónmet_get_plan_usage Plan actual y uso contra sus límites
met_get_energy_balance Cuánta Energía queda
met_get_energy_consumption En qué se está gastando la Energía
met_list_energy_movements Movimientos de Energía (recargas, bonos, consumos)
billing:read
Runsmet_run_agent Ejecutar un Met
met_get_run Ver un Run
met_list_runs Historial de Runs
runs:execute · runs:read
Plantillasmet_list_snapshots Catálogo de plantillas
met_get_snapshot Ficha de una plantilla
met_install_snapshot Instalar una plantilla
snapshots:read · snapshots:install
Integracionesmet_set_skill_credentials Guardar las credenciales de una habilidad
met_list_integrations Integraciones disponibles y conectadas
met_list_integration_tools Qué acciones trae una integración
integrations:manage · integrations:read
Eventosmet_list_events Eventos recientes de la cuenta
met_get_event Ver un evento completo
met_list_activity Bitácora de cambios de la cuenta
events:read
Variablesmet_list_contact_fields Esquema de campos del CRM
met_list_variables Listar variables del workspace
variables:read
Handoffmet_set_autopilot Pasar la conversación a un humano (o devolverla)
met_pause_autopilot Pausar el autopiloto por unos minutos
handoff:manage
MCPmet_whoami Con qué cuenta y qué permisos estás conectadomcp:use
Archivosmet_list_assets Buscar archivos del workspacefiles:read

Las tools de la tabla tienen nombre propio: son lo que la gente hace todos los días, y tu asistente las prefiere. Para lo demás están las de la sección siguiente.

Cualquier operación de la API

El catálogo cierra con 3 tools que alcanzan cualquier operación de la API REST que no tenga tool propia: buscar la operación, ver sus parámetros y llamarla. Cada llamada pasa por la misma ruta que la API, con tu key, así que exige el scope de esa operación y respeta la idempotencia y los límites de tu plan.

ToolQué haceScope
met_search_operationsBuscar una operación de la API de Metmcp:use
met_describe_operationVer cómo se llama una operación de la APImcp:use
met_call_operationLlamar una operación de la API de Metmcp:use

Si tu key es de partner

Una key de partner habla con otro endpoint, en el host de la API de Partners:

https://api.partners.meteor.com.co/mcp

Son dos servidores distintos y con qué key te autenticas decide cuál te sirve: una key de workspace habla con el de arriba, una de partner con este. Un workspace y una cartera de clientes no comparten permisos, así que tampoco comparten catálogo — y una key de workspace apuntando aquí recibe un catálogo vacío, no un error.

Son 14 tools, todas con el prefijo met_partner_. El partner sobre el que operan sale de tu key, nunca de un argumento.

DominioToolsScopes
Oportunidadesmet_partner_list_leads Listar oportunidades
met_partner_get_lead Ver una oportunidad
met_partner_create_lead Crear una oportunidad
met_partner_list_lead_comments Leer el hilo de una oportunidad
met_partner_comment_lead Escribir en el hilo de una oportunidad
partner:leads:read · partner:leads:write
Soportemet_partner_list_tickets Listar tickets
met_partner_get_ticket Ver un ticket
met_partner_reply_ticket Responder un ticket
partner:support:read · partner:support:write
Proyectosmet_partner_list_projects Listar proyectos
met_partner_list_project_tasks Tareas de un proyecto
partner:projects:read
Clientesmet_partner_list_clients Listar clientes atribuidospartner:clients:read
Comisionesmet_partner_list_commissions Listar comisionespartner:commissions:read
Pagosmet_partner_list_payouts Listar liquidacionespartner:payouts:read
Comunidadmet_partner_get_community_event Sesión de esta semana en la Comunidadpartner:community:read

Cómo se comporta

El catálogo tiene dos partes: las tools curadas van primero y son las que tu asistente prefiere; las genéricas lo cierran.

Anotaciones y confirmación

Cada tool declara las anotaciones de MCP: readOnlyHint (solo lee), destructiveHint (borra o sobrescribe), idempotentHint y openWorldHint (tiene efecto fuera de Meteor: un WhatsApp, un correo, un gasto). Los clientes las usan para decidir cuándo pedirle permiso a la persona.

Lo que no se deshace exige además confirm: true en los argumentos: borrar (flujos, automatizaciones, colecciones, campos, items, pasos, respuestas rápidas), publicar un flujo, sobrescribir su borrador, ejecutar ya una automatización, instalar un snapshot, importar en lote, etiquetar en masa, crear una difusión o reemplazar credenciales. En la genérica, todo DELETE lo exige. Sin confirm, la llamada falla sin tocar nada y el error dice qué se perdería; la descripción de cada tool le pide al modelo confirmarlo con la persona antes de repetir.

Respuestas y reintentos

Lo que queda fuera

Si el modelo intenta una operación excluida, met_call_operation responde con el motivo y qué hacer en su lugar.

Dos tools que conviene conocer

Seguridad


¿Prefieres escribir el código tú? Empieza por las Guías y el quickstart del SDK.