arvancai
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ARVANCLOUD_API_KEY | Yes | Your ArvanCloud Machine User API key. Required to run the arvancai MCP server. | |
| ARVANCLOUD_S3_ACCESS_KEY_ID | No | Optional Object Storage S3 HMAC access key ID. | |
| ARVANCLOUD_S3_SECRET_ACCESS_KEY | No | Optional Object Storage S3 HMAC secret access key. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_domainsA | [READ] List domains registered in the ArvanCloud CDN account. Official: GET /cdn/4.0/domains |
| get_domainB | [READ] Get information for one CDN domain. Official: GET /cdn/4.0/domains/{domain} |
| register_domainB | [WRITE] Register a domain for CDN/DNS service. Official: POST /cdn/4.0/domains/dns-service. domain_type full = NS delegation; partial = CNAME setup. |
| set_domain_planB | [WRITE] Set domain plan_level (1=basic, 2=growth, 3=professional per domain docs). Official: PUT /cdn/4.0/domains/{domain}/plan |
| check_domain_nameserversB | [READ] Check whether domain NS keys indicate activation. Official: GET /cdn/4.0/domains/{domain}/ns-keys/check |
| list_dns_recordsB | [READ] List DNS records for a domain. Official: GET /cdn/4.0/domains/{domain}/dns-records |
| get_dns_recordA | [READ] Get one DNS record by id. Official: GET /cdn/4.0/domains/{domain}/dns-records/{id}. Never invent record_id — obtain from list_dns_records. |
| create_dns_recordA | [WRITE] Create a DNS record. Official: POST /cdn/4.0/domains/{domain}/dns-records. value shape depends on type (see docs/adding-records). Inspect current records before creating duplicates. |
| update_dns_recordA | [WRITE] Update an existing DNS record. Official: PUT /cdn/4.0/domains/{domain}/dns-records/{id}. Requires exact record_id. Read current state first. |
| delete_dns_recordA | [DESTRUCTIVE] Permanently delete one DNS record. Official: DELETE /cdn/4.0/domains/{domain}/dns-records/{id}. Requires exact record_id — never infer or delete multiple. |
| set_dns_record_cloudB | [WRITE] Toggle cloud/proxy status for a DNS record. Official: PUT /cdn/4.0/domains/{domain}/dns-records/{id}/cloud |
| get_caching_settingsA | [READ] Get caching settings for a domain. Official: GET /cdn/4.0/domains/{domain}/caching |
| update_caching_settingsC | [WRITE] Patch caching settings. Official: PATCH /cdn/4.0/domains/{domain}/caching. Documented fields include cache_status (off|uri|query_string), cache_page_200, cache_page_any, cache_browser, cache_ignore_sc, cache_developer_mode, cache_consistent_uptime. |
| purge_cacheA | [DESTRUCTIVE] Purge CDN cache. Official: POST /cdn/4.0/domains/{domain}/caching/purge. purge=all clears entire domain cache (service impact). purge=individual requires exact purge_urls. Never broaden scope. |
| get_ssl_settingsB | [READ] Get domain SSL settings. Official: GET /cdn/4.0/domains/{domain}/ssl |
| update_ssl_settingsA | [WRITE] Patch SSL settings. Official: PATCH /cdn/4.0/domains/{domain}/ssl. Documented fields: ssl_status, https_redirect, replace_http, tls_version, hsts_status, hsts_max_age, hsts_subdomain, hsts_preload. HSTS changes can be hard to reverse until max-age expires. |
| list_troubleshootsB | [READ] List troubleshoot runs for a domain. Official CDN API: GET /domains/{domain}/troubleshoots |
| get_latest_troubleshootB | [READ] Get the latest troubleshoot for a domain. Official: GET /domains/{domain}/troubleshoots/latest |
| create_troubleshootA | [WRITE] Start a new troubleshoot for a domain. Official: POST /domains/{domain}/troubleshoots. Body fields beyond empty POST are UNKNOWN / NOT DOCUMENTED in product samples — send empty object unless you have verified fields. |
| get_dnssecB | [READ] Get DNSSEC status. Official CDN API: GET /domains/{domain}/dns-records/dnssec (CDN Go SDK). Offline FA also documents update actions. |
| update_dnssecC | [WRITE] Update DNSSEC. Offline FA (cdn/dns-records/dnssec): PUT /domains/{domain}/dns-records/dnssec/actions body {"enable":true|false}. |
| set_domain_nameserversC | [WRITE] Set custom NS keys. Offline FA (cdn/dns-records/change-default-ns): PUT /domains/{domain}/ns-keys body {"ns_keys":[...]} |
| use_optional_nameserversC | [WRITE] Use optional NS keys (.net/.com style). Offline FA: POST /domains/{domain}/ns-keys/use-optional-keys |
| get_accelerationC | [READ] GET /domains/{domain}/acceleration (CDN Go SDK). Offline FA documents PATCH bodies for CSS/JS optimization. |
| update_accelerationB | [WRITE] Offline FA (cdn/acceleration): PATCH /domains/{domain}/acceleration e.g. {"status":"on","extensions":["css"]} |
| update_image_resizeC | [WRITE] Offline FA (cdn/acceleration): PATCH /domains/{domain}/image-resize e.g. {"status":"on"} |
| update_ddos_protection_modeC | [WRITE] Offline FA (cdn/security/ddos): PATCH /domains/{domain}/ddos with protection_mode (cookie|javascript|recaptcha|captcha). Note: CDN Go SDK lists /ddos/settings — this tool follows FA product docs path /ddos. |
| update_waf_modeB | [WRITE] Offline FA / EN WAF docs: PATCH /domains/{domain}/waf with mode off|detect|protect. Note: CDN Go SDK lists /waf/settings — this tool follows product docs path /waf. |
| update_origin_connection_settingsC | [WRITE] Offline FA (https-settings + advanced-settings): PATCH /domains/{domain}/load-balancers/settings. Documented fields include protocol (http|https|auto), method, keepalive, max_fails, fail_timeout, next_upstream_tcp. |
| get_firewall_settingsC | [READ] GET /domains/{domain}/firewall/settings (CDN Go SDK; FA firewall API table). |
| update_firewall_settingsC | [WRITE] PATCH /domains/{domain}/firewall/settings. Offline FA known-bots sample includes skip_global_firewall. Pass only documented fields. |
| list_firewall_rulesC | [READ] GET /domains/{domain}/firewall/rules (CDN Go SDK FirewallRulesIndex). |
| get_firewall_ruleD | [READ] GET /domains/{domain}/firewall/rules/{id} |
| create_firewall_ruleC | [WRITE] POST /domains/{domain}/firewall/rules. Official FA samples: name, note, is_enabled, action (allow|deny|challenge|bypass), action_details, filter_expr. |
| update_firewall_ruleC | [WRITE] PATCH /domains/{domain}/firewall/rules/{id}. Requires exact rule_id. Use documented fields from create samples. |
| delete_firewall_ruleB | [DESTRUCTIVE] DELETE /domains/{domain}/firewall/rules/{id}. Requires exact rule_id — never delete multiple. |
| reprioritize_firewall_rulesC | [WRITE] POST /domains/{domain}/firewall/actions/reprioritize (CDN Go SDK). Pass the priority payload exactly as required by the API (product pages list the operation; body schema details may come from API portal). |
| get_rate_limit_settingsC | [READ] GET /domains/{domain}/rate-limit/settings (CDN Go SDK; EN/FA rate-limit API table). |
| update_rate_limit_settingsC | [WRITE] PATCH /domains/{domain}/rate-limit/settings |
| list_rate_limit_rulesD | [READ] GET /domains/{domain}/rate-limit/rules |
| get_rate_limit_ruleC | [READ] GET /domains/{domain}/rate-limit/rules/{id} |
| create_rate_limit_ruleC | [WRITE] POST /domains/{domain}/rate-limit/rules. Official samples include url_pattern, rate, time_duration, is_enabled, description, exclude_sources, burst, block_duration, allowed_methods, action, action_details. |
| update_rate_limit_ruleC | [WRITE] PATCH /domains/{domain}/rate-limit/rules/{id} |
| delete_rate_limit_ruleC | [DESTRUCTIVE] DELETE /domains/{domain}/rate-limit/rules/{id} |
| reprioritize_rate_limit_rulesC | [WRITE] POST /domains/{domain}/rate-limit/actions/reprioritize (CDN Go SDK / EN rate-limit API table). |
| get_cdn_traffic_reportC | [READ] OpenAPI + ar-prometheus-exporter: GET /domains/{domain}/reports/traffics?period= |
| get_cdn_visitors_reportC | [READ] OpenAPI + ar-prometheus-exporter: GET /domains/{domain}/reports/visitors?period= |
| get_cdn_geo_reportC | [READ] OpenAPI + ar-prometheus-exporter: GET /domains/{domain}/reports/traffics/map?period= |
| get_cdn_response_time_reportC | [READ] OpenAPI + ar-prometheus-exporter: GET /domains/{domain}/reports/response-time?period= |
| get_cdn_status_reportC | [READ] OpenAPI + ar-prometheus-exporter: GET /domains/{domain}/reports/status?period= |
| get_cdn_high_request_ipsB | [READ] OpenAPI + ar-prometheus-exporter: GET /domains/{domain}/reports/high-request-ips?period= (Professional+ plans) |
| list_serversB | [READ] List instances in a data center region. Official: GET /ecc/v1/regions/{region}/servers. Example region from docs: ir-thr-c2. |
| list_imagesA | [READ] List images/OS available in a region. Official: GET /ecc/v1/regions/{region}/images. |
| get_serverC | [READ] OpenAPI IaaS 1.0: GET /regions/{region}/servers/{id} (ecc/v1). |
| list_flavorsC | [READ] OpenAPI iaas/3.0.0: GET https://ecc.{region}.arvanapis.ir/v3/flavors |
| list_networksC | [READ] OpenAPI IaaS 1.0: GET /regions/{region}/networks (ecc/v1). |
| create_serverA | [WRITE] Offline FA API Usage + OpenAPI IaaS 1.0: POST /ecc/v1/regions/{region}/servers with name, network_id, flavor_id, image_id, security_groups[{name}], ssh_key, key_name, count. Obtain IDs from list tools — never invent UUIDs. |
| power_on_serverC | [WRITE] OpenAPI IaaS 1.0: POST /regions/{region}/servers/{id}/power-on |
| power_off_serverC | [WRITE] OpenAPI IaaS 1.0: POST /regions/{region}/servers/{id}/power-off |
| reboot_serverC | [WRITE] OpenAPI IaaS 1.0: POST /regions/{region}/servers/{id}/reboot |
| list_servers_v3D | [READ] OpenAPI iaas/3.0.0: GET https://ecc.{region}.arvanapis.ir/v3/servers |
| list_database_flavorsC | [READ] OpenAPI IaaS 1.0: GET /regions/{region}/databases/flavors (ecc/v1). |
| create_databaseB | [WRITE] OpenAPI IaaS 1.0 CreateDatabaseRequest: POST /regions/{region}/databases with datastoreType + flavorRef from list_database_flavors — do not invent values. |
| list_vod_channelsB | [READ] Official FA/EN API Usage: GET https://napi.arvancloud.ir/vod/2.0/channels |
| list_vod_videosC | [READ] Offline FA API Usage: GET /vod/2.0/channels/{channel-id}/videos |
| get_vod_channelC | [READ] OpenAPI Arvan VOD 2.0: GET /channels/{channel} |
| get_vod_videoD | [READ] OpenAPI: GET /videos/{video} |
| list_vod_tagsC | [READ] OpenAPI: GET /tags |
| get_vod_domainC | [READ] OpenAPI: GET /domain |
| create_vod_channelC | [WRITE] Official FA/EN API Usage + OpenAPI: POST /vod/2.0/channels with documented fields (title, description, secure_link_*, ads_enabled, present_type, campaign_id). |
| list_live_streamsB | [READ] OpenAPI Arvan LIVE 2.0: GET /streams (base napi.../live/2.0). |
| get_live_streamC | [READ] OpenAPI: GET /streams/{stream} |
| get_live_domainC | [READ] OpenAPI: GET /domain |
| list_live_watermarksC | [READ] OpenAPI: GET /watermarks |
| list_vads_channelsC | [READ] OpenAPI VADS 2.0: GET /channels (host napi.arvancloud.ir/vads/2.0). |
| get_vads_channelC | [READ] OpenAPI: GET /channels/{channel} |
| list_vads_channel_campaignsC | [READ] OpenAPI: GET /channels/{channel}/campaigns |
| get_vads_campaignD | [READ] OpenAPI: GET /campaigns/{campaign} |
| get_vads_domainC | [READ] OpenAPI: GET /domain |
| list_edge_computesC | [READ] OpenAPI Edge Computing: GET /edge-computes (optional query: application, q, page, per_page). |
| get_edge_computeD | [READ] OpenAPI: GET /edge-computes/{edgeComputeId} |
| list_edge_routesC | [READ] OpenAPI: GET /edge-computes/{edgeComputeId}/routes |
| create_edge_routeB | [WRITE] OpenAPI Route schema: POST /edge-computes/{edgeComputeId}/routes — required domain, url, status (active|inactive). |
| update_edge_routeD | [WRITE] OpenAPI: PUT /edge-computes/{edgeComputeId}/routes/{route_id} |
| delete_edge_routeC | [DESTRUCTIVE] OpenAPI: DELETE /edge-computes/{edgeComputeId}/routes/{route_id} |
| list_edge_plansC | [READ] OpenAPI: GET /plans |
| list_edge_templatesC | [READ] OpenAPI: GET /templates |
| get_edge_namespaceC | [READ] OpenAPI: GET /namespace |
| list_edge_deploymentsC | [READ] OpenAPI: GET /edge-computes/{edgeComputeId}/deployments |
| list_edge_env_variablesC | [READ] OpenAPI: GET /edge-computes/{edgeComputeId}/env-variables |
| set_edge_env_variableC | [WRITE] OpenAPI EnvVariable: POST /edge-computes/{edgeComputeId}/env-variables — key, value, type (string|json), is_secret. |
| deploy_edge_computeC | [WRITE] OpenAPI: POST /edge-computes/deploy — required name, bundled_code; optional namespace, tag. |
| list_caas_podsC | [READ] OpenAPI Arvan CaaS 1.25: GET /api/v1/namespaces/{namespace}/pods on zone base. |
| get_caas_podC | [READ] OpenAPI: GET /api/v1/namespaces/{namespace}/pods/{name} |
| get_caas_pod_logsD | [READ] OpenAPI: GET /api/v1/namespaces/{namespace}/pods/{name}/log |
| list_caas_deploymentsC | [READ] OpenAPI: GET /apis/apps/v1/namespaces/{namespace}/deployments |
| get_caas_deploymentC | [READ] OpenAPI: GET /apis/apps/v1/namespaces/{namespace}/deployments/{name} |
| list_caas_servicesC | [READ] OpenAPI: GET /api/v1/namespaces/{namespace}/services |
| list_caas_configmapsC | [READ] OpenAPI: GET /api/v1/namespaces/{namespace}/configmaps |
| list_ai_providersC | [READ] OpenAPI ai-ml-backend: GET /providers |
| list_ai_modelsC | [READ] OpenAPI: GET /models |
| get_ai_modelC | [READ] OpenAPI: GET /models/{model_id} |
| list_ai_endpointsC | [READ] OpenAPI: GET /endpoints |
| get_ai_endpointC | [READ] OpenAPI: GET /endpoints/{endpoint_id} |
| list_ai_datasetsC | [READ] OpenAPI: GET /ai/v1/datasets → buckets path under /ai/v1 base as datasets |
| list_ai_knowledge_basesC | [READ] OpenAPI: GET /knowledge-bases |
| list_ai_bucketsC | [READ] OpenAPI: GET /ai/v1/buckets/{region} (called as buckets/{region} on /ai/v1). |
| write_cloud_logsA | [WRITE] Ingest logs via POST /logging/v1/entries/write (Fluent Bit ArvanCloud CloudLogs plugin). Body: { logs: [{ logType, timestamp?, severity?, resource?, payload }] }. Auth: Apikey header. Not a full CloudLogs management API. |
| list_bucketsB | [READ] S3 ListBuckets via official AWS-compatible SDK pattern (FA developer-tools/sdk/object-storage/list-bucket). |
| create_bucketC | [WRITE] S3 CreateBucket. Official API Usage curl + SDK create-bucket docs. ACL may be private|public-read per SDK sample. |
| head_bucketC | [READ] S3 HeadBucket (FA SDK head-bucket). |
| delete_bucketA | [DESTRUCTIVE] S3 DeleteBucket (FA SDK delete-bucket). Bucket must be empty per product docs. |
| list_objectsC | [READ] S3 ListObjectsV2. Official API Usage listObjects sample + SDK object-list. |
| head_objectD | [READ] S3 HeadObject (FA SDK head-object). |
| get_object_textA | [READ] S3 GetObject for text-ish content. Caps at max_bytes (default 256KiB) to avoid dumping large binaries into the agent context. Official API Usage getObject. |
| put_object_textB | [WRITE] S3 PutObject with string body (FA SDK upload-object). For binary uploads use other clients; this tool is text-oriented for agent safety. |
| delete_objectC | [DESTRUCTIVE] S3 DeleteObject (FA SDK delete-object). Requires exact bucket+key. |
| get_bucket_metricsC | [READ] OpenAPI storage/1.0.0 + FA metrics: GET https://storage.arvanapis.ir/v1/buckets/{bucketName}/metrics |
| list_storage_api_bucketsA | [READ] OpenAPI Object Storage API 1.0.0: GET /v1/buckets (storage.arvanapis.ir) — optional status=all|shared|owned, page, perPage. Uses Machine User key (not S3 HMAC). |
| get_storage_reportC | [READ] OpenAPI: GET /v1/reports/storage on storage.arvanapis.ir |
| invoke_cdn_apiA | [OPENAPI] Call any path from CDN OpenAPI 4.181.3 on napi.../cdn/4.0. Prefer named CDN tools when available. Allowlist: 238 ops from cdn-4.0.yml (ArvanCloud CDN Services 4.181.3). Rejects unknown paths — does not invent APIs. |
| invoke_storage_apiB | [OPENAPI] Call storage.arvanapis.ir management API (OpenAPI storage/1.0.0). Paths are /v1/...; base already includes /v1 so /v1 is stripped. Allowlist: 58 ops from storage-1.0.0.yaml (Object Storage API 1.0.0). Rejects unknown paths — does not invent APIs. |
| invoke_iaas_v1_apiA | [OPENAPI] Call napi.../ecc/v1 paths from iaas-1.0.json (servers, networks, float-ips, databases, …). Use concrete paths e.g. /regions/ir-thr-c2/servers. Allowlist: 136 ops from iaas-1.0.json (Arvancloud IaaS API 1.0.0). Rejects unknown paths — does not invent APIs. |
| invoke_iaas_v3_apiB | [OPENAPI] Call ecc.{region}.arvanapis.ir/v3 paths from iaas-3.0.0.yaml (servers, volumes, firewalls, networks, …). Allowlist: 45 ops from iaas-3.0.0.yaml (Arvancloud IaaS API Documentation v3.0.1). Rejects unknown paths — does not invent APIs. |
| invoke_vod_apiB | [OPENAPI] Full Arvan VOD 2.0 surface (channels, videos, files, reports, …). Allowlist: 54 ops from vod-2.0.json (Arvan VOD 2.0). Rejects unknown paths — does not invent APIs. |
| invoke_live_apiB | [OPENAPI] Full Arvan LIVE 2.0 surface (streams, watermarks, reports, metrics). Allowlist: 36 ops from live-2.0.json (Arvan LIVE 2.0). Rejects unknown paths — does not invent APIs. |
| invoke_vads_apiC | [OPENAPI] Full VADS 2.0 surface (channels, campaigns, ads, transactions). Allowlist: 29 ops from vads-2.0.json (ArvanCloud Video Advertising Service 2.0). Rejects unknown paths — does not invent APIs. |
| invoke_edge_apiB | [OPENAPI] Full Edge Computing 1.8.1 surface on edge-computing/v1. Allowlist: 25 ops from ec-1.0.yaml (Edge Computing 1.8.1). Rejects unknown paths — does not invent APIs. |
| invoke_caas_apiB | [OPENAPI] Full Arvan CaaS 1.25 (Kubernetes-style) on caas/v2/zones/{zone}. Pass concrete path e.g. /api/v1/namespaces/my-ns/pods. Allowlist: 299 ops from paas-1.25.json (Arvan CaaS 1.25). Rejects unknown paths — does not invent APIs. |
| invoke_aiaas_apiA | [OPENAPI] Full ai-ml-backend 1.0 on /ai/v1. Paths may be /endpoints or /ai/v1/datasets — /ai/v1 prefix is stripped when present. Allowlist: 43 ops from aiaas-1.0.json (ai-ml-backend 1.0). Rejects unknown paths — does not invent APIs. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| inspect_domain | Read-only workflow: inspect a CDN domain (domain detail, DNS, SSL, caching, NS check). |
| audit_dns | Audit DNS records for a domain for duplicates, missing roots, and cloud flags. |
| review_dns_change | Safe DNS change workflow: read → validate → change → verify. |
| troubleshoot_cdn | CDN incident workflow using troubleshoot APIs plus state reads. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| domains | Read-only list of CDN domains (GET /cdn/4.0/domains). Useful context before DNS/CDN changes. |
| cdn-edge-ips | Public ArvanCloud CDN edge IP list (https://www.arvancloud.ir/fa/ips.txt) — same source as github.com/arvancloud/ar-ipwhitelist. |
| official-github-sdks | Index of useful public (mostly archived) github.com/arvancloud repositories relevant to APIs/SDKs. |
TDQS
Scored across 130 tools
The server has many product-specific tools with clear prefixes (vod, live, vads, caas, ai, edge, storage), but generic invoke_*_api tools overlap heavily with the named tools, and similarly named operations exist across products (e.g., list_buckets vs list_ai_buckets vs list_storage_api_buckets, multiple get_domain variants). Descriptions give exact endpoints, but an agent could still misselect when product context is absent.
Nearly all tools use snake_case verb_noun, but consistency is only mostly maintained: some tools carry product prefixes (list_vod_videos), some do not (list_domains, list_servers), and version suffixes appear (list_servers_v3 vs list_servers). The generic invoke_*_api tools follow a predictable pattern, and S3 head_* verbs are conventional. These are minor deviations rather than chaotic naming.
130 tools is far beyond typical scoped MCP server size, and many named tools are made redundant by generic invoke_*_api tools that already cover large API surfaces. While the server spans many products, the count is overwhelming and likely to burden tool selection and agent reliability.
The surface is extremely broad across CDN, DNS, VOD, Live, VADS, IaaS, CaaS, AI, Edge, and Storage, with CRUD for many resources and generic API invokers to fill undocumented or missing operations. However, some named product areas lack full lifecycle operations (e.g., VOD channels/videos) and rely on generic invokers, so coverage is strong but not seamless.