Skip to main content
Glama
ArvanCloud MCP Server

ArvanCloud MCP Server

by dwin-gharibi

A Model Context Protocol (MCP) server that gives MCP-compatible clients — Claude Desktop, Claude Code, Cursor, VS Code, Gemini CLI, and any other MCP host — full control of the ArvanCloud platform through natural language, plus a cloud-DevOps toolbox (provisioning, Kubernetes, IaC, security, networking, tasks).

It talks to ArvanCloud's unified API (napi, https://napi.arvancloud.ir) and exposes both ergonomic, typed tools for the common operations of every product and a generic escape-hatch tool that can reach any endpoint — so the whole platform is usable, today and as the API grows.

Independent, community-built integration. Not an official ArvanCloud product.

Covered products

220+ tools across 20 service groups — the whole ArvanCloud platform plus a cloud-DevOps toolbox: provision a server, SSH in, validate IaC, deploy to Kubernetes, scan for security issues, run networking diagnostics, schedule background jobs, and send notifications — with guardrails, metrics, and reusable workflow prompts on top.

ArvanCloud platform:

Service group

Tools cover

API base

compute

Cloud Servers (Abrak): create/delete, power & maintenance actions, rename/rebuild/resize, wait_for_server, images, plans, quotas, SSH keys, tags, server↔security-group, PTR

/ecc/v1

network

Private networks & subnets (CRUD), security groups & rules, floating IPs (incl. delete), port security

/ecc/v1

storage

Block volumes & snapshots, attach/detach, limits

/ecc/v1

objectstorage

S3-compatible: buckets, objects (text/binary), copy, presigned URLs, policies/ACLs

s3.<region>.arvanstorage.ir

cdn

Domains, caching, purge, page rules, firewall/WAF, rate-limit, log forwarders, metric exporters, SSL, apps (CRUD + webhook)

/cdn/4.0

dns

DNS records (A/CNAME helpers), cloud/proxy toggle, zone import, DNSSEC

/cdn/4.0

vod

Channels, videos, audios, subtitles, watermarks, profiles, files, user domain (full CRUD)

/vod/2.0

live

Live Streaming channels & inputs

/live/2.0

DevOps & automation toolbox:

Service group

Tools cover

ssh

Run commands/scripts, upload/download files, connection checks (asyncssh)

provision

arvan_provision_server: create + wait + SSH-install / cloud-init in one call

k8s

kubectl apply/delete/get, generic kubectl, Helm install/uninstall (any cluster incl. ArvanCloud PaaS)

iac

Terraform validate/fmt/plan/apply/destroy, tflint, checkov, kubeconform, kube-linter, hadolint, yamllint, trivy

security

Secret/vuln/SBOM/SAST scans (gitleaks, trivy, syft, semgrep), security-group auditing, HTTP-header grading, password & SSH-keypair generation

net

DNS, reverse DNS, TCP/port checks, HTTP checks, TLS-cert inspection, ping/traceroute/whois, HTTP load test

git

Clone & inspect repos (validate/deploy IaC from a repo)

tasks

Run any tool in the background, on a delay or recurring schedule; poll status; announce completion via webhook

notify

Send messages to Slack, Telegram, a generic webhook, or email (SMTP)

observability

arvan_metrics (JSON + Prometheus), arvan_audit_log, optional per-minute rate limiting

common

arvan_request (reach any endpoint), arvan_capabilities, arvan_doctor, plus workflow prompts & live resources

Guardrails: every tool is annotated readOnlyHint/destructiveHint so clients can tell safe from dangerous calls. Set ARVAN_READ_ONLY=true to expose only read tools (and restrict arvan_request to GET), or scope the surface with ARVAN_TOOLS_ALLOW / ARVAN_TOOLS_DENY (glob lists).

