Developers · Agentes IA

MCP Server Beta

Conectá un agente IA —Claude, Cursor, o el asistente que estés construyendo— directamente a tu operación logística. Toda la API REST se expone como 73 herramientas nativas que el agente descubre e invoca solo. Vos describís el resultado que querés; el agente lo ejecuta contra +Simple.

Por qué importa

El Model Context Protocol convirtió a los agentes IA en una nueva interfaz para operar software B2B: en vez de que cada cliente escriba una integración, el agente descubre lo que tu plataforma sabe hacer y lo ejecuta conversando. El MCP Server de +Simple lleva eso a la logística — sin SDKs, sin glue code, sin esperar a un equipo de ingeniería.

Integración sin código

El agente descubre las 73 tools solo, desde el contrato OpenAPI. No escribís SDK ni mapeás endpoints: conectás la key y ya opera.

Tu operación, en lenguaje natural

«Armá la ruta de mañana con los envíos pendientes de zona norte y asigná al chofer con más capacidad». El agente encadena las tools y lo resuelve.

Cero drift con la API

Las tools se generan del mismo contrato que la API REST. Si la API cambia, las tools se actualizan en la misma versión — nunca quedan desincronizadas.

Seguro por diseño

Least-privilege por default, datos aislados por empresa, rate limiting y audit log en cada llamada. Revocás o rotás la key en un click.

Compatible con Claude (Desktop y web), Cursor, Cline, VS Code y cualquier cliente que hable MCP. Un mismo servidor, todos los agentes.

¿Qué es MCP?

Model Context Protocol es un estándar abierto para que las aplicaciones de IA descubran y usen herramientas externas. Cualquier cliente compatible (Claude Desktop, Claude en web, Cursor, Cline, etc.) puede conectarse a un servidor MCP y usar las tools que expone.

El servidor MCP de +Simple es un adaptador puro sobre nuestra API REST /v1: cada operación de la API se convierte automáticamente en una tool que el agente puede invocar. No hay lógica nueva ni un contrato aparte — es la misma API que documenta el API Reference, expuesta en el lenguaje de los agentes.

En una línea. Le pedís al agente "creá un envío para Juan Pérez en Corrientes 1234 con entrega el martes" y el agente llama create_shipment con los datos correctos. +Simple valida, acepta la orden y la despacha.

Cómo funciona

Las 73 tools se generan a partir del mismo contrato OpenAPI que documenta la API REST. Esto garantiza cero drift: si la API cambia, las tools se actualizan en la misma versión del servidor, sin trabajo manual.

El flujo de una conversación es siempre el mismo:

PasoQué pasa
1. DescubrimientoEl cliente pide tools/list y recibe las 73 tools con sus schemas (nombre, descripción, parámetros).
2. DecisiónEl agente elige la tool según tu pedido en lenguaje natural y arma los argumentos.
3. EjecuciónEl cliente llama tools/call. El servidor traduce esa llamada a un request HTTP autenticado contra /v1.
4. RespuestaLa API responde JSON; el servidor se lo devuelve al agente, que lo interpreta y te contesta.

La autenticación, los scopes, el rate limiting y el audit log son exactamente los mismos que los de la API REST: el MCP no abre una puerta nueva, reusa la que ya existe.

Conectá en 2 minutos

La forma recomendada es el conector remoto: la API key viaja en la URL del conector y el servidor resuelve tu empresa y permisos por request. No hay que instalar nada.

1

Generá una API key de tipo MCP

En el dashboard, andá a IntegracionesKey ManagerNueva key → Tipo: MCP. Elegí un preset de rol (por default arranca en Solo lectura, lo más seguro para un cliente LLM).

La key se ve UNA sola vez al crearla. Guardala en tu gestor de secretos. Formato: mss_test_* en sandbox, mss_live_* en producción.

Least-privilege. Una key MCP puede terminar visible en el cliente del agente. Dale solo los scopes que el asistente necesita: si solo consulta, dejala read-only. Es revocable y rotable desde el dashboard en cualquier momento.
2

Agregá el conector remoto en tu cliente

En Claude: Configuración → Conectores → Agregar conector personalizado. Pegá la URL con tu key en el path:

https://api.massimple.la/mcp/k/<TU_API_KEY>

El cliente hace el handshake (initializetools/list) y carga las 73 tools. Sin API key en la URL, la conexión se rechaza con 401.

