{
  "name": "CloudPilot",
  "description": "Manage Odoo hosting on CloudPilot: servers, Odoo instances, logs, backups and notifications. Send a message with a data part {\"skill\": \"<skill id>\", \"arguments\": {...}} and a CloudPilot API key as a bearer token; the reply is a Task with the CloudPilot API response as a JSON artifact.",
  "version": "1.0.0",
  "supportedInterfaces": [
    {
      "url": "https://mcp.cloudpilot.app/a2a",
      "protocolBinding": "JSONRPC",
      "protocolVersion": "1.0"
    }
  ],
  "provider": {
    "organization": "CloudPilot",
    "url": "https://cloudpilot.app"
  },
  "documentationUrl": "https://cloudpilot.app/docs/mcp",
  "iconUrl": "https://cloudpilot.app/assets/brand/cloudpilot-mark-192.png",
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "extendedAgentCard": false
  },
  "securitySchemes": {
    "apiKey": {
      "httpAuthSecurityScheme": {
        "scheme": "bearer",
        "description": "A CloudPilot API key (nck_...), created under Settings -> API keys at https://my.cloudpilot.app. See https://cloudpilot.app/auth.md"
      }
    }
  },
  "securityRequirements": [
    {
      "schemes": {
        "apiKey": {
          "list": []
        }
      }
    }
  ],
  "defaultInputModes": [
    "application/json",
    "text/plain"
  ],
  "defaultOutputModes": [
    "application/json"
  ],
  "skills": [
    {
      "id": "get_me",
      "name": "Current user and account",
      "description": "The user the API key belongs to and the account it acts in: email, account, role, plan and usage. Arguments (JSON Schema): {}",
      "tags": [
        "odoo",
        "hosting",
        "read"
      ],
      "examples": [
        "{\"skill\":\"get_me\",\"arguments\":{}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "list_servers",
      "name": "List servers",
      "description": "All servers in the account, with type, region, size, Odoo version, OS, number of instances and status. Arguments (JSON Schema): {}",
      "tags": [
        "odoo",
        "hosting",
        "read"
      ],
      "examples": [
        "{\"skill\":\"list_servers\",\"arguments\":{}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "get_server",
      "name": "Server details",
      "description": "One server: type, region, size, IP address, Odoo version, status and enabled features. Arguments (JSON Schema): {\"serverId\":{\"type\":\"string\",\"pattern\":\"^[A-Za-z0-9_-]{1,100}$\",\"description\":\"Server ID (from list_servers)\"}}",
      "tags": [
        "odoo",
        "hosting",
        "read"
      ],
      "examples": [
        "{\"skill\":\"get_server\",\"arguments\":{\"serverId\":\"<serverId>\"}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "get_server_stats",
      "name": "Server resource usage",
      "description": "Current CPU, load, memory, disk and database connection usage of a server. Arguments (JSON Schema): {\"serverId\":{\"type\":\"string\",\"pattern\":\"^[A-Za-z0-9_-]{1,100}$\",\"description\":\"Server ID (from list_servers)\"}}",
      "tags": [
        "odoo",
        "hosting",
        "read"
      ],
      "examples": [
        "{\"skill\":\"get_server_stats\",\"arguments\":{\"serverId\":\"<serverId>\"}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "list_instances",
      "name": "List Odoo instances",
      "description": "All Odoo instances in the account, with their server, domain, edition and status. Arguments (JSON Schema): {}",
      "tags": [
        "odoo",
        "hosting",
        "read"
      ],
      "examples": [
        "{\"skill\":\"list_instances\",\"arguments\":{}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "get_instance",
      "name": "Instance details",
      "description": "One Odoo instance: server, domains, edition, workers and status. Arguments (JSON Schema): {\"instanceId\":{\"type\":\"string\",\"pattern\":\"^[A-Za-z0-9_-]{1,100}$\",\"description\":\"Odoo instance ID (from list_instances)\"}}",
      "tags": [
        "odoo",
        "hosting",
        "read"
      ],
      "examples": [
        "{\"skill\":\"get_instance\",\"arguments\":{\"instanceId\":\"<instanceId>\"}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "get_instance_status",
      "name": "Instance health",
      "description": "Live state of an Odoo instance: whether Odoo is running, its memory and CPU use, uptime and database size. Arguments (JSON Schema): {\"instanceId\":{\"type\":\"string\",\"pattern\":\"^[A-Za-z0-9_-]{1,100}$\",\"description\":\"Odoo instance ID (from list_instances)\"}}",
      "tags": [
        "odoo",
        "hosting",
        "read"
      ],
      "examples": [
        "{\"skill\":\"get_instance_status\",\"arguments\":{\"instanceId\":\"<instanceId>\"}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "get_instance_logs",
      "name": "Instance logs",
      "description": "The end of an Odoo instance log, newest lines last. Arguments (JSON Schema): {\"instanceId\":{\"type\":\"string\",\"pattern\":\"^[A-Za-z0-9_-]{1,100}$\",\"description\":\"Odoo instance ID (from list_instances)\"},\"bytes\":{\"type\":\"integer\",\"minimum\":1000,\"maximum\":1048576,\"description\":\"How much of the end of the log to return, in bytes (default 20000).\"}}",
      "tags": [
        "odoo",
        "hosting",
        "read"
      ],
      "examples": [
        "{\"skill\":\"get_instance_logs\",\"arguments\":{\"instanceId\":\"<instanceId>\"}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "list_instance_modules",
      "name": "Instance Git modules",
      "description": "Custom, OCA and third-party addon repositories deployed to an instance from Git. Arguments (JSON Schema): {\"instanceId\":{\"type\":\"string\",\"pattern\":\"^[A-Za-z0-9_-]{1,100}$\",\"description\":\"Odoo instance ID (from list_instances)\"}}",
      "tags": [
        "odoo",
        "hosting",
        "read"
      ],
      "examples": [
        "{\"skill\":\"list_instance_modules\",\"arguments\":{\"instanceId\":\"<instanceId>\"}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "list_backups",
      "name": "List backups",
      "description": "Backups (manual and scheduled) with size, status, storage and notes, newest first. Optionally for one instance. Arguments (JSON Schema): {\"instanceId\":{\"type\":\"string\",\"pattern\":\"^[A-Za-z0-9_-]{1,100}$\",\"description\":\"Only backups of this instance\"}}",
      "tags": [
        "odoo",
        "hosting",
        "read"
      ],
      "examples": [
        "{\"skill\":\"list_backups\",\"arguments\":{}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "list_backup_schedules",
      "name": "Backup schedules",
      "description": "The backup schedules of an instance: cron schedule, retention in days and storage. Arguments (JSON Schema): {\"instanceId\":{\"type\":\"string\",\"pattern\":\"^[A-Za-z0-9_-]{1,100}$\",\"description\":\"Odoo instance ID (from list_instances)\"}}",
      "tags": [
        "odoo",
        "hosting",
        "read"
      ],
      "examples": [
        "{\"skill\":\"list_backup_schedules\",\"arguments\":{\"instanceId\":\"<instanceId>\"}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "list_notifications",
      "name": "Notifications",
      "description": "Recent account alerts such as an instance down, low disk or a failed backup. Arguments (JSON Schema): {\"unread\":{\"type\":\"boolean\",\"description\":\"Only unread notifications\"},\"limit\":{\"type\":\"integer\",\"minimum\":1,\"maximum\":100,\"description\":\"Default 50\"}}",
      "tags": [
        "odoo",
        "hosting",
        "read"
      ],
      "examples": [
        "{\"skill\":\"list_notifications\",\"arguments\":{}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "get_operation",
      "name": "Operation progress",
      "description": "Progress of a long-running action: status (queued, running, succeeded, failed), progress percentage and error. Arguments (JSON Schema): {\"operationId\":{\"type\":\"string\",\"pattern\":\"^[A-Za-z0-9_-]{1,100}$\",\"description\":\"Operation ID returned by an action\"}}",
      "tags": [
        "odoo",
        "hosting",
        "read"
      ],
      "examples": [
        "{\"skill\":\"get_operation\",\"arguments\":{\"operationId\":\"<operationId>\"}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "create_backup",
      "name": "Back up an instance now",
      "description": "Start a manual backup of an Odoo instance (database and filestore). Returns an operationId; poll get_operation until its status is succeeded or failed. Arguments (JSON Schema): {\"instanceId\":{\"type\":\"string\",\"pattern\":\"^[A-Za-z0-9_-]{1,100}$\",\"description\":\"Odoo instance ID (from list_instances)\"}}",
      "tags": [
        "odoo",
        "hosting",
        "action"
      ],
      "examples": [
        "{\"skill\":\"create_backup\",\"arguments\":{\"instanceId\":\"<instanceId>\"}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "restart_instance",
      "name": "Restart an instance",
      "description": "Restart an Odoo instance. Users are briefly disconnected: confirm with the user first. Returns an operationId; poll get_operation until its status is succeeded or failed. Arguments (JSON Schema): {\"instanceId\":{\"type\":\"string\",\"pattern\":\"^[A-Za-z0-9_-]{1,100}$\",\"description\":\"Odoo instance ID (from list_instances)\"}}",
      "tags": [
        "odoo",
        "hosting",
        "action"
      ],
      "examples": [
        "{\"skill\":\"restart_instance\",\"arguments\":{\"instanceId\":\"<instanceId>\"}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "start_instance",
      "name": "Start an instance",
      "description": "Start a stopped Odoo instance. Returns an operationId; poll get_operation until its status is succeeded or failed. Arguments (JSON Schema): {\"instanceId\":{\"type\":\"string\",\"pattern\":\"^[A-Za-z0-9_-]{1,100}$\",\"description\":\"Odoo instance ID (from list_instances)\"}}",
      "tags": [
        "odoo",
        "hosting",
        "action"
      ],
      "examples": [
        "{\"skill\":\"start_instance\",\"arguments\":{\"instanceId\":\"<instanceId>\"}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "stop_instance",
      "name": "Stop an instance",
      "description": "Stop an Odoo instance. It is unavailable until started again: confirm with the user first. Returns an operationId; poll get_operation until its status is succeeded or failed. Arguments (JSON Schema): {\"instanceId\":{\"type\":\"string\",\"pattern\":\"^[A-Za-z0-9_-]{1,100}$\",\"description\":\"Odoo instance ID (from list_instances)\"}}",
      "tags": [
        "odoo",
        "hosting",
        "action"
      ],
      "examples": [
        "{\"skill\":\"stop_instance\",\"arguments\":{\"instanceId\":\"<instanceId>\"}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    }
  ]
}