Prompts & resources: reusable prompts (provision_web_server, audit_security, setup_cdn, deploy_static_site) and live MCP resources (arvan://regions, arvan://servers/{region}, arvan://domains, arvan://capabilities).

iam and container (Kubernetes PaaS) are documentation pointers — manage them via the panel / kubectl / arvan_request.

100% napi coverage: the generic arvan_request tool can call any ArvanCloud endpoint and arvan_capabilities lists them, so nothing is out of reach even without a dedicated typed tool. Run arvan_doctor to see what's configured and which optional CLI tools are installed.

Related MCP server: Liara MCP Server

Architecture

AI agents talk to the server over MCP (stdio locally, or streamable-HTTP when deployed). The server wraps ArvanCloud's napi for the platform products and shells out to standard tools (terraform, kubectl, ansible, trivy, …) for the DevOps toolbox. For many concurrent users it runs stateless behind a load balancer and scales horizontally:

Every tool call flows through the same guardrails + observability path:

Diagrams are generated with the diagrams library — regenerate with make diagrams (needs Graphviz).

Requirements

  • Python 3.10+

  • An ArvanCloud machine-user access key (create one in the panel under Settings → Machine User / API keys). See the API usage docs.

Install

git clone https://github.com/dwin-gharibi/arvancloud-mcp.git
cd arvan-temp
pip install .          # or:  pip install -e ".[dev]"  for development

Configure

All configuration is via environment variables (see .env.example):

Variable

Default

Description

ARVAN_API_KEY

—

Required. Machine-user access key. The Apikey prefix is added automatically.

ARVAN_BASE_URL

https://napi.arvancloud.ir

API host (use the .com alias if needed).

ARVAN_DEFAULT_REGION

—

Default IaaS region, e.g. ir-thr-c2, so you don't repeat it.

ARVAN_ENABLED_SERVICES

all

Comma list of tool groups to expose (common is always on).

ARVAN_TIMEOUT

60

Per-request timeout (seconds).

ARVAN_MAX_RETRIES

4

Retries for network errors / 429 / 5xx.

ARVAN_BACKOFF_FACTOR

1.0

Exponential backoff base (seconds).

ARVAN_VERIFY_SSL

true

TLS verification.

ARVAN_TRANSPORT

stdio

stdio, sse, or streamable-http.

ARVAN_HOST / ARVAN_PORT

127.0.0.1 / 8000

Bind address for HTTP transports.

ARVAN_S3_ACCESS_KEY / ARVAN_S3_SECRET_KEY

—

Object Storage credentials (separate from the API key).

ARVAN_S3_REGION / ARVAN_S3_ENDPOINT

ir-thr-at1

S3 region (selects the endpoint) or an explicit endpoint URL.

ARVAN_SSH_USER

root

Default SSH user for the remote-exec tools.

ARVAN_SSH_KEY / ARVAN_SSH_KEY_FILE / ARVAN_SSH_PASSWORD

—

Default SSH auth (inline key, key file, or password).

ARVAN_SSH_PORT / ARVAN_SSH_KNOWN_HOSTS / ARVAN_SSH_TIMEOUT

22 / off / 30

SSH port, host-key file (off = no verification), connect timeout.

Run

Local (stdio) — for Claude Desktop / Claude Code

export ARVAN_API_KEY="your-machine-user-key"
export ARVAN_DEFAULT_REGION="ir-thr-c2"
arvancloud-mcp                      # or:  python -m arvancloud_mcp

See Add it to your AI agent below for per-client setup.

Networked (HTTP) — for remote/shared deployments

ARVAN_API_KEY=your-key ARVAN_TRANSPORT=streamable-http ARVAN_HOST=0.0.0.0 \
  arvancloud-mcp
# Streamable-HTTP endpoint: http://localhost:8000/mcp

Docker

docker build -t arvancloud-mcp .
docker run --rm -p 8000:8000 -e ARVAN_API_KEY=your-key arvancloud-mcp

Or with Compose (reads ARVAN_API_KEY from your environment or .env):

ARVAN_API_KEY=your-key docker compose up --build

To bundle the IaC/security validators (terraform, checkov, hadolint, trivy, …):

docker build --build-arg INSTALL_IAC_TOOLS=true -t arvancloud-mcp:iac .

Add it to your AI agent

All of these run the server over stdio. Install it first (pip install arvancloud-mcp) so the arvancloud-mcp command is on PATH.

Claude Desktop — claude_desktop_config.json:

{
  "mcpServers": {
    "arvancloud": {
      "command": "arvancloud-mcp",
      "env": { "ARVAN_API_KEY": "Apikey ...", "ARVAN_DEFAULT_REGION": "ir-thr-c2" }
    }
  }
}

Claude Code (CLI):

claude mcp add arvancloud --env ARVAN_API_KEY="Apikey ..." -- arvancloud-mcp

Cursor — ~/.cursor/mcp.json (or .cursor/mcp.json in a project):

{
  "mcpServers": {
    "arvancloud": { "command": "arvancloud-mcp", "env": { "ARVAN_API_KEY": "Apikey ..." } }
  }
}

VS Code — .vscode/mcp.json:

{
  "servers": {
    "arvancloud": { "type": "stdio", "command": "arvancloud-mcp", "env": { "ARVAN_API_KEY": "Apikey ..." } }
  }
}

Gemini CLI — ~/.gemini/settings.json:

{
  "mcpServers": {
    "arvancloud": {
      "command": "arvancloud-mcp",
      "env": { "ARVAN_API_KEY": "Apikey ..." },
      "timeout": 60000
    }
  }
}

Tip: for a safe, sharable setup, add "ARVAN_READ_ONLY": "true" to env so only read tools are exposed, or scope with ARVAN_TOOLS_ALLOW / ARVAN_TOOLS_DENY. Remote (HTTP) clients point at http://<host>:8000/mcp instead of a command.

Deploy & scale

Production manifests live in deploy/: Kubernetes with an HPA (deploy/kubernetes, kubectl apply -k), a Helm chart (deploy/helm/arvancloud-mcp), and Terraform that provisions an ArvanCloud server running the MCP (deploy/terraform). For many concurrent loads, run the HTTP transport with ARVAN_STATELESS_HTTP=true ARVAN_JSON_RESPONSE=true and scale replicas (the HPA does 2→10 on CPU/memory).

CI/CD

GitHub Actions in .github/workflows:

  • ci.yml — ruff + mypy + pytest (with coverage) + the MCP smoke test, on Python 3.10–3.12.

  • docker.yml — build & push the image to GHCR.

  • security.yml — Trivy filesystem scan.

  • release.yml — on a v* tag: build & publish to PyPI, create a GitHub release, and publish to the MCP registry (see Publishing).

Usage examples (what you can ask)

Platform:

  • "List my cloud servers in ir-thr-c2 and power off the one named staging."

  • "Create an A record for www on example.com → 1.2.3.4, proxied; enable free SSL."

  • "Add a 50 GB volume and attach it to server abcd."

  • "Upload ./site to bucket assets and host it as a static website."

  • "Purge the CDN cache for example.com and show the caching settings."

DevOps:

  • "Provision a 2-CPU Ubuntu server, install Docker, and Slack me when it's ready."

  • "Validate this Terraform and show the plan; if it's clean, apply it." → arvan_iac_*:

  • "Apply deploy/kubernetes to my cluster with this kubeconfig." → arvan_k8s_apply.

  • "Audit my security groups and grade https://example.com headers." → arvan_security_*.

  • "Load-test https://example.com with 200 requests at concurrency 20." → arvan_net_http_load_test.

  • "Search the ArvanCloud docs for DNSSEC and summarise the page." → arvan_docs_*.

Meta:

  • "What ArvanCloud features can you control?" → arvan_capabilities.

  • "Find the tool for floating IPs." → arvan_find_tool.

  • "Is everything configured?" → arvan_doctor. "Show tool metrics." → arvan_metrics.

Background jobs & scheduling

Long-running work (provisioning, IaC apply, scans, load tests) can run in the background so the conversation isn't blocked:

arvan_task_submit(tool="arvan_provision_server", arguments={...},
                  announce_webhook="https://hooks.example.com/done")
# -> returns a task id immediately; poll with arvan_task_status, or get a
#    webhook POST when it finishes. Recurring schedules: interval_seconds=3600.

Concurrency and history are bounded (ARVAN_TASK_MAX_CONCURRENCY, ARVAN_TASK_MAX_TASKS); the webhook announcement is replica-independent, so it works behind a load balancer at scale.

End-to-end: provision a server and configure it

"Spin up a small Ubuntu server in ir-thr-c2, then install nginx on it."

arvan_provision_server does this in one call, or the model can chain:

  1. arvan_list_plans + arvan_list_images → pick a flavor and Ubuntu image.

  2. arvan_create_ssh_key (or reuse) → arvan_create_server(..., ssh_key_name=...).

  3. arvan_wait_for_server → waits until it's active and returns the public IP.

  4. arvan_ssh_run_script(host=ip, script="apt-get update && apt-get install -y nginx").

That's the full lifecycle — buy → boot → SSH in → run commands — in one place.

The generic tool

For anything not wrapped explicitly (e.g. Live Streaming, or new endpoints):

arvan_request(method="GET", path="/live/2.0/channels")
arvan_request(method="POST", path="/cdn/4.0/domains/example.com/page-rules",
              body={"url": "example.com/*", "actions": {"cache_level": "bypass"}})

Discover paths first with arvan_capabilities("cdn"), arvan_capabilities("vod"), etc.

Notes on Object Storage, SSH, IAM & Containers

  • Object Storage is S3-compatible (https://s3.<region>.arvanstorage.ir) and uses its own access/secret key. The arvan_s3_* tools wrap it via boto3 — set ARVAN_S3_ACCESS_KEY / ARVAN_S3_SECRET_KEY (+ region/endpoint).

  • SSH tools run real commands on your servers. Host-key verification is off by default (freshly provisioned servers aren't in any known_hosts); set ARVAN_SSH_KNOWN_HOSTS to enforce it. Treat command execution as privileged — confirm intent before running destructive commands.

  • IAM (machine users, roles) and Cloud Container (Kubernetes PaaS, driven by kubectl/oc) aren't wrapped as typed tools; manage IAM via the panel or arvan_request, and Containers via the Kubernetes API.

Development & tests

pip install -e ".[dev]"
pytest

The test suite runs fully offline: HTTP is mocked with respx, and the boto3 (Object Storage) and asyncssh (SSH) clients are stubbed. It verifies auth header normalization, retry/backoff, error handling, region defaulting, request-body construction (incl. multipart zone import), Object Storage put/get/list, SSH run/script/upload/download, config parsing, tool registration, and the generic request path.

Project layout

src/arvancloud_mcp/
  config.py        # env-driven settings (API, S3, SSH, transport)
  client.py        # async httpx client: auth, retries, JSON+multipart, errors
  catalog.py       # machine-readable API catalogue (powers arvan_capabilities)
  server.py        # FastMCP assembly + transport selection
  tools/
    common.py        # generic request + capabilities
    compute.py       # servers, actions, images, plans, ssh-keys, tags, wait
    network.py       # networks, security groups, floating IPs, ports
    storage.py       # block volumes & snapshots
    objectstorage.py # S3 buckets & objects (boto3)
    cdn.py           # domains, caching, rules, rate-limit, observability
    dns.py           # records, cloud toggle, zone import, DNSSEC
    vod.py / live.py # video on demand / live streaming
    ssh.py           # run commands & transfer files over SSH (asyncssh)
tests/             # offline tests (respx + mocked boto3/asyncssh)

Publishing & marketplaces

The repo is set up to publish itself:

  • PyPI — release.yml builds and publishes arvancloud-mcp on a v* tag (PyPI Trusted Publishing; no token in the repo). Most MCP marketplaces (Glama, PulseMCP, mcp.so, Smithery) index from PyPI/GitHub automatically.

  • Official MCP Registry — server.json is the registry manifest (io.github.dwin-gharibi/arvancloud-mcp). The release workflow runs mcp-publisher (GitHub OIDC) to publish it; the mcp-name marker is embedded at the top of this README for PyPI validation. See the registry publishing guide.

To cut a release: bump version in pyproject.toml, server.json, and the badge, then git tag v0.1.0 && git push --tags.

License

MIT — see LICENSE.

Available Tools

232 tools
arvan_account_detailsA

Get the current account/project details for Cloud Server.

Inputs: no named parameters.

arvan_ansible_playbookB

Run an Ansible playbook against a host (requires ansible-playbook).

playbook is the YAML content. Auth/host default to the SSH settings. Host-key checking is disabled (fresh servers).

Inputs: host (required), playbook (required), ssh_user, private_key, +5 more.

arvan_attach_floating_ipC

Attach a floating IP to a server/port.

Inputs: floating_ip_id (required), region, server_id, subnet_id, +1 more.

arvan_attach_networkB

Attach a network to a server (optionally with a fixed IP).

Inputs: network_id (required), server_id (required), region, ip, +1 more.

arvan_attach_security_group_to_serverC

Attach a security group to a server.

Inputs: server_id (required), security_group_id (required), region.

arvan_attach_tagB

Attach a tag to a resource (e.g. a server).

Inputs: tag_id (required), instance_id (required), instance_type, region.

arvan_attach_volumeB

Attach a volume to a server.

Inputs: volume_id (required), server_id (required), region.

arvan_audit_logA
Read-only

Return the most recent mutating tool calls (newest last).

Inputs: limit_entries.

arvan_capabilitiesA
Read-only

Discover ArvanCloud products and their API endpoints.

Call without arguments for a compact overview of every service. Pass a service key (compute, network, storage, cdn, dns, vod, live) to get its full endpoint list, including request-body hints you can feed to arvan_request.

Inputs: service. Returns: object

arvan_create_a_recordC

Convenience: create an A record pointing name at one or more IPs.

Inputs: domain (required), name (required), ips (required), ttl, +1 more.

arvan_create_cdn_appB

Create a CDN app (edge application) for a domain.

Inputs: domain (required), app (required).

arvan_create_cname_recordC

Convenience: create a CNAME record from name to target.

Inputs: domain (required), name (required), target (required), ttl, +1 more.

arvan_create_dns_recordA

Create a DNS record. See module docs for value shapes per type.

Args: domain: Zone the record belongs to. type: Record type (a, aaaa, cname, mx, txt, ns, srv, …). name: Record name/subdomain (@ for the root). value: Type-specific value (see the shapes in this tool's docs). ttl: Time-to-live in seconds. cloud: Whether to proxy the record through ArvanCloud (orange-cloud). upstream_https: Upstream HTTPS mode when cloud is enabled. ip_filter_mode: Optional IP-filter/health-check configuration.

Inputs: domain (required), type (required), name (required), value (required), +4 more.

arvan_create_domainA

Add a domain to the CDN / Cloud DNS (the "dns-service" onboarding call).

Args: domain: The domain name, e.g. example.com. extra: Additional fields to merge into the request body (e.g. plan).

Inputs: domain (required), extra.

arvan_create_firewall_ruleB

Create a firewall (WAF) rule.

Args: domain: The CDN domain. name: Rule name. action: Action to take, e.g. block, allow, challenge. filters: Match conditions for the rule. extra: Additional fields to merge into the request body.

Inputs: domain (required), name (required), action (required), filters (required), +1 more.

arvan_create_floating_ipC

Allocate a new floating (public) IP address.

Inputs: description, region.

arvan_create_log_forwarderC
Read-only

Create a log forwarder (ship access logs to an external sink).

Inputs: domain (required), config (required).

arvan_create_metric_exporterC

Create a metric exporter for a domain.

Inputs: domain (required), config (required).

arvan_create_page_ruleC

Create a page rule.

Args: domain: The CDN domain. url: URL pattern the rule applies to (e.g. example.com/blog/*). actions: Map of rule actions, e.g. {"cache_level": "bypass"}.

Inputs: domain (required), url (required), actions (required).

arvan_create_private_networkA

Create a private network (subnet).

Args: name: Network name. region: Region code; defaults to ARVAN_DEFAULT_REGION. subnet_ip: CIDR for the subnet, e.g. 192.168.0.0/24. subnet_gateway: Gateway IP within the subnet. enable_gateway: Whether to enable the gateway. enable_dhcp: Whether DHCP assigns addresses automatically. dns_servers: Comma-separated DNS servers. dhcp_start / dhcp_end: Optional DHCP allocation range.

Inputs: name (required), region, subnet_ip, subnet_gateway, +5 more.

arvan_create_ptr_recordA

Create a reverse-DNS (PTR) record mapping an IP to a domain.

Inputs: ip (required), domain (required), region.

arvan_create_rate_limit_ruleC

Create a rate-limit rule.

rule carries the documented fields (e.g. url, method, count, duration, action).

Inputs: domain (required), rule (required).

arvan_create_security_groupC

Create a security group.

Inputs: name (required), description, region.

arvan_create_security_ruleB

Add a rule to a security group.

Args: group_id: Target security-group id. direction: ingress (inbound) or egress (outbound). protocol: tcp, udp, icmp … (omit for any). port_from / port_to: Port range (as strings). ips: Source/destination CIDRs, e.g. ["0.0.0.0/0"]. description: Optional description.

Inputs: group_id (required), direction (required), region, protocol, +4 more.

arvan_create_serverA

Create one or more cloud servers.

Args: name: Server name (a numeric suffix is added when count > 1). flavor_id: Plan/flavor id — see arvan_list_plans. image_id: OS/snapshot image id — see arvan_list_images. region: Region code; defaults to ARVAN_DEFAULT_REGION. disk_size: Root disk size in GB. count: How many identical servers to create. network_ids: Private network ids to attach. security_group_names: Security groups to apply. ssh_key_name: Name of an SSH key to inject (see arvan_list_ssh_keys). init_script: Cloud-init / startup script. ha_enabled: Enable high availability. create_type: Optional create type (e.g. image, snapshot). extra: Any additional fields to merge into the request body.

Inputs: name (required), flavor_id (required), image_id (required), region, +9 more.

arvan_create_ssh_keyC

Register an SSH public key so it can be injected into servers at create.

Inputs: name (required), public_key (required), region.

arvan_create_tagC

Create a resource tag.

Inputs: name (required), region, color.

arvan_create_volumeB

Create a block-storage volume.

Args: name: Volume name. size: Size in GB. region: Region code; defaults to ARVAN_DEFAULT_REGION. description: Optional description.

Inputs: name (required), size (required), region, description.

arvan_delete_cdn_appC
DestructiveIdempotent

Delete a CDN app by id.

Inputs: domain (required), app_id (required).

arvan_delete_dns_recordB
DestructiveIdempotent

Delete a DNS record by id.

Inputs: domain (required), record_id (required).

arvan_delete_domainA
DestructiveIdempotent

Remove a domain from the CDN.

The delete endpoint requires the domain's id. If domain_id is not supplied it is looked up automatically via the domain details.

Inputs: domain (required), domain_id.

arvan_delete_firewall_ruleC
DestructiveIdempotent

Delete a firewall (WAF) rule by id.

Inputs: domain (required), rule_id (required).

arvan_delete_floating_ipC
DestructiveIdempotent

Release (delete) a floating IP address by id.

Inputs: floating_ip_id (required), region.

arvan_delete_log_forwarderC
Read-only

Delete a log forwarder by id.

Inputs: domain (required), forwarder_id (required).

arvan_delete_page_ruleC
DestructiveIdempotent

Delete a page rule by id.

Inputs: domain (required), rule_id (required).

arvan_delete_ptr_recordB
DestructiveIdempotent

Delete a reverse-DNS (PTR) record by id.

Inputs: ptr_id (required), region.

arvan_delete_rate_limit_ruleC
DestructiveIdempotent

Delete a rate-limit rule by id.

Inputs: domain (required), rule_id (required).

arvan_delete_security_groupC
DestructiveIdempotent

Delete a security group by id.

Inputs: group_id (required), region.

arvan_delete_security_ruleA
DestructiveIdempotent

Delete a security-group rule by id.

Inputs: rule_id (required), region.

arvan_delete_serverB
DestructiveIdempotent

Delete a cloud server. Set force_delete_floating_ips to also release IPs.

Inputs: server_id (required), region, force_delete_floating_ips.

arvan_delete_ssh_keyB
DestructiveIdempotent

Delete a registered SSH key by name.

Inputs: name (required), region.

arvan_delete_subnetB
DestructiveIdempotent

Delete a private-network subnet by id.

Inputs: subnet_id (required), region.

arvan_delete_tagC
DestructiveIdempotent

Delete a resource tag by id.

Inputs: tag_id (required), region.

arvan_delete_volumeB
DestructiveIdempotent

Delete a block-storage volume by id.

Inputs: volume_id (required), region.

arvan_detach_floating_ipA
DestructiveIdempotent

Detach a floating IP from the given port.

Inputs: port_id (required), region.

arvan_detach_networkB
DestructiveIdempotent

Detach a network from a server.

Inputs: network_id (required), server_id (required), region.

arvan_detach_security_group_from_serverB
DestructiveIdempotent

Detach a security group from a server.

Inputs: server_id (required), security_group_id (required), region.

arvan_detach_tagC
DestructiveIdempotent

Detach a tag from a resource.

Inputs: tag_id (required), instance_id (required), instance_type, region.

arvan_detach_volumeC
DestructiveIdempotent

Detach a volume from a server.

Inputs: volume_id (required), server_id (required), region.

arvan_docs_fetchB

Fetch an ArvanCloud documentation page and return it as plain text.

Only ArvanCloud domains (arvancloud.ir / arvancloud.com) are allowed.

Inputs: url (required), max_chars.

arvan_docs_topicsA

List curated ArvanCloud documentation topics and their URLs.

Inputs: no named parameters.

arvan_doctorA
Read-only

Diagnose the server's configuration and connectivity.

Checks: whether the API key works (a live call), which optional CLI tools are installed (IaC/security/k8s/git/net), and whether Object Storage and SSH defaults are configured. Run this first to see what's ready to use.

Inputs: no named parameters. Returns: object

arvan_find_toolA

Search this server's own tools by keyword (handy with 200+ tools).

Returns matching tool names and one-line descriptions, ranked by relevance.

Inputs: query (required), limit. Returns: object

arvan_get_caching_settingsB
Read-only

Get caching settings for a domain.

Inputs: domain (required).

arvan_get_cdn_appC
Read-only

Get a CDN app by id.

Inputs: domain (required), app_id (required).

arvan_get_dns_recordB
Read-only

Get a single DNS record by id.

Inputs: domain (required), record_id (required).

arvan_get_dnssecA
Read-only

Get DNSSEC status (and DS records) for a domain.

Inputs: domain (required).

arvan_get_domainC
Read-only

Get details and settings for a CDN domain.

Inputs: domain (required).

arvan_get_quotasB
Read-only

Get resource quotas and current usage for a region.

Inputs: region.

arvan_get_serverA
Read-only

Get details of a single cloud server by id.

Inputs: server_id (required), region.

arvan_get_ssl_settingsB
Read-only

Get HTTPS/SSL settings for a domain.

Inputs: domain (required).

arvan_get_subnetB
Read-only

Get a private-network subnet by id.

Inputs: subnet_id (required), region.

arvan_get_volumeA
Read-only

Get a single block-storage volume by id.

Inputs: volume_id (required), region.

arvan_get_volume_limitsB
Read-only

Get block-storage volume limits/quota for a region.

Inputs: region.

arvan_git_availableA
Read-only

Report whether the git binary is installed.

Inputs: no named parameters.

arvan_git_checkoutB
Read-only

Check out a branch, tag, or commit.

Inputs: directory (required), ref (required).

arvan_git_cloneA

Clone a repository to dest (defaults to a fresh temp directory).

Returns the checkout path so you can pass it as directory to the IaC or Kubernetes tools. The path persists for the session.

Inputs: repo_url (required), dest, branch, depth.

arvan_git_diffA
Read-only

Show the diff of unstaged (or, with staged, staged) changes.

Inputs: directory (required), staged.

arvan_git_list_filesB
Read-only

List tracked files in a checkout.

Inputs: directory (required).

arvan_git_logB
Read-only

Show recent commits (one line each).

Inputs: directory (required), max_count.

arvan_git_pullB

Pull the latest changes for the current branch.

Inputs: directory (required).

arvan_git_statusA
Read-only

Show the working-tree status of a checkout (porcelain).

Inputs: directory (required).

arvan_helm_installA

Install/upgrade a Helm chart.

values are passed as --set key=value pairs (flat keys). chart may be a local path (e.g. deploy/helm/arvancloud-mcp) or a repo chart.

Inputs: release (required), chart (required), namespace, values, +4 more.

arvan_helm_uninstallC
DestructiveIdempotent

Uninstall a Helm release.

Inputs: release (required), namespace, kubeconfig, kubeconfig_path.

arvan_iac_available_toolsA
Read-only

Report which IaC validation tools are installed (and their paths).

Inputs: no named parameters.

arvan_iac_checkovA
Read-only

Scan IaC for misconfigurations & security issues with Checkov.

framework optionally narrows the scan (e.g. terraform, kubernetes, dockerfile).

Inputs: files, directory, framework.

arvan_iac_kube_linterC
Read-only

Lint Kubernetes manifests for security/correctness with kube-linter.

Inputs: manifest, files, directory.

arvan_iac_lint_dockerfileA
Read-only

Lint a Dockerfile with hadolint (reads the content from stdin).

Inputs: content (required).

arvan_iac_lint_yamlA
Read-only

Lint a YAML document with yamllint (reads the content from stdin).

Inputs: content (required).

arvan_iac_opentofu_validateC
Read-only

Validate OpenTofu configuration (tofu validate).

Inputs: files, directory, init.

arvan_iac_packer_validateB
Read-only

Validate a Packer template (packer validate).

Inputs: files, directory.

arvan_iac_terraform_applyA

Run terraform apply to create/update real ArvanCloud infrastructure.

This changes live infrastructure, so it refuses to run unless auto_approve=True is passed explicitly.

Inputs: files, directory, auto_approve, init.

arvan_iac_terraform_costC

Estimate Terraform cost with Infracost (infracost breakdown).

Inputs: files, directory.

arvan_iac_terraform_destroyA
DestructiveIdempotent

Run terraform destroy (tears down infrastructure; needs auto_approve).

Inputs: files, directory, auto_approve.

arvan_iac_terraform_fmtA

Check (or apply, with write=True) Terraform formatting.

Inputs: files, directory, write.

arvan_iac_terraform_initC

Run terraform init (downloads the arvancloud/arvan provider).

Inputs: files, directory.

arvan_iac_terraform_planA
Read-only

Run terraform plan against the arvancloud/arvan provider.

Use this to preview infrastructure changes before applying. The configured API key is injected as TF_VAR_api_key/ARVAN_API_KEY.

Inputs: files, directory, init.

arvan_iac_terraform_validateA
Read-only

Validate Terraform configuration (optionally terraform init first).

init runs terraform init -backend=false so providers resolve; disable it for an offline syntax-only check.

Inputs: files, directory, init.

arvan_iac_tflintC
Read-only

Lint Terraform with tflint (best-practice and provider checks).

Inputs: files, directory.

arvan_iac_tfsecC

Scan Terraform for security issues with tfsec.

Inputs: files, directory.

arvan_iac_trivy_configC

Scan IaC/config for security issues with Trivy (trivy config).

Inputs: files, directory.

arvan_iac_validate_kubernetesB
Read-only

Validate Kubernetes manifests against the schema with kubeconform.

Pass a single manifest YAML string, or files/directory.

Inputs: manifest, files, directory.

arvan_import_dns_zoneB

Import DNS records from a BIND-style zone file.

zone is the text content of the zone file; it is uploaded as the f_zone_file multipart field the API expects.

Inputs: domain (required), zone (required).

arvan_k8s_applyC

kubectl apply a manifest (inline YAML) or a directory of manifests.

Inputs: manifest, directory, kubeconfig, kubeconfig_path, +1 more.

arvan_k8s_available_toolsA
Read-only

Report whether kubectl and helm are installed.

Inputs: no named parameters.

arvan_k8s_deleteB
DestructiveIdempotent

kubectl delete -f a manifest or directory.

Inputs: manifest, directory, kubeconfig, kubeconfig_path, +1 more.

arvan_k8s_getC
Read-only

kubectl get resources (e.g. resource='pods'), default JSON output.

Inputs: resource (required), name, namespace, kubeconfig, +2 more.

arvan_kubectlB

Run an arbitrary kubectl command (e.g. ["get","pods","-o","wide"]).

Inputs: args (required), kubeconfig, kubeconfig_path, namespace.

arvan_list_cdn_appsC
Read-only

List CDN apps configured for a domain.

Inputs: domain (required).

arvan_list_dns_recordsA
Read-only

List DNS records for a domain (optionally filter by search/type).

Inputs: domain (required), search, type, page, +1 more.

arvan_list_domainsA
Read-only

List CDN domains on the account (supports pagination & search).

Inputs: page, per_page, search.

arvan_list_firewall_rulesB
Read-only

List firewall (WAF) rules for a domain.

Inputs: domain (required).

arvan_list_floating_ipsA
Read-only

List floating (public) IP addresses in a region.

Inputs: region.

arvan_list_imagesA
Read-only

List server images.

Args: region: Region code; defaults to ARVAN_DEFAULT_REGION. image_type: Filter by type, e.g. distributions (OS images), snapshots (your snapshots), or private. marketplace: Set True to list marketplace app images instead.

Inputs: region, image_type, marketplace.

arvan_list_log_forwardersA
Read-only

List log-forwarding destinations for a domain.

Inputs: domain (required).

arvan_list_metric_exportersA
Read-only

List Prometheus-style metric exporters for a domain.

Inputs: domain (required).

arvan_list_networksB
Read-only

List networks (public and private) available in a region.

Inputs: region.

arvan_list_page_rulesC
Read-only

List page rules for a domain.

Inputs: domain (required).

arvan_list_plansA
Read-only

List available server plans/flavors (sizes) and their pricing.

Inputs: region.

arvan_list_ptr_recordsA
Read-only

List reverse-DNS (PTR) records in a region.

Inputs: region.

arvan_list_rate_limit_rulesA
Read-only

List rate-limit rules for a domain.

Inputs: domain (required).

arvan_list_regionsA
Read-only

List all ArvanCloud IaaS regions (datacenters) and their codes.

Inputs: no named parameters.

arvan_list_security_groupsB
Read-only

List security groups (firewall groups) in a region.

Inputs: region.

arvan_list_serversB
Read-only

List cloud servers (VMs) in a region.

Inputs: region.

arvan_list_ssh_keysA
Read-only

List SSH keys registered in a region (for injecting into new servers).

Inputs: region.

arvan_list_subnetsB
Read-only

List private-network subnets in a region.

Inputs: region.

arvan_list_tagsB
Read-only

List resource tags in a region.

Inputs: region.

arvan_list_volumesB
Read-only

List block-storage volumes in a region.

Inputs: region.

arvan_live_create_channelC

Create a live-streaming channel.

extra carries optional fields such as type (e.g. normal), archive_enabled, mode and slug.

Inputs: title (required), description, extra.

arvan_live_delete_channelB
DestructiveIdempotent

Delete a live channel by id.

Inputs: channel_id (required).

arvan_live_get_channelB
Read-only

Get a live channel by id (includes push/pull URLs and stream keys).

Inputs: channel_id (required).

arvan_live_list_channelsC
Read-only

List live-streaming channels.

Inputs: page, per_page.

arvan_live_list_inputsB
Read-only

List the inputs/streams configured for a live channel.

Inputs: channel_id (required).

arvan_live_update_channelC

Update a live channel with the given fields.

Inputs: channel_id (required), fields (required).

arvan_metricsA
Read-only

Return server tool-call metrics (calls, errors, latency).

Set prometheus=True for Prometheus text-exposition format.

Inputs: prometheus.

arvan_net_dns_lookupB
Read-only

Resolve a DNS record.

Args: name: Hostname to look up. record_type: A, AAAA, CNAME, MX, TXT, NS, SOA, SRV, CAA, PTR … nameserver: Optional resolver IP to query directly (test propagation). timeout: Query timeout in seconds.

Inputs: name (required), record_type, nameserver, timeout.

arvan_net_http_checkC
Read-only

Make an HTTP(S) request and report status, timing, and key headers.

Inputs: url (required), method, timeout, follow_redirects.

arvan_net_http_load_testA
Read-only

Fire a quick concurrent load test and report latency percentiles.

Bounded to 2000 requests and 200 concurrency. Useful for sanity-checking a freshly deployed endpoint, not a substitute for a real load tool.

Inputs: url (required), requests, concurrency, method, +1 more.

arvan_net_my_public_ipA
Read-only

Return this server's public IP address (via an external echo service).

Inputs: no named parameters.

arvan_net_pingC

ICMP ping a host (requires the system ping binary).

Inputs: host (required), count.

arvan_net_port_scanB
Read-only

Scan a list of TCP ports on a host (defaults to common service ports).

Inputs: host (required), ports, timeout.

arvan_net_reverse_dnsA
Read-only

Reverse-resolve an IP address to a hostname (PTR).

Inputs: ip (required).

arvan_net_tcp_checkA
Read-only

Check whether a TCP port is open and measure connect latency.

Inputs: host (required), port (required), timeout.

arvan_net_tls_certB
Read-only

Inspect the TLS certificate served by a host (issuer, SANs, expiry).

Inputs: host (required), port, timeout.

arvan_net_tracerouteB

Trace the network path to a host (requires traceroute).

Inputs: host (required), max_hops.

arvan_net_whoisC

WHOIS lookup for a domain or IP (requires the whois binary).

Inputs: query (required).

arvan_notify_emailA

Send an email via SMTP.

SMTP settings fall back to ARVAN_SMTP_HOST/PORT/USER/PASSWORD/FROM env vars.

Inputs: to (required), subject (required), body (required), from_addr, +5 more.

arvan_notify_slackA

Post a message to a Slack incoming webhook.

webhook_url falls back to the SLACK_WEBHOOK_URL environment variable.

Inputs: text (required), webhook_url.

arvan_notify_telegramA

Send a Telegram message via a bot.

bot_token/chat_id fall back to TELEGRAM_BOT_TOKEN / TELEGRAM_CHAT_ID.

Inputs: text (required), chat_id, bot_token.

arvan_notify_webhookA

POST a JSON payload (or {"text": ...}) to an arbitrary webhook.

Inputs: url (required), payload, text.

arvan_provision_serverA

Provision a server and (optionally) configure it, in one call.

Supports several configuration methods (combine as needed):

  • init_script — cloud-init that runs at first boot (no SSH needed).

  • packages / install_docker / setup_script — run over SSH after boot (builds and runs a bash script). For Terraform-based provisioning use the arvan_iac_terraform_* tools; for Kubernetes use the arvan_k8s_* / arvan_helm_* tools.

Steps: register/generate an SSH key, create the server (optionally with cloud-init), wait for boot, detect its public IP, then SSH in and run the install script built from packages / install_docker / setup_script.

Args: name: Server name. flavor_id: Plan id (see arvan_list_plans). image_id: Image id (see arvan_list_images). region: Region; defaults to ARVAN_DEFAULT_REGION. disk_size: Root disk size (GB). networks: Network ids to attach (include a public network for SSH). security_group_names: Security groups to apply. ssh_public_key: Existing public key to inject. If omitted and generate_ssh_key is true, a new ed25519 keypair is generated and the private key is returned (store it securely!). ssh_key_name: Name to register the key under (default <name>-key). generate_ssh_key: Generate a keypair when no public key is given. ssh_user: SSH user for the install step (default ARVAN_SSH_USER/root). ssh_password: Use password auth for the install step instead of a key. packages: apt packages to install. install_docker: Install Docker via get.docker.com. setup_script: Extra shell commands to run after package install. wait_timeout: Max seconds to wait for boot + SSH availability. host_override: Use this IP/host for SSH instead of auto-detection.

Returns a summary with the server details, public IP, SSH info (incl. any generated private key), and install output.

Inputs: name (required), flavor_id (required), image_id (required), region, +14 more.

arvan_purge_cacheA
DestructiveIdempotent

Purge cached content for a domain.

Pass urls to purge specific paths, or omit to purge everything.

Inputs: domain (required), urls.

arvan_rebuild_serverA
DestructiveIdempotent

Rebuild a server from an image (destroys current root disk contents).

Inputs: server_id (required), image_id (required), region.

arvan_rename_serverC
DestructiveIdempotent

Rename a cloud server.

Inputs: server_id (required), name (required), region.

arvan_requestA

Call any ArvanCloud API endpoint directly (generic escape hatch).

Use this for any operation that does not have a dedicated tool. Discover available endpoints with arvan_capabilities.

Args: method: HTTP method. path: Endpoint path relative to the API base, e.g. /ecc/v1/regions/ir-thr-c2/servers or /cdn/4.0/domains. A leading slash is optional. query: Optional query-string parameters. body: Optional JSON request body (for POST/PUT/PATCH).

Returns: The decoded JSON response from ArvanCloud.

Inputs: method (required), path (required), query, body.

arvan_resize_serverC
DestructiveIdempotent

Change a server's plan/flavor (resize CPU & RAM).

Inputs: server_id (required), flavor_id (required), region.

arvan_resize_server_diskB
DestructiveIdempotent

Resize a server's root disk to the given size in GB.

Inputs: server_id (required), size (required), region.

arvan_s3_copy_objectC

Copy an object to another key/bucket.

Inputs: source_bucket (required), source_key (required), dest_bucket (required), dest_key (required).

arvan_s3_create_bucketC

Create a bucket. acl is one of private, public-read, public-read-write.

Inputs: bucket (required), acl.

arvan_s3_delete_bucketB
DestructiveIdempotent

Delete an (empty) bucket.

Inputs: bucket (required).

arvan_s3_delete_objectC
DestructiveIdempotent

Delete a single object.

Inputs: bucket (required), key (required).

arvan_s3_delete_objectsC
DestructiveIdempotent

Delete multiple objects in one call.

Inputs: bucket (required), keys (required).

arvan_s3_enable_static_websiteB

Configure a bucket for static website hosting (optionally make it public).

Inputs: bucket (required), index_document, error_document, make_public.

arvan_s3_generate_presigned_urlA

Generate a presigned URL for temporary access to an object.

operation is get_object (download) or put_object (upload).

Inputs: bucket (required), key (required), operation, expires_in.

arvan_s3_get_bucket_policyB
Read-only

Get a bucket's access policy (JSON).

Inputs: bucket (required).

arvan_s3_get_objectA
Read-only

Download an object. Returns text, or base64 when as_base64 or binary.

Bodies larger than 256 KiB are truncated; use a presigned URL for big files.

Inputs: bucket (required), key (required), as_base64.

arvan_s3_head_objectB

Get an object's metadata (size, type, etag) without downloading it.

Inputs: bucket (required), key (required).

arvan_s3_list_bucketsA
Read-only

List all Object Storage buckets.

Inputs: no named parameters.

arvan_s3_list_objectsB
Read-only

List objects in a bucket (optionally under a prefix).

Inputs: bucket (required), prefix, max_keys, continuation_token.

arvan_s3_put_bucket_policyA

Set a bucket's access policy (an S3 policy document).

Inputs: bucket (required), policy (required).

arvan_s3_put_objectA

Upload an object.

Args: bucket: Target bucket. key: Object key (path) within the bucket. content: The object body. Plain text, or base64 if content_base64. content_base64: Set True when content is base64-encoded binary. content_type: Optional MIME type, e.g. application/json. acl: Optional ACL, e.g. public-read.

Inputs: bucket (required), key (required), content (required), content_base64, +2 more.

arvan_s3_set_bucket_aclA

Set a bucket ACL (private, public-read, public-read-write).

Inputs: bucket (required), acl (required).

arvan_s3_sync_local_dirC

Upload all files under a local directory to a bucket (recursive).

Inputs: bucket (required), local_dir (required), prefix, acl.

arvan_security_audit_security_groupsA
Read-only

Audit ArvanCloud security groups for risky, world-open ingress rules.

Flags inbound rules open to 0.0.0.0/0 (or ::/0) that expose sensitive ports (SSH, RDP, databases, …) or all ports. Returns findings with a severity so you can tighten them.

Inputs: region.

arvan_security_available_toolsA
Read-only

Report which security scanners are installed (and their paths).

Inputs: no named parameters.

arvan_security_generate_passwordB
Read-only

Generate a cryptographically strong random password.

Inputs: length, include_symbols.

arvan_security_generate_sbomC

Generate a Software Bill of Materials (SBOM) with syft.

Inputs: files, directory, sbom_format.

arvan_security_generate_ssh_keypairA
Read-only

Generate an SSH keypair (ed25519 or rsa) for provisioning servers.

Returns the OpenSSH private key and the public key. Register the public key with arvan_create_ssh_key and pass the private key to the arvan_ssh_* tools.

Inputs: key_type, comment, bits.

arvan_security_grypeC

Scan a container image or a directory for vulnerabilities with grype.

Inputs: image, files, directory.

arvan_security_http_headersC

Check a URL's HTTP security headers and grade them.

Inputs: url (required), timeout_s.

arvan_security_sastC

Static application security testing (SAST) with semgrep.

Inputs: files, directory, config.

arvan_security_scan_imageB
Read-only

Scan a container image for vulnerabilities with Trivy (trivy image).

Inputs: image (required).

arvan_security_scan_secretsB
Read-only

Scan a directory/files for committed secrets with gitleaks.

Inputs: files, directory.

arvan_security_scan_vulnerabilitiesB
Read-only

Scan a filesystem for vulns, secrets and misconfig with Trivy (trivy fs).

Inputs: files, directory.

arvan_server_actionC

Run a power/maintenance action on a server.

Actions: power-on, power-off, reboot, hard-reboot, rescue, unrescue, reset-root-password, add-public-ip, change-public-ip.

Inputs: server_id (required), action (required), region.

arvan_server_optionsC
Read-only

Get available options for creating a server in a region.

Inputs: region.

arvan_set_dnssecB

Enable or disable DNSSEC for a domain.

Inputs: domain (required), enabled (required).

arvan_set_port_securityC

Enable or disable port security on a network port.

Inputs: port_id (required), enabled (required), region.

arvan_snapshot_volumeC

Create a snapshot of a volume.

Inputs: volume_id (required), name (required), region, description.

arvan_ssh_check_connectionA
Read-only

Verify SSH connectivity/auth to a server (useful after provisioning).

Returns whether the connection succeeded and the server's SSH banner.

Inputs: host (required), username, port, private_key, +5 more.

arvan_ssh_download_fileB

Read a file from the server via SFTP (truncated to 256 KiB).

Inputs: host (required), remote_path (required), as_base64, username, +6 more.

arvan_ssh_runA

Run a single command on a server over SSH and return its output.

Args: host: Server IP or hostname (e.g. a freshly created server's public IP). command: The shell command to execute. username: SSH user (defaults to ARVAN_SSH_USER, typically root). port: SSH port (default 22). private_key: Inline PEM private key (overrides the configured default). key_file: Path to a private key file. password: Password auth (if not using a key). passphrase: Passphrase for an encrypted private key. known_hosts: Path to a known_hosts file; omit to skip host-key checks. connect_timeout: Seconds to wait for the connection. command_timeout: Seconds to wait for the command to finish.

Returns: {exit_status, stdout, stderr, host}.

Inputs: host (required), command (required), username, port, +7 more.

arvan_ssh_run_scriptB

Run a multi-line script on a server over SSH (piped to bash -s).

Use this for setup/bootstrap scripts. interpreter can be changed to, e.g., sh -s or python3 -.

Inputs: host (required), script (required), username, port, +8 more.

arvan_ssh_upload_fileB

Write content to a file on the server via SFTP.

content is plain text, or base64 when content_base64 is set.

Inputs: host (required), remote_path (required), content (required), content_base64, +7 more.

arvan_task_cancelC

Cancel a scheduled/running background task.

Inputs: task_id (required).

arvan_task_listA
Read-only

List background tasks and their status (most recent first).

Inputs: no named parameters.

arvan_task_statusB
Read-only

Get a background task's full status, last result, and run history.

Inputs: task_id (required).

arvan_task_submitA

Run another tool in the background, now/later/recurring.

Args: tool: Name of the tool to run (e.g. arvan_provision_server, arvan_net_http_load_test, arvan_security_scan_vulnerabilities). arguments: Arguments for that tool. delay_seconds: Wait this long before the first run. interval_seconds: If set, re-run every N seconds (min 1) — a schedule. max_runs: Stop after this many runs (default 1; unlimited when an interval is set and this is omitted — cancel to stop). name: Friendly label for the task. announce_webhook: POST a status payload here when each run finishes (falls back to ARVAN_TASK_WEBHOOK). Use this for completion notifications that work even across replicas / after disconnect.

Returns the task record (with its id) immediately; poll with arvan_task_status or wait for the webhook.

Inputs: tool (required), arguments, delay_seconds, interval_seconds, +3 more.

arvan_toggle_dns_cloudC

Enable or disable cloud (proxy) for a DNS record.

Inputs: domain (required), record_id (required), cloud (required).

arvan_trigger_cdn_app_webhookC

Trigger a CDN app's webhook action.

Inputs: domain (required), app_id (required).

arvan_update_caching_settingsA

Update caching settings for a domain.

settings accepts the caching fields documented by ArvanCloud, e.g. {"cache_status": "enable", "cache_page_200": "..."}.

Inputs: domain (required), settings (required).

arvan_update_cdn_appC

Update a CDN app with the given fields.

Inputs: domain (required), app_id (required), fields (required).

arvan_update_dns_recordA

Update a DNS record (full replace).

record should contain the same fields as creation (type, name, value, ttl, cloud …).

Inputs: domain (required), record_id (required), record (required).

arvan_update_ssl_settingsA

Update HTTPS/SSL settings for a domain.

Pass ssl_type (default for free Let's Encrypt, manual for an uploaded certificate, off to disable) and/or a full settings body.

Inputs: domain (required), ssl_type, settings.

arvan_update_subnetB

Update a subnet (e.g. dns_servers, enable_dhcp, subnet_gateway).

Inputs: subnet_id (required), fields (required), region.

arvan_update_volumeB

Update a volume's name and/or description.

Inputs: volume_id (required), region, name, description.

arvan_vod_create_audioC

Create an audio item in a channel.

Inputs: channel_id (required), fields (required).

arvan_vod_create_channelC

Create a VOD channel.

Inputs: title (required), description, extra.

arvan_vod_create_domainC

Create/set the VOD user domain.

Inputs: fields (required).

arvan_vod_create_profileC

Create an encoding profile in a channel.

Inputs: channel_id (required), fields (required).

arvan_vod_create_subtitleB

Create a subtitle for a video (e.g. {"lang": "fa", "file_id": "..."}).

Inputs: video_id (required), fields (required).

arvan_vod_create_videoB

Create a video in a channel.

fields typically includes title, description and a file_id previously obtained by uploading to the channel's files endpoint, plus optional convert_mode, watermark_id etc.

Inputs: channel_id (required), fields (required).

arvan_vod_create_watermarkC

Create a watermark in a channel (e.g. {"title":..., "file_id":...}).

Inputs: channel_id (required), fields (required).

arvan_vod_delete_audioB
DestructiveIdempotent

Delete an audio item by id.

Inputs: audio_id (required).

arvan_vod_delete_channelB
DestructiveIdempotent

Delete a VOD channel by id.

Inputs: channel_id (required).

arvan_vod_delete_fileC
DestructiveIdempotent

Delete an uploaded source file by id.

Inputs: file_id (required).

arvan_vod_delete_profileB
DestructiveIdempotent

Delete an encoding profile by id.

Inputs: profile_id (required).

arvan_vod_delete_subtitleB
DestructiveIdempotent

Delete a subtitle by id.

Inputs: subtitle_id (required).

arvan_vod_delete_videoC
DestructiveIdempotent

Delete a VOD video by id.

Inputs: video_id (required).

arvan_vod_delete_watermarkB
DestructiveIdempotent

Delete a watermark by id.

Inputs: watermark_id (required).

arvan_vod_get_audioC
Read-only

Get an audio item by id.

Inputs: audio_id (required).

arvan_vod_get_channelC
Read-only

Get a VOD channel by id.

Inputs: channel_id (required).

arvan_vod_get_domainA
Read-only

Get the VOD user domain (the delivery domain for this account).

Inputs: no named parameters.

arvan_vod_get_fileB
Read-only

Get an uploaded source file by id.

Inputs: file_id (required).

arvan_vod_get_profileC
Read-only

Get an encoding profile by id.

Inputs: profile_id (required).

arvan_vod_get_subtitleC
Read-only

Get a subtitle by id.

Inputs: subtitle_id (required).

arvan_vod_get_videoC
Read-only

Get a VOD video by id.

Inputs: video_id (required).

arvan_vod_get_watermarkB
Read-only

Get a watermark by id.

Inputs: watermark_id (required).

arvan_vod_list_audiosC
Read-only

List audio tracks in a channel.

Inputs: channel_id (required).

arvan_vod_list_channelsC
Read-only

List VOD channels.

Inputs: page, per_page.

arvan_vod_list_filesB
Read-only

List uploaded source files in a channel.

Inputs: channel_id (required).

arvan_vod_list_profilesB
Read-only

List encoding profiles in a channel.

Inputs: channel_id (required).

arvan_vod_list_subtitlesC
Read-only

List subtitles for a video.

Inputs: video_id (required).

arvan_vod_list_videosC
Read-only

List videos in a channel.

Inputs: channel_id (required), page, per_page.

arvan_vod_list_watermarksC
Read-only

List watermarks in a channel.

Inputs: channel_id (required).

arvan_vod_update_audioC

Update an audio item with the given fields.

Inputs: audio_id (required), fields (required).

arvan_vod_update_channelB

Update a VOD channel with the given fields.

Inputs: channel_id (required), fields (required).

arvan_vod_update_profileC

Update an encoding profile with the given fields.

Inputs: profile_id (required), fields (required).

arvan_vod_update_videoC

Update a VOD video with the given fields.

Inputs: video_id (required), fields (required).

arvan_vod_update_watermarkC

Update a watermark with the given fields.

Inputs: watermark_id (required), fields (required).

arvan_wait_for_serverA
Read-only

Poll a server until it becomes active (or the timeout elapses).

Handy right after arvan_create_server and before SSHing in. Returns the latest server details plus ready/timed_out flags. The wait is bounded to 30 minutes regardless of timeout.

Inputs: server_id (required), region, timeout, interval.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.2/5.0

    Scored across 232 tools

    Disambiguation5/5

    Each tool targets a distinct resource and action, with clear naming prefixes (e.g., arvan_create_server vs arvan_create_dns_record). Despite the large number, the consistent verb_noun pattern and service-specific prefixes make overlapping purposes unlikely.

    Naming Consistency5/5

    All tools follow the arvan_<verb>_<resource> pattern, with consistent verbs (create, list, get, delete, update, etc.) and predictable resource names. Even sub-services like arvan_vod_* and arvan_s3_* adhere to the same convention.

    Tool Count2/5

    232 tools is excessively high for a single server, covering disparate domains (compute, DNS, CDN, S3, VOD, live, security, IaC, git, k8s, notifications). This broad scope would be better served by multiple specialized servers.

    Completeness4/5

    For the intended scope of managing ArvanCloud services, the tool surface is remarkably complete, offering CRUD operations and additional actions for most resources. Minor gaps exist (e.g., missing VOD update for some entities), but the generic arvan_request escape hatch covers any omitted endpoints.

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Provides AI agents with natural language control over AWS, Azure, GCP, and Alibaba Cloud infrastructure through dynamic API discovery and execution. Supports 51,900+ cloud operations and includes OpenTofu integration for complete infrastructure lifecycle management.
      3
      MIT