Entorno. El MCP está en beta por invitación. Al sumarte te entregamos el endpoint del conector y la API key; en el lanzamiento general (GA) queda disponible en api.massimple.la. Escribinos para coordinar el acceso.
3

Probalo

Pedile algo al agente en lenguaje natural. Por ejemplo:

"¿Cuántos envíos pendientes tengo hoy y cuántas rutas están activas?"

El agente va a llamar list_shipments y get_operations_summary, y te va a responder con los números reales de tu empresa. Si tu key tiene scopes de escritura, también puede crear envíos, armar rutas y asignar conductores. Mirá los ejemplos.

Alternativa: servidor local (stdio)

Para entornos de escritorio (Claude Desktop, Cursor) también podés correr el servidor localmente vía stdio, apuntándolo al entorno que quieras:

{
  "mcpServers": {
    "massimple": {
      "command": "npx",
      "args": ["@massimple/mcp-server"],
      "env": {
        "MASSIMPLE_API_KEY": "mss_test_...",
        "MASSIMPLE_BASE_URL": "https://api.massimple.la/v1"
      }
    }
  }
}
Distribución del paquete. El paquete @massimple/mcp-server se distribuye bajo demanda durante la beta. Escribinos para obtenerlo; el conector remoto (arriba) no requiere instalación y es la vía recomendada.

Autenticación y entornos

La API key identifica a tu empresa y trae los scopes que definís al crearla. Cada tool call se ejecuta con esos permisos y queda acotada a tu empresa — un agente nunca ve datos de otra.

ConceptoValor
Endpoint MCP (GA)https://api.massimple.la/mcp/k/<api_key> — el del beta se entrega al sumarte
Base URL de la APIhttps://api.massimple.la/v1
Formato de keymss_test_* (sandbox) · mss_live_* (producción)
IdentidadEmpresa + scopes de la key. get_whoami confirma a quién apunta.
TransporteJSON-RPC sobre HTTP (stateless). Métodos: initialize, tools/list, tools/call, ping.

Sanity check inmediato: pedile al agente "¿a qué empresa apunta mi conexión?" y va a llamar get_whoami:

{
  "application": {
    "id": "...",
    "name": "Mi asistente",
    "env": "test",
    "scopes": ["shipments:read", "routes:read", "analytics:read"]
  },
  "company_id": "..."
}

Ejemplos de uso

Cada ejemplo muestra el pedido en lenguaje natural, la tool call que arma el agente y la respuesta que devuelve +Simple.

Consultar métricas de la operación

"Dame un resumen de cómo viene la operación."

El agente llama get_operations_summary (scope analytics:read). Devuelve una foto now más ventanas de 24h/7d/30d con su rango exacto — los mismos números que ves en el dashboard:

{
  "as_of": "2026-07-12T14:30:00.000Z",
  "sla_minutes": 240,
  "now": {
    "active_routes": 12,
    "active_assignments": 9
  },
  "windows": {
    "24h": {
      "from": "2026-07-11T14:30:00.000Z",
      "to": "2026-07-12T14:30:00.000Z",
      "shipments_by_status": { "pending": 34, "in_route": 21, "delivered": 78 },
      "shipments_with_activity": 133,
      "sla_performance": 0.94,
      "completion_rate": 0.97,
      "avg_delivery_minutes": 186
    }
  },
  "hint": "Para desglose por hora/ruta y export, usá el Dashboard."
}

Listar envíos por estado

"¿Cuántos envíos pendientes tengo creados esta semana?"

El agente llama list_shipments con filtros (scope shipments:read). Además de status y date, soporta rangos created_from/created_to y updated_from/updated_to:

// tools/call → list_shipments
{
  "status": "pending",
  "created_from": "2026-07-06",
  "created_to": "2026-07-12",
  "limit": 50
}

Respuesta (listado paginado):

{
  "data": [
    {
      "_id": "...",
      "trackingNumber": "MS-2026-000123",
      "status": "pending",
      "destination": { "destinyName": "Juan Pérez", "address": "Av. Corrientes 1234, CABA" },
      "createdAt": "2026-07-10T11:02:00.000Z"
    }
  ],
  "pagination": { "total": 34, "limit": 50, "offset": 0 }
}

Crear un envío

"Creá un envío para Juan Pérez en Av. Corrientes 1234, CABA, para entregar mañana."

Con scope shipments:write, el agente llama create_shipment:

// tools/call → create_shipment
{
  "originDistributionCenter": "<ID-DC>",
  "destination": {
    "destinyName": "Juan Pérez",
    "address": "Av. Corrientes 1234, CABA",
    "latitude": -34.6037,
    "longitude": -58.3816,
    "contactPhone": "+5491155557777"
  },
  "content": "Caja con dos productos",
  "amountToCollect": 0,
  "scheduledDate": "2026-07-13",
  "status": "pending"
}

Respuesta 201 con el envío creado, incluyendo _id y trackingNumber autogenerado. El agente te confirma el número de seguimiento.

Flujo completo de distribución

Con un rol de Operador de distribución, un agente puede encadenar tools en una sola conversación: list_available_shipmentscreate_routeoptimize_routecreate_assignment (conductor + vehículo). Vos describís el objetivo; el agente resuelve el orden.

Catálogo de tools

73 tools, una por cada operación de la API. Los nombres son el operationId en snake_case. Para el detalle de parámetros y respuestas de cada una, mirá el API Reference (mismo contrato).

Envíos · 15

ToolMétodoQué hace
create_shipmentPOSTCrear un envío
list_shipmentsGETListar envíos
list_available_shipmentsGETListar envíos disponibles para rutear
bulk_create_shipmentsPOSTCrear envíos en lote
bulk_delete_shipmentsPOSTEliminar envíos en lote
get_shipment_by_external_idGETObtener envío por external_id
update_shipment_by_external_idPATCHActualizar envío por external_id
delete_shipment_by_external_idDELETEEliminar envío por external_id
cancel_shipment_by_external_idPOSTCancelar envío por external_id
recreate_shipment_by_external_idPOSTRecrear envío por external_id
recreate_shipmentPOSTRecrear envío
cancel_shipmentPOSTCancelar envío
get_shipmentGETObtener un envío
update_shipmentPATCHActualizar un envío
delete_shipmentDELETEEliminar un envío

Rutas · 16

ToolMétodoQué hace
create_routePOSTCrear ruta
list_routesGETListar rutas
get_route_by_external_idGETObtener ruta por external_id
update_route_by_external_idPATCHActualizar ruta por external_id
delete_route_by_external_idDELETEEliminar ruta por external_id
optimize_route_by_external_idPOSTOptimizar ruta por external_id
unassign_route_by_external_idPOSTDesasignar ruta por external_id
get_route_stops_by_external_idGETListar paradas de ruta por external_id
update_route_stops_sequence_by_external_idPATCHReordenar paradas por external_id
get_routeGETObtener ruta
update_routePATCHActualizar ruta
delete_routeDELETEEliminar ruta
optimize_routePOSTOptimizar ruta
unassign_routePOSTDesasignar ruta
get_route_stopsGETListar paradas de ruta
update_route_stops_sequencePATCHReordenar paradas

Vehículos · 9

ToolMétodoQué hace
create_vehiclePOSTCrear un vehículo
list_vehiclesGETListar vehículos
bulk_create_vehiclesPOSTCrear vehículos en lote
get_vehicle_by_external_idGETObtener vehículo por external_id
update_vehicle_by_external_idPATCHActualizar vehículo por external_id
delete_vehicle_by_external_idDELETEEliminar vehículo por external_id
get_vehicleGETObtener un vehículo
update_vehiclePATCHActualizar un vehículo
delete_vehicleDELETEEliminar un vehículo

Conductores · 11

ToolMétodoQué hace
create_driverPOSTCrear un conductor
list_driversGETListar conductores
bulk_create_driversPOSTCrear conductores en lote
get_driver_by_external_idGETObtener conductor por external_id
update_driver_by_external_idPATCHActualizar conductor por external_id
delete_driver_by_external_idDELETEEliminar conductor por external_id
change_driver_passwordPOSTCambiar contraseña de un conductor
change_driver_password_by_external_idPOSTCambiar contraseña por external_id
get_driverGETObtener un conductor
update_driverPATCHActualizar un conductor
delete_driverDELETEEliminar un conductor

Asignaciones · 10

ToolMétodoQué hace
create_assignmentPOSTCrear una asignación
list_assignmentsGETListar asignaciones
get_assignment_by_external_idGETObtener asignación por external_id
update_assignment_by_external_idPATCHActualizar asignación por external_id
delete_assignment_by_external_idDELETEEliminar asignación por external_id
unassign_assignment_by_external_idPOSTDesasignar por external_id
get_assignmentGETObtener una asignación
update_assignmentPATCHActualizar una asignación
delete_assignmentDELETEEliminar una asignación
unassign_assignmentPOSTDesasignar conductor de vehículo

