Skip to main content
Glama
MSPbotsAI

covedataprotection-mcp

by MSPbotsAI

covedataprotection-mcp

Servidor MCP para Cove Data Protection (la plataforma de backup/BDR de N-able, anteriormente N-able Backup / Backup Manager). Expone la API del Management Service JSON-RPC de Backup Manager como herramientas MCP.

Descripción general

  • Servicio HTTP sin estado. No se persiste ninguna credencial: cada solicitud aporta sus propias credenciales mediante cabeceras, que se usan únicamente durante la vida de esa única solicitud.

  • Admite solicitudes concurrentes; el aislamiento de credenciales por solicitud se realiza mediante contextvars de Python, no con una instancia de cliente global/compartida.

  • Puntos de entrada: POST /mcp (protocolo MCP) y GET /health (comprobación de estado).

  • Puerto predeterminado: 8080 (configurable mediante MCP_HTTP_PORT).

Related MCP server: spanning-mcp

Alcance

26 herramientas, recortadas de una compilación original de esquema completo con 247 herramientas (2026-08-04). La integración propia de MSPbots con Cove Data Protection (confirmada en vivo mediante /web/int/sys/integration/api/list contra la plataforma de producción) está configurada con exactamente 6 API, asignadas a estos métodos JSON-RPC subyacentes:

API configurada por MSPbots

Método JSON-RPC

¿Cubierto aquí?

Cove Data Protection Devices

EnumerateAccounts

Cove Data Protection Devices Detail

GetAccountInfoById

Cove Data Protection Device Statistics

EnumerateAccountStatistics

Cove Data Protection Users

EnumerateUsers

Cove Data Protection Customers

EnumeratePartners

Cove Data Protection Query Sessions

QuerySessions

❌ Reporting Service, no Management Service — consulte Limitaciones conocidas

Los otros 5 métodos reales confirmados arriba se mantuvieron tal cual, más el CRUD básico de la misma categoría (Add/Get/Modify/Remove) para cada uno de los tres tipos de recurso que tocan — accounts (9 herramientas), partners (9 herramientas), users (7 herramientas) — más GetServerInfo (1 herramienta, autocomprobación de conectividad, utilizada para la verificación en vivo original más abajo). Todas las demás categorías de la compilación original de 247 herramientas (notifications, storage_nodes, contacts, storage, view_delivery, labels, jobs, custom_columns, branding, products, eula, locations, countries, audit, email, regions, features, permissions, templates — 19 categorías, ~221 herramientas) se eliminaron por completo por no ser utilizadas por MSPbots y quedar fuera del alcance del propósito de este servidor.

Autenticación

Cove no tiene una clave de API estática de larga duración. En su lugar, cada sesión comienza con una llamada Login (partner + username + password) que devuelve un token visa de corta duración (válido ~15 minutos), que debe acompañar a cada llamada posterior.

Este servidor no almacena en caché una visa entre solicitudes — almacenarla supondría persistir el estado de la sesión, lo que entra en conflicto con el requisito de «no persistencia de credenciales». En su lugar, api_client.CoveClient.call() realiza un Login nuevo en cada invocación de herramienta y descarta la visa resultante después: a cambio de una ronda HTTP adicional por llamada, se consigue una ausencia total de estado.

Descripción de los parámetros de autorización de las cabeceras

Cabecera

Tipo

¿Obligatorio?

Valor predeterminado

Valores enumerados

Descripción del campo

Ejemplo

X-CoveDataProtection-Partner

string

Ninguno

Ninguno

Campo partner de Login (tenant/nombre de socio al que pertenece el inicio de sesión)

Acme MSP (admin@example.com)

X-CoveDataProtection-Username

string

Ninguno

Ninguno

Campo username de Login

mspbots

X-CoveDataProtection-Password

string

Ninguno

Ninguno

Campo password de Login

••••••••

Si falta cualquiera de las tres cabeceras, se devuelve 401:

{
  "error": "Missing credentials",
  "message": "This server requires the X-CoveDataProtection-Partner, X-CoveDataProtection-Username, and X-CoveDataProtection-Password headers",
  "required_headers": ["X-CoveDataProtection-Partner", "X-CoveDataProtection-Username", "X-CoveDataProtection-Password"],
  "optional_headers": []
}

Variables de entorno

Variable

Tipo

¿Obligatorio?

Valor predeterminado

Descripción

MCP_HTTP_PORT

int

No

8080

Puerto de escucha HTTP

MCP_HTTP_HOST

string

No

0.0.0.0

Dirección de escucha HTTP

COVEDATAPROTECTION_BASE_URL

string

No

https://api.backup.management/jsonapi

Endpoint JSON-RPC de Cove Management Service

Endpoint MCP

  • POST /mcp — protocolo MCP (transporte HTTP streamable)

  • GET /health — comprobación de estado, devuelve exactamente {"status": "ok"} (sonda de actividad puramente local; no llama a la API de Cove)

Lista de herramientas

