LetsCloud MCP Server

Gestiona la infraestructura de LetsCloud a través de conversaciones en lenguaje natural. Compatible con inglés y portugués.

Documentación

LetsCloud MCP Server

🇧🇷 Versão em português

Servidor MCP remoto + API REST para gestionar la infraestructura de LetsCloud con asistentes de IA.

Este proyecto expone la plataforma en la nube de LetsCloud a través del Model Context Protocol (MCP) para que asistentes de IA como Claude, Cursor, Windsurf, VS Code Copilot y cualquier cliente compatible con MCP puedan crear y gestionar servidores, snapshots y claves SSH en nombre del usuario.

A diferencia de los servidores MCP "locales", este es un servicio alojado: cualquier cliente de LetsCloud puede conectarse proporcionando su clave de API — no se requiere instalación en el lado del cliente.

El mismo backend también expone una API REST limpia en /api/v1 para integraciones HTTP simples (curl, scripts, automatizaciones).


✨ Características

  • 🔌 Transporte MCP nativo (Streamable HTTP) en /mcp
  • 🌐 API REST en /api/v1 que replica cada herramienta MCP
  • 🔑 Autenticación por solicitud mediante Authorization: Bearer <api-key>
  • 📦 Cobertura completa de la API de LetsCloud — instancias, claves SSH, snapshots, planes, imágenes, ubicaciones, cuenta
  • ⚡ Asíncrono, rápido y ligero (FastAPI + httpx + SDK oficial de MCP)
  • 🐳 Listo para Docker
  • 📝 Documentación OpenAPI autogenerada en /docs

🧠 Cómo funciona

┌──────────────────┐      Authorization: Bearer <api-key>     ┌──────────────────────┐
│ AI client (MCP)  │ ───────────────────────────────────────► │ mcp.letscloud.io/mcp │
│ Claude, Cursor…  │                                          │  (this server)       │
└──────────────────┘                                          └──────────┬───────────┘
                                                                         │  api-token: <key>
                                                                         ▼
                                                            ┌──────────────────────────┐
                                                            │ core.letscloud.io/api    │
                                                            └──────────────────────────┘

La clave de API del usuario nunca sale de la solicitud: el servidor simplemente la reenvía al upstream de LetsCloud y devuelve la respuesta. El servidor no almacena credenciales.


🚀 Inicio rápido (usando el servidor alojado)

Obtén tu clave de API

Genera una clave de API en el panel de LetsCloud.

Configura tu cliente MCP

Claude Desktop / Cursor / Windsurf (MCP remoto)

{
  "mcpServers": {
    "letscloud": {
      "url": "https://mcp.letscloud.io/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_LETSCLOUD_API_KEY"
      }
    }
  }
}

Nota: los nombres exactos de los campos pueden variar ligeramente entre clientes (algunos usan transport: "streamable-http", otros lo detectan automáticamente). Consulta la documentación de tu cliente para "servidor MCP remoto".

Prueba con curl (API REST)

curl -H "Authorization: Bearer YOUR_LETSCLOUD_API_KEY" \
     https://mcp.letscloud.io/api/v1/account
curl -H "Authorization: Bearer YOUR_LETSCLOUD_API_KEY" \
     https://mcp.letscloud.io/api/v1/instances

🛠️ Herramientas disponibles

Herramienta MCPEndpoint RESTDescripción
get_account_infoGET /api/v1/accountPerfil de la cuenta (nombre, saldo, correo…)
list_locationsGET /api/v1/locationsTodas las ubicaciones de datacenter
list_plansGET /api/v1/locations/{slug}/plansPlanes disponibles en una ubicación
list_imagesGET /api/v1/locations/{slug}/imagesImágenes de SO en una ubicación
list_ssh_keysGET /api/v1/ssh-keysListar claves SSH
get_ssh_keyGET /api/v1/ssh-keys/{title}Obtener una clave SSH
create_ssh_keyPOST /api/v1/ssh-keysCrear clave SSH
delete_ssh_keyDELETE /api/v1/ssh-keys/{slug}Eliminar clave SSH
list_serversGET /api/v1/instancesListar instancias
get_serverGET /api/v1/instances/{id}Detalles de la instancia
create_serverPOST /api/v1/instancesCrear instancia
delete_serverDELETE /api/v1/instances/{id}Eliminar instancia
start_serverPUT /api/v1/instances/{id}/power-onEncender
shutdown_serverPUT /api/v1/instances/{id}/power-offApagar
reboot_serverPUT /api/v1/instances/{id}/rebootReiniciar
reset_server_passwordPUT /api/v1/instances/{id}/reset-passwordRestablecer contraseña de root
list_snapshotsGET /api/v1/snapshotsListar snapshots
get_snapshotGET /api/v1/snapshots/{slug}Detalles del snapshot
create_snapshotPOST /api/v1/instances/{id}/snapshotsCrear snapshot
update_snapshotPUT /api/v1/snapshots/{slug}Renombrar snapshot
delete_snapshotDELETE /api/v1/snapshots/{slug}Eliminar snapshot

La documentación interactiva completa (con esquemas de solicitud/respuesta) está disponible en /docs.


📡 Alojado vs autoalojado

Este proyecto se ofrece como servicio alojado en https://mcp.letscloud.io, operado por el equipo de LetsCloud. Como usuario final solo necesitas tu clave de API de LetsCloud — no hay nada que instalar localmente.

Si quieres ejecutar tu propia instancia privada (VPC corporativa, pruebas sin conexión, contribuciones), consulta DEPLOY.md para una configuración de Docker o Python con un solo comando.


🔐 Autenticación

Cada solicitud a /mcp y /api/v1/* debe incluir la clave de API de LetsCloud del usuario en una de las siguientes opciones:

  • Authorization: Bearer <api-key> (recomendada, compatible con MCP)
  • X-LetsCloud-Token: <api-key> (alternativa)

El servidor reenvía la clave a la API de LetsCloud como api-token: <key> (coincidiendo con el comportamiento del SDK oficial de Go). El servidor no almacena nada.


🏗️ Arquitectura

src/letscloud_mcp/
├── main.py             # FastAPI app, mounts /mcp and /api/v1
├── __main__.py         # uvicorn entrypoint  (python -m letscloud_mcp)
├── config.py           # Settings via pydantic-settings
├── auth.py             # Per-request token extraction (ContextVar)
├── logging_setup.py    # structlog
├── letscloud/
│   ├── client.py       # Async httpx client for core.letscloud.io
│   ├── models.py       # Pydantic models (Profile, Instance, Snapshot…)
│   └── exceptions.py
├── mcp_app/
│   ├── server.py       # FastMCP server (Streamable HTTP)
│   └── tools.py        # @mcp.tool functions
└── rest/
    └── routes.py       # FastAPI router for /api/v1

📄 Licencia

MIT — consulta LICENSE.

🔗 Enlaces