Webhooks · 7

ToolMétodoQué hace
create_webhookPOSTRegistrar un webhook
list_webhooksGETListar webhooks
get_webhookGETObtener un webhook
delete_webhookDELETEEliminar un webhook
pause_webhookPOSTPausar un webhook
resume_webhookPOSTReanudar un webhook pausado
rotate_webhook_secretPOSTRotar el secret del webhook

Eventos, métricas y sistema · 5

ToolMétodoQué hace
list_eventsGETListar eventos de la empresa
get_operations_summaryGETResumen operativo (multi-ventana)
get_healthGETVerificar salud de la API
get_openapi_specGETEspecificación OpenAPI (JSON)
get_whoamiGETIdentificar la aplicación que llama

Roles y scopes

Una key MCP lleva un bundle de scopes que define qué puede hacer el agente. Al crearla en el dashboard elegís un preset de rol; podés ajustar los scopes finos después. Las keys MCP arrancan en Solo lectura por default.

PresetQué puede hacerScopes
Solo lectura / Analista
recomendado MCP
Lee todo (envíos, rutas, flota, eventos) y métricas. No modifica nada. *:read + analytics:read
Operador de pickup Consulta acotada de envíos y rutas + métricas. Sin escritura. shipments:read, routes:read, analytics:read
Operador de distribución Opera la distribución: crea/actualiza envíos, arma y optimiza rutas, asigna conductor+vehículo. Lee todo. No elimina ni gestiona webhooks. lectura + shipments:write, routes:write, routes:optimize, assignments:write
Admin de empresa Acceso total: leer, operar, eliminar y gestionar webhooks/contraseñas. todos los scopes
Ojo con la escritura. Darle a un agente scopes de escritura significa que puede crear, modificar o borrar datos reales de tu operación. Para asistentes de consulta, quedate en read-only. Empezá acotado y ampliá cuando lo necesites.

Formato de respuestas

El servidor devuelve datos, no prosa: el JSON crudo de la API, para que el agente lo interprete con precisión. Algunos principios de diseño:

PrincipioQué significa
Foto vs. ventanaget_operations_summary separa el estado actual (now) de las métricas por ventana temporal (windows), cada una con su rango from/to.
Fechas siempre explícitasToda ventana ecoa su rango exacto, para que el agente no tenga que inferir "las últimas 24h".
Coherencia con el dashboardLas métricas reusan la misma lógica que el dashboard corporativo: los números cierran.
Listados paginadosLos list_* devuelven data + pagination (total, limit, offset).

Seguridad

  • Least-privilege por default. Las keys MCP arrancan read-only; los scopes de escritura son opt-in explícito.
  • Aislamiento por empresa. Cada tool call queda acotado al company_id de la key. Un agente nunca ve datos de otra empresa.
  • Rate limiting. Límite de requests por minuto por key, con Retry-After al excederlo.
  • Audit log. Cada request queda registrado (empresa, tipo de key, endpoint, status) para trazabilidad.
  • Revocable y rotable. Podés desactivar o rotar cualquier key desde el dashboard en cualquier momento.
  • TLS end-to-end. La key viaja en la URL del conector sobre HTTPS; tratala como un secreto.

Límites actuales

El MCP está en beta por invitación. Para ser transparentes sobre lo que todavía no hace:

  • Sin OAuth / identidad de usuario. La key identifica a la empresa, no a la persona. El "rol" es el bundle de scopes de la key, no el rol real de un usuario logueado. El login por usuario (SSO nativo en Claude) llega en una fase posterior.
  • Solo modo path en el conector. La forma soportada es /mcp/k/<key> en la URL. Los modos header (Authorization: Bearer) y query (?k=) no están disponibles en el dominio actual.
  • Sin streaming server→cliente (SSE). El transporte es JSON-RPC stateless: una request, una respuesta. No hay notificaciones push desde el servidor.
  • Sin data-scoping por centro. Los presets dan lectura a nivel empresa; acotar a un centro de distribución específico llega con la fase de OAuth.
  • Entorno. En beta por invitación; el acceso general (GA) llega después. Escribinos para sumarte.

Recursos

  • API Reference — el contrato completo del que se generan las tools.
  • Guía ultra simple — integración directa con la API REST en 5 pasos.
  • Contactanos — para acceso a la beta, el paquete local o coordinar producción.
Las 73 tools se generan del mismo contrato OpenAPI que la API REST — si la API cambia, las tools se actualizan sin drift.