Los nombres de las herramientas siguen el patrón covedataprotection_<snake_case_method_name> — p. ej., el método JSON-RPC EnumerateAccountStatistics se convierte en covedataprotection_enumerate_account_statistics. Los nombres de los parámetros reflejan los nombres de los parámetros del propio método JSON-RPC (camelCase → snake_case); los parámetros complejos tipados como struct/enum se aceptan como dict/str y se pasan tal cual a la API del proveedor — consulte Limitaciones conocidas para saber qué significa esto en la práctica.

Categoría

Herramienta

Método JSON-RPC

Parámetros

accounts

covedataprotection_add_account

AddAccount

account_info(required), home_node_info(required)

accounts

covedataprotection_enumerate_account_statistics

EnumerateAccountStatistics

query(required)

accounts

covedataprotection_enumerate_accounts

EnumerateAccounts

partner_id(required)

accounts

covedataprotection_get_account_features

GetAccountFeatures

account_id(required)

accounts

covedataprotection_get_account_info

GetAccountInfo

name(required), password(required)

accounts

covedataprotection_get_account_info_by_id

GetAccountInfoById

account_id(required)

accounts

covedataprotection_modify_account

ModifyAccount

account_info(required), force_remove_custom_column_values_in_old_scope(required)

accounts

covedataprotection_remove_account

RemoveAccount

account_id(required)

accounts

covedataprotection_set_account_features

SetAccountFeatures

account_id(required), features(required)

misc

covedataprotection_get_server_info

GetServerInfo

none

partners

covedataprotection_add_partner

AddPartner

partner_info(required), create_default_account(required)

partners

covedataprotection_enumerate_child_partners

EnumerateChildPartners

partner_id(required), fields(required), partner_filter(required), range(optional)

partners

covedataprotection_enumerate_partners

EnumeratePartners

parent_partner_id(required), fetch_recursively(required), fields(required)

partners

covedataprotection_get_partner_info

GetPartnerInfo

name(required)

partners

covedataprotection_get_partner_info_by_id

GetPartnerInfoById

partner_id(required)

partners

covedataprotection_get_partner_tree

GetPartnerTree

partner_id(required), fields(required), filter(required), children_limit(required), partner_filter(required)

partners

covedataprotection_get_root_partner_name

GetRootPartnerName

none

partners

covedataprotection_modify_partner

ModifyPartner

partner_info(required), force_remove_custom_column_values_in_old_scope(required)

partners

covedataprotection_remove_partner

RemovePartner

partner_id(required)

users

covedataprotection_add_user

AddUser

user_info(required)

users

covedataprotection_enumerate_user_roles

EnumerateUserRoles

none

users

covedataprotection_enumerate_users

EnumerateUsers

partner_ids(required)

users

covedataprotection_get_user_info

GetUserInfo

partner_id(required), name_or_email(required), password(required)

users

covedataprotection_get_user_info_by_id

GetUserInfoById

user_id(required)

users

covedataprotection_modify_user

ModifyUser

user_info(required)

users

covedataprotection_remove_user

RemoveUser

user_id(required)

Ejemplo de prueba

# Health check
curl -s http://localhost:8080/health

# Call a tool via the MCP protocol (streamable HTTP) — requires an
# initialize handshake first per the MCP spec; abbreviated example below
# shows the tool-call request body only:
curl -s -X POST http://localhost:8080/mcp \
  -H "X-CoveDataProtection-Partner: <your-partner-name>" \
  -H "X-CoveDataProtection-Username: <your-username>" \
  -H "X-CoveDataProtection-Password: <your-password>" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "mcp-session-id: <session-id-from-initialize>" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "covedataprotection_get_server_info",
      "arguments": {}
    }
  }'

Resultado esperado: 200 con la versión del servidor si las credenciales son válidas; si las credenciales no son válidas, la propia llamada Login falla y cada herramienta devuelve una envoltura de error JSON estructurada, p. ej.:

{"error":{"code":"unauthorized","message":"<vendor error message>","retryable":false}}

code es uno de los valores fijos not_configured / unauthorized / not_found / invalid_argument / rate_limited / upstream_error; retryable indica al llamador si reintentar la misma llamada podría tener éxito (true solo para rate_limited y upstream_error). Las herramientas nunca lanzan excepciones por errores de negocio/proveedor — esta envoltura se devuelve como la cadena de resultado normal de la herramienta.

Verificado en vivo (2026-07-29): se llamó a covedataprotection_get_server_info (cero parámetros) de extremo a extremo a través de este servidor en ejecución con un partner/usuario/contraseña reales y devolvió la versión real del servidor de Cove, lo que confirma que el flujo Login → visa → llamada al método funciona contra la API en vivo, no solo estructuralmente.

Referencia de la API

