AI assistants & API
Caryvane exposes an MCP server and a matching REST API, authenticated by personal access keys. An assistant with a key can answer "which backups failed last night?", run a job, enrol a machine, or set up a customer's storage — bounded by the key's tier and by what the user who issued it is allowed to see.
Create a key #
- Console → your name (top right) → AI access keys → New Key. Give it a name you will recognise when revoking it.
- Choose the tier. Least privilege that does the job — a key for a reporting assistant should be Read only.
- Copy the key. It is shown once, at creation, and never again. Revoke and reissue if it is lost.
| Tier | Allows |
|---|---|
| Read only | Dashboard, jobs, run history and logs, agents and their logs, storage targets and browsing them (names and dates — never file contents), customers, enrolment tokens, cloud fleet status. |
| Read + control | Read, plus start and cancel runs. |
| Read + control + edit | Plus create and edit jobs, change agent settings, mount and unmount cloud drives, revoke enrolment tokens, create Microsoft 365 / Google archives, set an agent's Hyper-V incremental mode. |
| Full access | Plus delete jobs, create storage targets, create enrolment tokens. |
A key sees exactly what its owner sees: an MSP admin's key sees that MSP's customers, a customer user's key sees one customer. Every action a key takes is written to the audit log under the owner's name. Keys are revoked from the same dialog and stop working at once.
Anyone holding a Full-access key can enrol machines into your customers and point backups at their own storage. Keep keys in the assistant's own secret store, never in a shared document.
Connect Claude #
The MCP server is a single HTTP endpoint, https://console.caryvane.com/mcp/rpc, with the key as a bearer token. In Claude Code, add to .mcp.json in the project (or ~/.claude.json for every project):
{
"mcpServers": {
"caryvane": {
"type": "http",
"url": "https://console.caryvane.com/mcp/rpc",
"headers": { "Authorization": "Bearer <key>" }
}
}
}
Or from the terminal: claude mcp add --transport http caryvane https://console.caryvane.com/mcp/rpc --header "Authorization: Bearer <key>". Claude Desktop and claude.ai take the same URL and header under Settings → Connectors → Add custom connector. After connecting, ask it to list the tools; the description of each is written for the assistant, so it knows to check list_agents before create_job.
Connect VS Code (Copilot agent mode) #
Add to .vscode/mcp.json (VS Code prompts for the key once and stores it in its secret storage):
{
"inputs": [
{ "id": "caryvane-key", "type": "promptString", "password": true, "description": "Caryvane access key" }
],
"servers": {
"caryvane": {
"type": "http",
"url": "https://console.caryvane.com/mcp/rpc",
"headers": { "Authorization": "Bearer ${input:caryvane-key}" }
}
}
}
The tools #
Names are the same in MCP and in the REST API below. Tier is the minimum key tier.
| Tool | Tier | What it does |
|---|---|---|
get_dashboard | Read | The console's front page as numbers: agents online, jobs, last 24 h outcomes. |
list_jobs, get_job | Read | Jobs, with search and paging; one job in full. |
get_job_runs | Read | Run history for a job: status, timings, bytes, the run log, failed files. |
list_agents, get_agent | Read | Machines with online state, version, customer, last check-in. |
get_agent_logs | Read | The agent's own application log as shipped to the console; filter by level or text. |
list_storage_targets | Read | Destinations with provider and last test result. |
browse_storage_target | Read | Folder listing of a target — names, sizes, dates. Never file contents. |
list_cloud_drives | Read | Drives mounted on an agent. |
list_vss_instances | Read | What a Windows agent can back up application-consistently: Hyper-V VMs, SQL databases, AD. Live from the machine. |
list_customers | Read | The customers the key's owner can see. |
list_enrollment_tokens | Read | Active deployment tokens. |
get_cloud_fleet, get_cloud_worker_jobs | Read | Cloud Agent workers and what they are running. |
run_job, cancel_job | Control | Start a run now; cancel the running one. |
create_job, update_job | Write | Every option the wizard has: files, storage-to-storage, connector, app-consistent, cloud or agent, schedule, retention. |
update_agent_settings | Write | Friendly name, concurrent-job limit, upload cap. |
set_hyperv_rct_mode | Write | Off / Diag / Compose for Hyper-V changed-block incrementals on one agent. |
mount_cloud_drive, unmount_cloud_drive | Write | Add or remove a drive on an agent. |
create_office365_archive, create_google_workspace_archive | Write | A one-off archive of a person's mailbox and drive — the leaver workflow. |
revoke_enrollment_token | Write | Kill a token early. |
create_enrollment_token | Admin | A deployment token for a customer, with the ready-to-run install command. |
create_storage_target | Admin | A new destination with its credentials. |
delete_job | Admin | Remove a job and its history. |
When the key's owner can see several customers, tools that create things take a customer: create_job infers it from the agent, or needs customerTenantId for a Cloud Agent job; create_enrollment_token takes tenantId. Nothing can be created across a customer boundary — a job cannot read one customer's storage and write another's.
The REST API #
The same operations as plain JSON over HTTPS, for scripts, RMM integrations and any assistant that speaks HTTP rather than MCP. Same key, same header: Authorization: Bearer <key>. Responses are JSON; errors are standard status codes with a message.
curl -s https://console.caryvane.com/mcp/jobs?take=50 \
-H "Authorization: Bearer <key>"
curl -s -X POST https://console.caryvane.com/mcp/jobs/14/run \
-H "Authorization: Bearer <key>"
| Method and path | Tool |
|---|---|
GET /mcp/dashboard | get_dashboard |
GET /mcp/jobs, GET /mcp/jobs/{id}, GET /mcp/jobs/{id}/runs | list_jobs, get_job, get_job_runs |
POST /mcp/jobs, POST /mcp/jobs/{id}/update, POST /mcp/jobs/{id}/delete | create_job, update_job, delete_job |
POST /mcp/jobs/{id}/run, POST /mcp/jobs/{id}/cancel | run_job, cancel_job |
GET /mcp/agents, GET /mcp/agents/{id}, GET /mcp/agents/{id}/logs | list_agents, get_agent, get_agent_logs |
POST /mcp/agents/{id}/settings | update_agent_settings |
GET /mcp/agents/{id}/mounts, POST /mcp/agents/{id}/mounts, POST /mcp/agents/{id}/mounts/{mountId}/delete | list_cloud_drives, mount_cloud_drive, unmount_cloud_drive |
GET /mcp/agents/{id}/vss-instances | list_vss_instances |
GET /mcp/storage-targets, POST /mcp/storage-targets, GET /mcp/storage-targets/{id}/browse | list_storage_targets, create_storage_target, browse_storage_target |
GET /mcp/customers | list_customers |
GET /mcp/enrollment-tokens, POST /mcp/enrollment-tokens, POST /mcp/enrollment-tokens/{id}/revoke | list_enrollment_tokens, create_enrollment_token, revoke_enrollment_token |
POST /mcp/office365/archives, POST /mcp/google-workspace/archives | create_office365_archive, create_google_workspace_archive |
Parameters are the tool's arguments as JSON in the body (POST) or the query string (GET). The MCP tool descriptions, which the assistant sees, are the authoritative field reference; an OpenAPI document for building a ChatGPT Custom GPT Action is on the list but not published yet.
What an assistant cannot do #
By design there is no tool that downloads a file's contents, deletes files from storage, or moves them. Browsing returns metadata only. Restores are done by people in the console. The one operation that removes data — an Archiving job with source removal switched on — is created like any other job, with the gate off unless explicitly set, and every file it removes is recorded in the catalogue first.