covedataprotection-mcp
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
contextvarsde Python, no con una instancia de cliente global/compartida.Puntos de entrada:
POST /mcp(protocolo MCP) yGET /health(comprobación de estado).Puerto predeterminado:
8080(configurable medianteMCP_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 |
| ✅ |
Cove Data Protection Devices Detail |
| ✅ |
Cove Data Protection Device Statistics |
| ✅ |
Cove Data Protection Users |
| ✅ |
Cove Data Protection Customers |
| ✅ |
Cove Data Protection Query Sessions |
| ❌ 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 |
| string | Sí | Ninguno | Ninguno | Campo |
|
| string | Sí | Ninguno | Ninguno | Campo |
|
| string | Sí | Ninguno | Ninguno | Campo |
|
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 |
| int | No |
| Puerto de escucha HTTP |
| string | No |
| Dirección de escucha HTTP |
| string | No |
| 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 |
| AddAccount | account_info(required), home_node_info(required) |
accounts |
| EnumerateAccountStatistics | query(required) |
accounts |
| EnumerateAccounts | partner_id(required) |
accounts |
| GetAccountFeatures | account_id(required) |
accounts |
| GetAccountInfo | name(required), password(required) |
accounts |
| GetAccountInfoById | account_id(required) |
accounts |
| ModifyAccount | account_info(required), force_remove_custom_column_values_in_old_scope(required) |
accounts |
| RemoveAccount | account_id(required) |
accounts |
| SetAccountFeatures | account_id(required), features(required) |
misc |
| GetServerInfo | none |
partners |
| AddPartner | partner_info(required), create_default_account(required) |
partners |
| EnumerateChildPartners | partner_id(required), fields(required), partner_filter(required), range(optional) |
partners |
| EnumeratePartners | parent_partner_id(required), fetch_recursively(required), fields(required) |
partners |
| GetPartnerInfo | name(required) |
partners |
| GetPartnerInfoById | partner_id(required) |
partners |
| GetPartnerTree | partner_id(required), fields(required), filter(required), children_limit(required), partner_filter(required) |
partners |
| GetRootPartnerName | none |
partners |
| ModifyPartner | partner_info(required), force_remove_custom_column_values_in_old_scope(required) |
partners |
| RemovePartner | partner_id(required) |
users |
| AddUser | user_info(required) |
users |
| EnumerateUserRoles | none |
users |
| EnumerateUsers | partner_ids(required) |
users |
| GetUserInfo | partner_id(required), name_or_email(required), password(required) |
users |
| GetUserInfoById | user_id(required) |
users |
| ModifyUser | user_info(required) |
users |
| 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
Primeros pasos: https://developer.n-able.com/n-able-cove/docs/getting-started
Autorización: https://developer.n-able.com/n-able-cove/docs/authorization
Construcción de una llamada: https://developer.n-able.com/n-able-cove/docs/construct-a-json-rpc-api-call
Esquema completo de métodos/structs/enums (JSON): https://documentation.n-able.com/covedataprotection/Schema_23.3.json
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/listcontraapp.mspbots.ai, id de integración2026570354981494786) 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 deSchema_23.3.jsonpara 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_infofue 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_*_infopor nombre+contraseña frente aget_*_info_by_idpor 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_sizeen 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 (rangeenEnumerateChildPartners) es un struct opaco del proveedor que se pasa tal cual, ychildren_limitenGetPartnerTreetambié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 structsrange/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.Settingsno tiene ningún campo de partner/usuario/contraseña;get_client_from_contextdevuelveNone(→ envoltorionot_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 conreadOnlyHint=True, idempotentHint=True; las herramientasadd_*tienenreadOnlyHint=False, idempotentHint=False(crear dos veces no es una operación nula); las herramientasmodify_*/set_*/remove_*tienenreadOnlyHint=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.
This server cannot be installed
Maintenance
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
MCP server for Codat — companies, connections, invoices, bills and financial statements.
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
MCP Server for agents to onboard, pay, and provision services autonomously with InFlow
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
111
Related MCP Servers
- AlicenseBqualityBmaintenanceMCP server to help manage a WHMCS installation.624220MIT
- AlicenseNot gradedqualityAmaintenanceMCP 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
- FlicenseNot gradedqualityBmaintenanceMCP server that exposes Acronis Cyber Protect Cloud APIs as 14 read-only tools for managing alerts, tasks, agents, resources, policies, and tenants.-
- FlicenseNot gradedqualityCmaintenanceMCP 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
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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