Limitaciones conocidas

  • Reducido de 247 a 26 herramientas el 2026-08-04. La compilación original cubría todos los métodos del esquema del Management Service. Según una decisión de alcance posterior, se redujo a lo que la configuración de integración de producción de MSPbots realmente llama (verificado en vivo mediante /web/int/sys/integration/api/list contra app.mspbots.ai, id de integración 2026570354981494786) más el CRUD básico de la misma categoría; consulte la sección Scope anterior para ver la asignación exacta API→método y la lista completa de categorías eliminadas. Las ~221 herramientas eliminadas (notifications, storage_nodes, contacts, storage, view_delivery, labels, jobs, custom_columns, branding, products, eula, locations, countries, audit, email, regions, features, permissions, templates) no están en esta compilación en absoluto; si una necesidad futura requiere alguna de ellas, el esquema original (Schema_23.3.json, enlazado abajo) aún documenta su firma de método exacta y se puede volver a añadir de la misma manera en que se generaron las herramientas conservadas.

  • Esto cubre únicamente el Management Service. La guía Getting Started de Cove describe un segundo Reporting Service independiente ({host}/repserv_json, se ejecuta por nodo de almacenamiento) que proporciona estadísticas de sesiones de backup/restore. La propia configuración de MSPbots llama a un informe "Query Sessions" contra este Reporting Service; no forma parte del esquema del Management Service a partir del cual se genera este MCP, y no se encontró ningún esquema público para el Reporting Service. Este es el único endpoint configurado por MSPbots que este MCP no cubre; se puede añadir si la lista/esquema de métodos del Reporting Service está disponible.

  • Los parámetros complejos de structs/enums no están tipados (dict/str) en lugar de estar completamente modelados. El esquema define 106 structs y 78 enums; reproducir completamente cada uno como un parámetro Python tipado estaba fuera del alcance de un servidor generado mecánicamente. Los llamadores deben dar forma a estos argumentos dict para que coincidan con el esquema del proveedor (consulte la sección Structs de Schema_23.3.json para conocer los nombres exactos de los campos); la descripción de cada uno de estos parámetros indica el struct al que se asigna y apunta a ese archivo de esquema.

  • Sin caché de visa — consulte la sección Authentication anterior. Cada llamada a una herramienta realiza su propio Login, lo cual es simple y completamente sin estado, pero significa 2 solicitudes HTTP al proveedor por llamada a herramienta en lugar de 1.

  • Las 26 herramientas se generaron mediante código directamente desde el propio archivo de esquema del proveedor, no se escribieron a mano; los nombres/tipos de los parámetros solo son tan precisos como ese esquema. covedataprotection_get_server_info fue la única herramienta verificada en vivo de extremo a extremo; el resto son estructuralmente correctas (esquema validado, tools/list del protocolo MCP confirmado) pero no se probaron individualmente con datos reales.

Notas de cumplimiento del SOP MCP del proveedor

  • El número de herramientas (26) supera la directriz del SOP de "debería ser ≤20". Ya se recortó de 247 a 26 (ver arriba); las 26 restantes se asignan 1:1 a métodos JSON-RPC distintos en 3 dominios de recursos (accounts/partners/users) que no se pueden fusionar sin perder distinciones de parámetros obligatorios (p. ej., get_*_info por nombre+contraseña frente a get_*_info_by_id por ID numérico son claves de búsqueda diferentes, no la misma herramienta con un parámetro opcional).

  • No existe ningún parámetro escalar limit / page_size en ninguna herramienta. Ninguno de los 26 métodos expone un parámetro numérico de tamaño de página de primera clase; el único campo con forma de paginación (range en EnumerateChildPartners) es un struct opaco del proveedor que se pasa tal cual, y children_limit en GetPartnerTree también se pasa directamente al proveedor sin interpretar. No hay nada que este servidor pueda limitar según la directriz del SOP de 50 por defecto / tope máximo de 200; si los structs range/limit del esquema del proveedor resultan tener su propio máximo por página documentado, eso debería aplicarse aquí en lugar del techo de respaldo genérico del SOP.

  • Sin respaldo de credenciales mediante variables de entorno. config.Settings no tiene ningún campo de partner/usuario/contraseña; get_client_from_context devuelve None (→ envoltorio not_configured) siempre que la contextvar por solicitud no esté establecida. No hay ninguna ruta de código que recurra a una variable de entorno.

  • Anotaciones de herramientas: toda herramienta de lectura (get_*, enumerate_*) está marcada con readOnlyHint=True, idempotentHint=True; las herramientas add_* tienen readOnlyHint=False, idempotentHint=False (crear dos veces no es una operación nula); las herramientas modify_*/set_*/remove_* tienen readOnlyHint=False, destructiveHint=True, idempotentHint=True.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

No tool schema history has been recorded yet.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server for Spanning Cloud Backup — M365/GWS/Salesforce SaaS backup, restore, and audit. Enables AI assistants to manage and monitor cloud backup protection via the Spanning API.
    Apache 2.0
  • F
    license
    Not graded
    quality
    B
    maintenance
    MCP server that exposes Acronis Cyber Protect Cloud APIs as 14 read-only tools for managing alerts, tasks, agents, resources, policies, and tenants.
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    MCP server for Dropsuite (NinjaOne SaaS Backup) that exposes read-only GET endpoints to list backup accounts, users, contacts, calendars, tasks, OneDrives, SharePoint domains, and Teams/Groups domains via reseller API tokens.
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/MSPbotsAI/covedataprotection-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server