Servidor MCP
Servidor MCP con OAuth y aprobación humana para que agentes de IA operen ArduMaker, con perfiles, reintentos seguros y límites.
- Categoría: Inteligencia artificial y agentes
- Estado: Disponible
- Requisitos: Una cuenta de ArduMaker para aprobar el acceso del agente; Un cliente compatible con MCP y OAuth (por ejemplo Claude, ChatGPT o Cursor); Acceso, como persona, a las empresas, proyectos y VPS que el agente va a usar
- Herramientas MCP (Solo leen):
ping,ver_contexto_inicial,listar_empresas,ver_operacion
¿Qué permite hacer?
- Que un agente de IA opere ArduMaker a nombre de una persona real: proyectos, VPS, dominios, bases, correo, WordPress, deploys, túneles y más.
- Elegir al aprobar sobre qué proyectos y qué VPS puede actuar, y si es de solo lectura.
- Conectar el mismo agente a un subconjunto de herramientas (un perfil) para no gastar contexto.
- Reintentar creaciones sin duplicar nada, seguir operaciones largas y recibir errores que dicen qué hacer.
¿Cuándo conviene usarlo?
- Delegar en un agente tareas repetitivas de infraestructura o de gestión de proyectos.
- Dejar que un agente diagnostique (logs, estado) con permisos de solo lectura.
- Automatizar flujos de varios pasos (publicar un repo en un dominio, armar un túnel entre VPS) en una sola llamada.
¿Cómo funciona en ArduMaker?
Conexión y autorización
- El cliente se registra solo en el servidor (
https://mcp.ardumaker.com, registro dinámico). Registrarse no da ningún acceso. - El cliente abre la autorización en el navegador; ArduMaker muestra qué agente pide acceso. La solicitud vive 10 minutos y es de un solo uso.
- La persona aprueba o rechaza y elige el alcance: todos los proyectos o algunos, todos los VPS o algunos (por separado), y si es de solo lectura.
- El cliente recibe un
access_token(8 horas) y unrefresh_token(30 días, de un solo uso) y llama a las herramientas con OAuth 2.1 + PKCE. - Cuando vence el access token, el cliente lo renueva solo, sin volver a pedir aprobación. La sesión dura como máximo 180 días; después hay que volver a autorizar.
Cada renovación entrega un refresh token nuevo e invalida el anterior. Si llega uno ya usado, hay una copia dando vueltas: se revoca la sesión entera y se marca la conexión. Aprobar otra vez el mismo cliente reusa la conexión y abre una sesión nueva.
Descubrimiento
- Metadatos OAuth en
/.well-known/oauth-authorization-servery/.well-known/oauth-protected-resource. /tools.json: la referencia pública de las herramientas, sin autenticación. La versión legible está en /mcp/docs.pingresponde sin token; todo lo demás exige token.tools/listya viene filtrado: un agente de solo lectura no ve las herramientas que escriben, y las de administración del sistema solo aparecen si quien autorizó es admin del sistema.
Contexto de empresa
La primera llamada recomendada es ver_contexto_inicial (también como recurso ardumaker://contexto-inicial): dice quién autorizó al agente, qué alcance tiene, hasta 50 ids de empresas, proyectos y VPS, cuántos VPS ve en total y la lista de lo que ningún agente puede hacer. Las listas están cortadas: si falta algo, se busca con listar_empresas, listar_proyectos o listar_todos_los_vps.
Lectura, escritura y acciones sensibles
- Cada herramienta declara si solo lee, si es destructiva, si es idempotente y si toca el mundo exterior. Una sin declarar se trata como de escritura.
- Las herramientas llaman a los mismos servicios que el panel web, con los permisos de la persona que autorizó: un agente nunca ve ni hace más que su humano.
- Las acciones de riesgo piden una confirmación explícita en el argumento (
confirmado,confirmacioncon el nombre exacto) y algunas no existen por MCP (borrar un VPS, un proyecto o un registro DNS). Ver Permisos del agente MCP. - Lo que escribió un tercero (correos, comentarios, logs, mensajes de commit, salida de comandos) llega envuelto como
{origen: "no_confiable", escrito_por, advertencia, contenido}: es dato, nunca instrucciones.
Reintentos y operaciones largas
- Toda herramienta que crea algo acepta
idempotency_key. Repetir con la misma clave y los mismos argumentos devuelve el resultado original marcadoidempotente: true; la clave vale 24 horas. Reusarla con otros argumentos se rechaza. - Lo que tarda (crear un VPS, clonar un repo, activar un dominio con SSL, instalar un rol de túnel) devuelve un
operacion_id.ver_operacionresponde siempre igual:estadoen_curso,okoerror, yreintentar_en_segundosmientras corre. - El resultado de una operación terminada queda disponible unos días, así que tras una desconexión se recupera con
ver_operacionen vez de repetir nada.
¿Qué cambia realmente?
- Al aprobar se crea una conexión entre la persona y el cliente; se ve y se administra en
/me(agentes conectados). - Cada llamada queda registrada (ver Auditoría de agentes).
- Lo que el agente modifica cambia en ArduMaker igual que si lo hiciera la persona desde el panel, y queda a nombre del agente y de quien lo autorizó.
Perfiles
| Ruta | Qué sirve |
|---|---|
/mcp | Todo; no cambia nunca |
/mcp/vps | VPS, dominios y nginx, usuarios Linux, systemd, tareas, bases, deploys, túneles, logs y Apps |
/mcp/proyectos | Proyectos, etapas, tareas, checklists, comentarios, adjuntos, calendario, reuniones y papelera |
/mcp/infra | Correo, dominios y DNS, blogs, estado de cobro, claves de RouterIA y Search API, sandbox y webhooks de WhatsApp |
/mcp/wordpress | Sitios WordPress, WooCommerce y Elementor, más instalar_app y listar_vps |
Un mismo token vale en todos los perfiles: cambiar de perfil es cambiar la URL. ping, ver_contexto_inicial, ver_operacion y listar_empresas están en todos.
Límites
| Límite | Valor | Qué pasa al pasarlo |
|---|---|---|
| Llamadas por conexión | 10 por segundo | limite_excedido con reintentar_en_segundos; el rechazo no gasta cupo |
| Listas en una respuesta | 200 elementos | Se recorta y se agrega <clave>_recortado con el total real |
limit fuera de rango | El máximo de cada herramienta | Se ajusta y se avisa en limit_ajustado |
| Comandos en un VPS | 10 por segundo por VPS; salida de 20000 caracteres; espera de 10 a 300 s | Rechazo o salida truncada (truncated: true) |
| Cambios DNS | 10 por minuto por empresa | 429 |
| Copias de VPS a mano | 1 por hora por VPS | 429 |
Algunas herramientas tienen límites propios más bajos, indicados en su descripción.
Esquema
- Cliente MCP: token Bearer de la sesión
- Auditoría: envuelve todo: también los rechazos quedan registrados
- Límite por conexión: 10 llamadas por segundo
- Guardas: solo lectura, admin del sistema, idempotencia
- Herramienta: mismo servicio que el panel, con el alcance en vivo
- Respuesta: datos, o error estructurado
Resultado esperado
- En el cliente aparecen las herramientas del perfil elegido, ya filtradas por el alcance.
ver_contexto_inicialconfirma a nombre de quién actúa el agente y qué puede hacer.- En
/mese ve la conexión: activa o no, último uso, hasta cuándo dura la sesión y qué está haciendo el agente.
Errores y resolución
Todo error llega con la misma forma, sin trazas internas:
{
"error": true,
"code": "parametro_invalido",
"que_paso": "...",
"que_hacer": "...",
"reintentable": false,
"detalle": { "fields": { "...": "..." } }
}| `code` | Significa | ¿Reintentable? |
|---|---|---|
no_encontrado | El id no existe; puede traer candidatos válidos | No |
sin_permiso | La persona, el alcance o la regla de MCP no lo permiten | No |
parametro_invalido | Un argumento está mal; detalle dice cuál | No |
conflicto | Hace falta cambiar un argumento (por ejemplo, confirmar) | No |
estado_invalido | El mundo no está listo: VPS apagado, servicio externo caído | Sí |
limite_excedido | Se pasó un límite; esperar reintentar_en_segundos | Sí |
interno | Error inesperado; trae correlacion_id para reportarlo | Sí, una vez |
reintentable: truesignifica que repetir la MISMA llamada, sin cambiar nada, puede funcionar.- En OAuth,
invalid_grantconRefresh token already used; the session was revokedindica reutilización detectada: hay que volver a autorizar. - Un timeout de un comando (
agente_timeout) no significa que no corrió: conviene revisar antes de repetirlo.
Relación con MCP
Este documento es el propio servidor MCP. La referencia de cada herramienta (parámetros, si lee o escribe, si es destructiva) está en /mcp/docs, y la presentación con ejemplos por área en /mcp.
- Herramientas comunes:
ping(sin autenticación),ver_contexto_inicial,listar_empresas,ver_operacion. - Para instalar algo en un VPS, el orden recomendado es:
instalar_apppara lo que ofrece el catálogo; la configuración de deploy (guardar_config_deploy_app) para los procesos de una app de Git;crear_servicio_vpsycrear_tarea_vpspara lo demás;ejecutar_comando_vpssolo si nada de lo anterior sirve.